# -*- coding=UTF-8 -*- # @Project QL_TimingScript # @fileName 好游快爆浇水爆米花任务.py # @author Echo # @EditTime 2024/10/7 """ 变量Hykb_cookie corn: 0 0 0 * * * """ import asyncio import os import random import re import urllib.parse import httpx from datetime import datetime from bs4 import BeautifulSoup from fn_print import fn_print from sendNotify import send_notification_message_collection if 'Hykb_cookie' in os.environ: Hykb_cookie = re.split("@", os.environ.get("Hykb_cookie")) else: Hykb_cookie = [] print("未查找到Hykb_cookie变量.") class HaoYouKuaiBao: def __init__(self, cookie): self.moreManorToDo_tasks = [] self.recommend_task_list = [] self.small_game_task_list = [] self.cookie = cookie self.headers = { "Origin": "https://huodong3.i3839.com", "Referer": "https://huodong3.3839.com/n/hykb/cornfarm/index.php?imm=0", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" } self.client = httpx.Client( base_url="https://huodong3.3839.com", verify=False, headers=self.headers ) __user_info = self.__user_info() self.user_name = __user_info.get("user") self.device = cookie.split("|")[4] def __user_info(self): """ 获取用户的信息 :return: """ try: u_response = self.client.post( url="/n/hykb/cornfarm/ajax.php", content=f"ac=login&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}" ).json() if u_response["key"] == "ok" and u_response["loginStatus"] == "100": return { "user": u_response["config"]["name"], "uid": u_response["config"]["uid"], "device_id": u_response["config"]["deviceid"] } else: print("好游快爆-获取用户信息出现错误:{}".format(u_response)) except Exception as e: print("好游快爆-获取用户信息出现错误:{}".format(e)) async def login(self): """ 登录 :return: """ try: l_response = self.client.post( url="/n/hykb/cornfarm/ajax.php", content=f"ac=login&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() # fn_print("="*10 + f"【{self.user_name}】登录成功" + "="*10) return l_response except Exception as e: fn_print("好游快爆-登录出现错误:{}".format(e)) # 浇水 async def watering(self): """ 浇水 :return: """ try: w_response = self.client.post( url="/n/hykb/cornfarm/ajax_sign.php", content=f"ac=Sign&verison=1.5.7.005&OpenAutoSign=&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if w_response["key"] == "ok": fn_print("={}=, 浇水成功💧💧💧".format(self.user_name)) return 1, w_response["add_baomihua"] elif w_response["key"] == "1001": fn_print("={}=, 今日已浇水".format(self.user_name)) return 0, 0 else: fn_print(f"={self.user_name}=, ❌浇水出现错误:{w_response}") return -1, 0 except Exception as e: fn_print(f"={self.user_name}=, ❌浇水异常:{e}") return -1, 0 # 收获 async def harvest(self): """ 收获 :return: """ try: h_response = self.client.post( url="/n/hykb/cornfarm/ajax_plant.php", content=f"ac=Harvest&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if h_response["key"] == "ok": fn_print("={}=, 收获成功🌽🌽🌽".format(self.user_name)) elif h_response["key"] == "503": fn_print(f"={self.user_name}=, {h_response['info']}") else: fn_print(f"={self.user_name}=, ❌收获失败:{h_response}") except Exception as e: fn_print(f"={self.user_name}=, ❌收获异常:{e}") # 播种 async def plant(self): """ 播种 :return: """ try: p_response = self.client.post( url="/n/hykb/cornfarm/ajax_plant.php", content=f"ac=Plant&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if p_response["key"] == "ok": fn_print("={}=, 播种成功🌾🌾🌾".format(self.user_name)) return 1 else: if p_response['seed'] == '0': fn_print("={}=, 种子已用完".format(self.user_name)) return -1 else: fn_print(f"={self.user_name}=, ❌播种失败:{p_response}") return 0 except Exception as e: fn_print(f"={self.user_name}=, ❌播种异常:{e}") # 获取种子商品 async def get_goods(self): """ 获取种子商品 :return: """ try: s_response = self.client.post( url="https://shop.3839.com/index.php?c=Index&a=initCard", content=f"pid=1660&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if s_response['code'] == 200: return s_response['data']['store_id'], s_response['data']['product_name'] except Exception as e: fn_print("好游快爆-获取商品id出现错误:{}".format(e)) # 购买种子 async def buy_seeds(self): """ 购买种子 :return: """ # 获取种子商品id goods_id, goods_name = await self.get_goods() cbs_response = self.client.post( url="/n/hykb/bmhstore2/inc/virtual/ajaxVirtual.php", content=f"ac=checkExchange&gid={goods_id}&t={datetime.now().strftime('%Y-%m-%d %H:%M:%S')}&r=0.{random.randint(100000000000000000, 899999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if cbs_response['key'] != "200" and cbs_response['msg'] != "验证通过": fn_print(f"={self.user_name}=, ❌购买种子出现错误:{cbs_response}") return False else: # 购买种子 bs_response = self.client.post( url="/n/hykb/bmhstore2/inc/virtual/ajaxVirtual.php", content=f"ac=exchange&t={datetime.now().strftime('%Y-%m-%d %H:%M:%S')}&r=0.{random.randint(100000000000000000, 899999999999999999)}&goodsid={goods_id}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if bs_response['key'] == 200: fn_print(f"={self.user_name}=, 购买种子成功,还剩下🍿爆米花{bs_response['bmh']}个") return True else: fn_print(f"={self.user_name}=, ❌购买种子失败:{bs_response}") return False # 获取今日必做推荐任务id async def get_recommend_task_ids(self): """ 获取今日必做推荐任务id :return: """ response = self.client.get("/n/hykb/cornfarm/index.php?imm=0") html = response.text soup = BeautifulSoup(html, 'html.parser') task_list = soup.select(".taskDailyUl > li") for task_item in task_list: tasks_infos = task_item.select_one("dl") id_param = tasks_infos.select_one("dd")["class"][0] title_param = tasks_infos.select_one("dt").get_text() reward_param = tasks_infos.select_one("dd").get_text() if "分享福利" in title_param or "分享资讯" in title_param: self.recommend_task_list.append( { "bmh_task_id": re.search(r"daily_dd_(.+)", id_param).group(1), "bmh_task_title": re.search(r"分享福利:(.*)", title_param).group( 1) if "分享福利" in title_param else re.search(r"分享资讯:(.*)", title_param).group(1), "reward_num": re.search(r"可得+(.+)", reward_param).group(1) } ) elif "免安装、即点即玩" in task_item.select("div.task-info")[0].get_text(): self.small_game_task_list.append( { "bmh_task_id": re.search(r"daily_dd_(.+)", id_param).group(1), "bmh_task_title": title_param, "reward_num": re.search(r"可得+(.+)", reward_param).group(1) } ) async def get_moreManorToDo_task_ids(self): """ 获取更多庄园必做任务id :return: """ m_response = self.client.get("/n/hykb/cornfarm/index.php?imm=0") html = m_response.text soup = BeautifulSoup(html, 'html.parser') task_list = soup.select(".taskYcxUl > li") for task_item in task_list: task_info = task_item.select_one("dl") id_param = task_info["onclick"] title_param = task_info.select_one("dt").get_text() reward_param = task_info.select_one("dd").get_text() self.moreManorToDo_tasks.append( { "bmh_task_id": re.search(r"ShowLue\((.+),'ycx'\); return false;", id_param).group(1), "bmh_task_title": title_param, "reward_num": re.search(r"可得+(.+)", reward_param).group(1) } ) async def do_tasks_every_day(self, recommend_task): """ 每日必做推荐任务 :param recommend_task: :return: """ try: daily_share_response = self.client.post( url="/n/hykb/cornfarm/ajax_daily.php", content=f"ac=DailyShare&id={recommend_task['bmh_task_id']}&onlyc=0&r=0.{random.randint(100000000000000, 8999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if daily_share_response["key"] != "2002": return False # 回调任务 daily_share_callback_response = self.client.post( url="/n/hykb/cornfarm/ajax_daily.php", content=f"ac=DailyShareCallback&id={recommend_task['bmh_task_id']}&mode=qq&source=ds&r=0.{random.randint(100000000000000, 8999999999999999)}" f"&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if daily_share_callback_response["key"] == "ok" and daily_share_callback_response["info"] == "可以领奖": fn_print(f"={self.user_name}=, 任务-{recommend_task['bmh_task_title']}- 可以领奖了🎉🎉🎉") return True elif daily_share_callback_response["key"] == "2002": fn_print(f"={self.user_name}=, 任务-{recommend_task['bmh_task_title']}- 已经领过奖励了🎁") return False else: fn_print( f"={self.user_name}=, 任务-{recommend_task['bmh_task_title']}- \n{daily_share_callback_response}\n不可以领奖🫷🫸") return False except Exception as e: fn_print(f"={self.user_name}=, 调度任务异常:", e) async def do_small_game_task(self, recommend_task): """ 免安装、即点即玩的小游戏任务 :param recommend_task: :return: """ try: daily_small_game_response = self.client.post( url="/n/hykb/cornfarm/ajax_daily.php", content=f"ac=DailySmallGame&id={recommend_task['bmh_task_id']}&r=0.{random.randint(100000000000000, 8999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if daily_small_game_response["key"] == "ok": fn_print(f"={self.user_name}=, 小游戏任务🎮🎮🎮-{recommend_task['bmh_task_title']}- 可以领奖了🎉🎉🎉") return True else: fn_print( f"={self.user_name}=, 小游戏任务🎮🎮🎮-{recommend_task['bmh_task_title']}- ❌游玩小游戏任务失败:{daily_small_game_response}") return False except Exception as e: fn_print(f"={self.user_name}=, 小游戏任务调度任务异常:", e) async def receive_small_game_reward(self, recommend_task): """ 领取免安装、即点即玩的小游戏任务奖励 :param recommend_task: :return: """ try: recevie_small_game_reward_response = self.client.post( url="/n/hykb/cornfarm/ajax_daily.php", content=f"ac=DailySmallGameLing&id={recommend_task['bmh_task_id']}&VersionCode=342&smdeviceid=BIb2%2B05P0FzEEGiSf%2Fg59Gok28Sb6y1tyhmR8RlC2X0FUtOGCbu3ONvgIEoA2hae0BrOCLXtqoWe1TgeVHU0L7A%3D%3D&verison=1.5.7.507&r=0.{random.randint(100000000000000, 8999999999999999)}&scookie={urllib.parse.quote(self.cookie)}&device={self.device}" ).json() if recevie_small_game_reward_response["key"] == "ok": fn_print(f"={self.user_name}=, 小游戏任务🎮🎮🎮-{recommend_task['bmh_task_title']}- ✅领取任务奖励成功!") elif recevie_small_game_reward_response["key"] == "2001": fn_print(f"={self.user_name}=, 小游戏任务🎮🎮🎮-{recommend_task['bmh_task_title']}- 已经领过奖励了!") else: fn_print( f"={self.user_name}=, 小游戏任务🎮🎮🎮-{recommend_task['bmh_task_title']}- ❌领取任务奖励失败:{recevie_small_game_reward_response}") except Exception as e: fn_print(f"={self.user_name}=, 小游戏任务领取奖励异常:", e) async def receive_commendDaily_reward(self, recommend_task): """ 领取每日必做推荐任务奖励 :param recommend_task: :return: """ try: recevie_daily_reward_response = self.client.post( url="/n/hykb/cornfarm/ajax_daily.php", content=f"ac=DailyShareLing&smdeviceid=BTeK4FWZx3plsETCF1uY6S1h2uEajvI1AicKa4Lqz3U7Tt5wKKDZZqVmVr7WpkcEuSQKyiDA3d64bErE%2FsaJp3Q%3D%3D&verison=1.5.7.507&id={recommend_task['bmh_task_id']}&r=0.{random.randint(100000000000000, 8999999999999999)}&scookie={self.cookie}" f"&device={self.device}" ).json() if recevie_daily_reward_response["key"] == "ok": fn_print(f"={self.user_name}=, 任务-{recommend_task['bmh_task_title']}- ✅领取任务奖励成功!") elif recevie_daily_reward_response["key"] == "2001": fn_print(f"={self.user_name}=, 任务-{recommend_task['bmh_task_title']}- 今天已经领取过了!") else: fn_print(f"={self.user_name}=, 任务-{recommend_task['bmh_task_title']}- 领取任务奖励失败!") except Exception as e: fn_print(f"={self.user_name}=, 领取任务奖励异常:", e) async def process_doItRecommendDaily_task(self, recommend_task): """ 处理每日必做推荐任务 :param recommend_task: 每日必做推荐任务信息 :return: """ await self.do_tasks_every_day(recommend_task) # 调度任务 await self.receive_commendDaily_reward(recommend_task) # 领取任务奖励 async def process_small_game_task(self, recommend_task): """ 处理免安装、即点即玩的小游戏任务 :param recommend_task: :return: """ await self.do_small_game_task(recommend_task) await self.receive_small_game_reward(recommend_task) async def run_task(self): """ 执行任务 :return: """ await self.get_recommend_task_ids() for recommend_task in self.recommend_task_list: if not await self.process_doItRecommendDaily_task(recommend_task): continue for small_game_task in self.small_game_task_list: if not await self.process_small_game_task(small_game_task): continue async def run(self): data = await self.login() if data['key'] == 'ok': fn_print("=" * 10 + f"【{self.user_name}】登录成功" + "=" * 10) # 优先判断成熟度是否已满 if data['config']['csd_jdt'] == "100%": await self.harvest() data = await self.login() # 判断是否已播种 if data['config']['grew'] == '-1': plant_status = await self.plant() if plant_status == -1: fn_print("={}=, 播种失败,没有种子".format(self.user_name)) # 购买种子 await self.buy_seeds() await self.plant() elif plant_status == 1: ... else: fn_print("={}=, 播种失败".format(self.user_name)) await self.watering() fn_print("=" * 10 + f"【{self.user_name}】开始执行每日必做推荐任务" + "=" * 10) await self.run_task() else: fn_print(f"={self.user_name}=, ❌登录失败:{data}") async def main(): tasks = [] for cookie_ in Hykb_cookie: hykb = HaoYouKuaiBao(cookie_) tasks.append(hykb.run()) await asyncio.gather(*tasks) if __name__ == '__main__': asyncio.run(main()) send_notification_message_collection("好游快爆活动奖励领取通知 - {}".format(datetime.now().strftime("%Y/%m/%d")))