#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
cron: 1 1 1 1 *
new Env('发财挖宝');
活动入口: 京东极速版 > 我的 > 发财挖宝
最高可得总和为10元的微信零钱和红包
脚本功能为: 挖宝，提现，没有助力功能，当血量剩余 1 时停止挖宝，领取奖励并提现 

目前需要完成逛一逛任务并且下单任务才能通关，不做的话大概可得1.5～2块的微信零钱
'''
import os,json,random,time,re,string,functools,asyncio
import sys
sys.path.append('../../tmp')
print('\n运行本脚本之前请手动进入游戏点击一个方块\n')
print('\n挖的如果都是0.01红包就是黑了，别挣扎了！\n')
print('\n默认自动领取奖励，关闭请在代码383行加上#号注释即可\n')
try:
    import requests
except Exception as e:
    print(str(e) + "\n缺少requests模块, 请执行命令：pip3 install requests\n")
requests.packages.urllib3.disable_warnings()


linkId="pTTvJeSTrpthgk9ASBVGsw"


# 获取pin
cookie_findall=re.compile(r'pt_pin=(.+?);')
def get_pin(cookie):
    try:
        return cookie_findall.findall(cookie)[0]
    except:
        print('ck格式不正确，请检查')

# 读取环境变量
def get_env(env):
    try:
        if env in os.environ:
            a=os.environ[env]
        elif '/ql' in os.path.abspath(os.path.dirname(__file__)):
            try:
                a=v4_env(env,'/ql/config/config.sh')
            except:
                a=eval(env)
        elif '/jd' in os.path.abspath(os.path.dirname(__file__)):
            try:
                a=v4_env(env,'/jd/config/config.sh')
            except:
                a=eval(env)
        else:
            a=eval(env)
    except:
        a=''
    return a

# v4
def v4_env(env,paths):
    b=re.compile(r'(?:export )?'+env+r' ?= ?[\"\'](.*?)[\"\']', re.I)
    with open(paths, 'r') as f:
        for line in f.readlines():
            try:
                c=b.match(line).group(1)
                break
            except:
                pass
    return c 


# 随机ua
def ua():
    sys.path.append(os.path.abspath('.'))
    try:
        from jdEnv import USER_AGENTS as a
    except:
        a='jdpingou;android;5.5.0;11;network/wifi;model/M2102K1C;appBuild/18299;partner/lcjx11;session/110;pap/JA2019_3111789;brand/Xiaomi;Mozilla/5.0 (Linux; Android 11; M2102K1C Build/RKQ1.201112.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/92.0.4515.159 Mobile Safari/537.36'
    return a

# 13位时间戳
def gettimestamp():
    return str(int(time.time() * 1000))

## 获取cooie
class Judge_env(object):
    def main_run(self):
        if '/jd' in os.path.abspath(os.path.dirname(__file__)):
            cookie_list=self.v4_cookie()
        else:
            cookie_list=os.environ["JD_COOKIE"].split('&')       # 获取cookie_list的合集
        if len(cookie_list)<1:
            print('请填写环境变量JD_COOKIE\n')    
        return cookie_list

    def v4_cookie(self):
        a=[]
        b=re.compile(r'Cookie'+'.*?=\"(.*?)\"', re.I)
        with open('/jd/config/config.sh', 'r') as f:
            for line in f.readlines():
                try:
                    regular=b.match(line).group(1)
                    a.append(regular)
                except:
                    pass
        return a
cookie_list=Judge_env().main_run()   


def taskGetUrl(functionId, body, cookie):
    url=f'https://api.m.jd.com/?functionId={functionId}&body={json.dumps(body)}&t={gettimestamp()}&appid=activities_platform&client=H5&clientVersion=1.0.0'
    headers={
        'Cookie': cookie,
        'Host': 'api.m.jd.com',
        'Connection': 'keep-alive',
        'origin': 'https://bnzf.jd.com',
        'Content-Type': 'application/x-www-form-urlencoded',
        'accept': 'application/json, text/plain, */*',
        "User-Agent": ua(),
        'Accept-Language': 'zh-cn',
        'Accept-Encoding': 'gzip, deflate, br',
    }
    for n in range(3):
        try:
            res=requests.get(url,headers=headers, timeout=10).json()
            return res
        except:
            if n==2:
                print('API请求失败，请检查网路重试❗\n')   


# 剩余血量
def xueliang(cookie):
    body={"linkId":linkId,"round":1}
    res=taskGetUrl("happyDigHome", body, cookie)
    if not res:
        return
    if res['code']==0:
        if res['success']:
            curRound=res['data']['curRound']                        # 未知
            blood=res['data']['blood']                              # 剩余血量
            return blood      

def jinge(cookie,i):
    body={"linkId":linkId}
    res=taskGetUrl("happyDigHome", body, cookie)
    if not res:
        return
    if res['code']==0:
        if res['success']:
            curRound=res['data']['curRound']                        # 未知
            blood=res['data']['blood']                              # 剩余血量
            roundList=res['data']['roundList']                      # 3个总池子
            roundList_n=roundList[0]
            redAmount=roundList_n['redAmount']                  # 当前池已得京东红包
            cashAmount=roundList_n['cashAmount']                # 当前池已得微信红包

            return [blood,redAmount,cashAmount]   

# 页面数据
def happyDigHome(cookie):
    body={"linkId":linkId,"round":1}
    res=taskGetUrl("happyDigHome", body, cookie)
    exit_flag = "false"
    if not res:
        return
    if res['code']==0:
        if res['success']:
            curRound=res['data']['curRound']                        # 未知
            incep_blood=res['data']['blood']                        # 剩余血量
            roundList=res['data']['roundList']                      # 3个总池子
            for e,roundList_n in enumerate(roundList):              # 迭代每个池子
                roundid=roundList_n['round']                        # 池序号
                state=roundList_n['state'] 
                rows=roundList_n['rows']                            # 池规模，rows*rows
                redAmount=roundList_n['redAmount']                  # 当前池已得京东红包
                cashAmount=roundList_n['cashAmount']                # 当前池已得微信红包
                leftAmount=roundList_n['leftAmount']                # 剩余红包？
                chunks=roundList_n['chunks']                        # 当前池详情list

                a=jinge(cookie,roundid)
                if roundid==1:
                    print(f'\n开始 "入门" 难度关卡（{rows}*{rows}）')
                elif roundid==2:
                    print(f'\n开始 "挑战" 难度关卡（{rows}*{rows}）')
                elif roundid==3:
                    print(f'\n开始 "终极" 难度关卡（{rows}*{rows}）')
                print(f'当前剩余血量 {a[0]}🩸')
                ## print(f'当前池已得京东红包 {a[2]}\n当前池已得微信红包 {a[1]}\n')
                _blood=xueliang(cookie)
                if _blood>1  or incep_blood>=21:
                    happyDigDo(cookie,roundid,0,0)
                    if e==0 or e==1:
                        roundid_n=4
                    else:
                        roundid_n=5
                    for n in range(roundid_n):
                        for i in range(roundid_n):
                            _blood=xueliang(cookie)
                            if _blood>1 or incep_blood>=21:
                                ## print(f'当前血量为 {_blood}')
                                a=n+1
                                b=i+1
                                print(f'挖取坐标({a},{b})')
                                happyDigDo(cookie,roundid,n,i)
                            else:
                                a=jinge(cookie,roundid)
                                print(f'没血了，不挖了')
                                exit_flag = "true"
                                ## print(f'当前池已得京东红包 {a[2]}\n当前池已得微信红包 {a[1]}\n')
                                break

                        if exit_flag == "true":
                            break
                if exit_flag == "true":
                    break
        else:
            print(f'获取数据失败\n{res}\n')
    else:
        print(f'获取数据失败\n{res}\n')


 # 玩一玩
def apDoTask(cookie):
     print('开始做玩一玩任务')
     body={"linkId":linkId,"taskType":"BROWSE_CHANNEL","taskId":454,"channel":4,"itemId":"https%3A%2F%2Fsignfree.jd.com%2F%3FactivityId%3DPiuLvM8vamONsWzC0wqBGQ","checkVersion":False}
     res=taskGetUrl('apDoTask', body, cookie)
     if not res:
         return
     try:    
         if res['success']:
             print('玩好了')
         else:
             print(f"{res['errMsg']}")
     except:
         print(f"错误\n{res}")
    

# 挖宝
def happyDigDo(cookie,roundid,rowIdx,colIdx):
    body={"round":roundid,"rowIdx":rowIdx,"colIdx":colIdx,"linkId":linkId}
    res=taskGetUrl("happyDigDo", body, cookie)
    if not res:
        return
    if res['code']==0:
        if res['success']:
            typeid=res['data']['chunk']['type']
            if typeid==2:
                print(f"获得极速版红包 {res['data']['chunk']['value']} 🧧\n")
            elif typeid==3:
                print(f"🎉 获得微信零钱 {res['data']['chunk']['value']} 💰\n")
            elif typeid==4:
                print(f"💥Boom💥 挖到了炸弹 💣\n")
            elif typeid==1:
                print(f"获得优惠券 🎟️\n")
            else:
                print(f'不知道挖到了什么 🎁\n')
        else:
            print(f'{res}\n挖宝失败\n')
    else:
        print(f'{res}\n挖宝失败\n')

# # 助力码
# def inviteCode(cookie):
#     global inviteCode_1_list,inviteCode_2_list
#     body={"linkId":linkId}
#     res=taskGetUrl("happyDigHome", body, cookie)
#     if not res:
#         return
#     try:
#         if res['success']:
#             print(f"账号{get_pin(cookie)}助力码为{res['data']['inviteCode']}")
#             inviteCode_1_list.append(res['data']['inviteCode'])
#             print(f"账号{get_pin(cookie)}助力码为{res['data']['markedPin']}")
#             inviteCode_2_list.append(res['data']['markedPin'])
#         else:
#             print('快去买买买吧')
#     except:
#         print(f"错误\n{res}\n")

# # 助力
# def happyDigHelp(cookie,fcwbinviter,fcwbinviteCode):
#     print(f"账号 {get_pin(cookie)} 去助力{fcwbinviteCode}")
#     xueliang(cookie)
#     body={"linkId":linkId,"inviter":fcwbinviter,"inviteCode":fcwbinviteCode}
#     res=taskGetUrl("happyDigHelp", body, cookie)
#     if res['success']:
#         print('助力成功')
#     else:
#         print(res['errMsg'])

# 领取奖励
def happyDigExchange(cookie):
    for n in range(1,4):
        xueliang(cookie)
        print(f"\n开始领取第{n}场的奖励")
        body={"round":n,"linkId":linkId}
        res=taskGetUrl("happyDigExchange", body, cookie)
        if not res:
            return
        if res['code']==0:
            if res['success']:
                try:
                    print(f"已领取极速版红包 {res['data']['redValue']} 🧧")
                except:
                    print('')
                if res['data']['wxValue'] != "0":
                    try:
                        print(f"可提现微信零钱 {res['data']['wxValue']} 💰")
                    except:
                        pass
            else:
                print(res['errMsg'])
        else:
            print(res['errMsg'])



# 微信现金id
def spring_reward_list(cookie):
    happyDigExchange(cookie)
    xueliang(cookie)
    
    body={"linkId":linkId,"pageNum":1,"pageSize":6}
    res=taskGetUrl("spring_reward_list", body, cookie)
    
    if res['code']==0:
        if res['success']:
            items=res['data']['items']
            for _items in items:
                amount=_items['amount']         # 金额
                prizeDesc=_items['prizeDesc']   # 金额备注
                amountid=_items['id']           # 金额id
                poolBaseId=_items['poolBaseId']
                prizeGroupId=_items['prizeGroupId']
                prizeBaseId=_items['prizeBaseId']
                if '红包' in f"{prizeDesc}":
                    continue
                if '券' in f"{prizeDesc}":
                    continue
                else:
                    print('\n去提现微信零钱 💰')
                    time.sleep(3.2)
                    wecat(cookie,amountid,poolBaseId,prizeGroupId,prizeBaseId)
        else:
            print(f'获取数据失败\n{res}\n')
    else:
        print(f'获取数据失败\n{res}\n')

# 微信提现
def wecat(cookie,amountid,poolBaseId,prizeGroupId,prizeBaseId):
    xueliang(cookie)
    
    url='https://api.m.jd.com'
    headers={
        'Cookie': cookie,
        'Host': 'api.m.jd.com',
        'Connection': 'keep-alive',
        'origin': 'https://bnzf.jd.com',
        'Content-Type': 'application/x-www-form-urlencoded',
        "User-Agent": ua(),
        'Accept-Language': 'zh-cn',
        'Accept-Encoding': 'gzip, deflate, br',
    }
    body={"businessSource":"happyDiggerH5Cash","base":{"id":amountid,"business":"happyDigger","poolBaseId":poolBaseId,"prizeGroupId":prizeGroupId,"prizeBaseId":prizeBaseId,"prizeType":4},"linkId":linkId}
    data=f"functionId=apCashWithDraw&body={json.dumps(body)}&t=1635596380119&appid=activities_platform&client=H5&clientVersion=1.0.0"
    for n in range(3):
        try:
            res=requests.post(url,headers=headers,data=data,timeout=10).json()
            break
        except:
            if n==2:
                print('API请求失败，请检查网路重试❗\n') 
    try:
        if res['code']==0:
            if res['success']:
                print(res['data']['message']+'\n')
    except:
        print(res)
        print('')
    

def main():
    print('🔔发财挖宝，开始！\n')

    # print('获取助力码\n')
    # global inviteCode_1_list,inviteCode_2_list
    # inviteCode_1_list=list()
    # inviteCode_2_list=list()
    # for cookie in cookie_list:
    #    inviteCode(cookie) 

    # print('互助\n')
    # inviteCode_2_list=inviteCode_2_list[:2]
    # for e,fcwbinviter in enumerate(inviteCode_2_list):
    #     fcwbinviteCode=inviteCode_1_list[e]
    #     for cookie in cookie_list:
    #         happyDigHelp(cookie,fcwbinviter,fcwbinviteCode)

    print(f'====================共{len(cookie_list)}京东个账号Cookie=========\n')

    for e,cookie in enumerate(cookie_list,start=1):
        print(f'******开始【账号 {e}】 {get_pin(cookie)} *********\n')
        apDoTask(cookie)
        happyDigHome(cookie)
        spring_reward_list(cookie)


if __name__ == '__main__':
    main()
