def check_all_skey_and_pskey(cfg, check_skey_only=False): if not has_any_account_in_normal_run(cfg): return _show_head_line("启动时检查各账号skey/pskey/openid是否过期") qq2index = {} for _idx, account_config in enumerate(cfg.account_configs): idx = _idx + 1 if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 continue logger.warning(color("fg_bold_yellow") + f"------------检查第{idx}个账户({account_config.name})------------") djcHelper = DjcHelper(account_config, cfg.common) djcHelper.fetch_pskey() djcHelper.check_skey_expired() if not check_skey_only: djcHelper.get_bind_role_list(print_warning=False) djcHelper.fetch_guanjia_openid(print_warning=False) qq = uin2qq(djcHelper.cfg.account_info.uin) if qq in qq2index: msg = f"第{idx}个账号的实际登录QQ {qq} 与第{qq2index[qq]}个账号的qq重复,是否重复扫描了?\n\n点击确认后,程序将清除本地登录记录,并退出运行。请重新运行并按顺序登录正确的账号~" logger.error(color("fg_bold_red") + msg) win32api.MessageBox(0, msg, "重复登录", win32con.MB_ICONINFORMATION) clear_login_status() sys.exit(-1) qq2index[qq] = idx
def auto_send_cards(cfg): if not has_any_account_in_normal_run(cfg): return _show_head_line("运行完毕自动赠送卡片") target_qqs = cfg.common.auto_send_card_target_qqs if len(target_qqs) == 0: logger.warning("未定义自动赠送卡片的对象QQ数组,将跳过本阶段") return # 统计各账号卡片数目 logger.info("拉取各账号的卡片数据中,请耐心等待...") qq_to_card_name_to_counts = {} qq_to_prize_counts = {} qq_to_djcHelper = {} for _idx, account_config in enumerate(cfg.account_configs): idx = _idx + 1 if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 continue djcHelper = DjcHelper(account_config, cfg.common) djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) lr = djcHelper.fetch_pskey() if lr is None: continue qq = uin2qq(lr.uin) qa = QzoneActivity(djcHelper, lr) qq_to_card_name_to_counts[qq] = qa.get_card_counts() qq_to_prize_counts[qq] = qa.get_prize_counts() qq_to_djcHelper[qq] = djcHelper logger.info("{}/{} 账号 {:} 的数据拉取完毕".format( idx, len(cfg.account_configs), padLeftRight(account_config.name, 12))) # 赠送卡片 for target_qq in target_qqs: if target_qq in qq_to_djcHelper: left_times = qq_to_djcHelper[ target_qq].ark_lottery_query_left_times(target_qq) logger.warning( color("fg_bold_green") + "账号 {}({}) 今日仍可被赠送 {} 次卡片".format( qq_to_djcHelper[target_qq].cfg.name, target_qq, left_times) ) # 最多赠送目标账号今日仍可接收的卡片数 for i in range(left_times): send_card(target_qq, qq_to_card_name_to_counts, qq_to_prize_counts, qq_to_djcHelper) # 赠送卡片完毕后尝试抽奖 djcHelper = qq_to_djcHelper[target_qq] lr = djcHelper.fetch_pskey() if lr is not None: qa = QzoneActivity(djcHelper, lr) qa.try_lottery_using_cards(print_warning=False)
def do_check_all_skey_and_pskey(idx: int, account_config: AccountConfig, common_config: CommonConfig): if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 return None logger.warning(color("fg_bold_yellow") + f"------------检查第{idx}个账户({account_config.name})------------") djcHelper = DjcHelper(account_config, common_config) djcHelper.fetch_pskey() djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False)
def do_check_all_skey_and_pskey(idx: int, window_index:int, account_config: AccountConfig, common_config: CommonConfig, check_skey_only: bool) -> Optional[DjcHelper]: if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 return None logger.warning(color("fg_bold_yellow") + f"------------检查第{idx}个账户({account_config.name})------------") djcHelper = DjcHelper(account_config, common_config) djcHelper.fetch_pskey(window_index=window_index) djcHelper.check_skey_expired(window_index=window_index) if not check_skey_only: djcHelper.get_bind_role_list(print_warning=False) djcHelper.fetch_guanjia_openid(print_warning=False) return djcHelper
def check_all_skey_and_pskey(cfg): if not has_any_account_in_normal_run(cfg): return _show_head_line("启动时检查各账号skey/pskey/openid是否过期") for _idx, account_config in enumerate(cfg.account_configs): idx = _idx + 1 if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 continue logger.warning(color("fg_bold_yellow") + "------------检查第{}个账户({})------------".format(idx, account_config.name)) djcHelper = DjcHelper(account_config, cfg.common) djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) djcHelper.fetch_pskey()
def query_card_info(): # 读取配置信息 cfg = config() # init_pool(cfg.get_pool_size()) # check_all_skey_and_pskey(cfg, check_skey_only=True) # 12.30 送卡片次数(re:好像送给别人没有上限?) indexes = list(range(len(cfg.account_configs), 0, -1)) # 展示卡仓信息 lottery_zzconfig = zzconfig() card_info_map = parse_card_group_info_map(lottery_zzconfig) order_map = {} # 卡片编码 => 名称 for name, card_info in card_info_map.items(): order_map[card_info.index] = name heads = [] colSizes = [] card_indexes = [ "1-1", "1-2", "1-3", "1-4", "2-1", "2-2", "2-3", "2-4", "3-1", "3-2", "3-3", "3-4" ] card_width = 3 heads.extend(card_indexes) colSizes.extend([card_width for i in card_indexes]) summaryCols = [*[0 for card in card_indexes]] for idx in indexes: # 从1开始,第i个 account_config = cfg.account_configs[idx - 1] djcHelper = DjcHelper(account_config, cfg.common) lr = djcHelper.fetch_pskey() djcHelper.check_skey_expired() djcHelper.get_bind_role_list() qa = QzoneActivity(djcHelper, lr) card_counts = qa.get_card_counts() # 处理各个卡片数目 for card_position, card_index in enumerate(card_indexes): card_count = card_counts[order_map[card_index]] # 更新统计信息 summaryCols[card_position] += card_count msg = "\n卡片详情如下" msg += "\n " for col in range(4): msg += f" {col + 1:3d}" for row in range(3): msg += f"\n{row + 1}" for col in range(4): msg += f" {summaryCols[row * 4 + col]:3d}" msg += "\n" return msg
def query_lottery_status(idx: int, account_config: AccountConfig, common_config: CommonConfig, card_indexes: List[str], prize_indexes: List[str], order_map: Dict[str, str]) -> Optional[List]: if not account_config.ark_lottery.show_status: return djcHelper = DjcHelper(account_config, common_config) lr = djcHelper.fetch_pskey() if lr is None: return djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) qa = QzoneActivity(djcHelper, lr) card_counts = qa.get_card_counts() prize_counts = qa.get_prize_counts() cols = [idx, account_config.name] # 处理各个卡片数目 for card_position, card_index in enumerate(card_indexes): card_count = card_counts[order_map[card_index]] cols.append(card_count) # 处理各个奖励剩余领取次数 for prize_index in prize_indexes: prize_count = prize_counts[order_map[prize_index]] cols.append(prize_count) return cols
def sell_card(targetQQ: str, cards_to_send: List[str]) -> str: cards_to_send = [ name for name in cards_to_send if name != CARD_PLACEHOLDER ] original_cards = [*cards_to_send] # 读取配置信息 load_config("config.toml", "config.toml.local") cfg = config() # 12.30 送卡片次数(re:好像送给别人没有上限?) indexes = list(range(len(cfg.account_configs), 0, -1)) card_info_map = parse_card_group_info_map(zzconfig()) for name in cards_to_send: if name not in card_info_map: return f"{name}不是本期卡片名称,有效的卡片名称为: {list(card_info_map.keys())}" success_send_list = [] for idx in indexes: # 从1开始,第i个 account_config = cfg.account_configs[idx - 1] show_head_line(f"开始处理第{idx}个账户[{account_config.name}]", color("fg_bold_yellow")) djcHelper = DjcHelper(account_config, cfg.common) lr = djcHelper.fetch_pskey() djcHelper.check_skey_expired() djcHelper.get_bind_role_list() remaining_cards = [] for name in cards_to_send: res = djcHelper.send_card_by_name(name, targetQQ) retCode = int(res["13333"]["ret"]) if retCode == 0: success_send_list.append(name) else: remaining_cards.append(name) if len(original_cards) == 1: if retCode == 10017: return "该账号今日已被赠送过四次" cards_to_send = remaining_cards if len(cards_to_send) == 0: break msg = "" if len(success_send_list) != 0: msg += f"\n成功发送以下卡片:{success_send_list}" if len(cards_to_send) != 0: msg += f"\n无法发送以下卡片:{cards_to_send},是否已达到赠送上限或者这个卡卖完了?" if len(success_send_list) != 0: msg += f"\n请使用手机打开集卡页面确认是否到账~ 若到账请按1元每张的价格主动扫码转账哦~(不自觉的坏孩子会被tjjtds哦<_<)" msg += "\n" return msg
def query_account_ark_lottery_info(idx: int, total_account: int, account_config: AccountConfig, common_config: CommonConfig) -> (Dict[str, int], Dict[str, int], DjcHelper): djcHelper = DjcHelper(account_config, common_config) lr = djcHelper.fetch_pskey() if lr is None: return djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) qa = QzoneActivity(djcHelper, lr) card_name_to_counts = qa.get_card_counts() prize_counts = qa.get_prize_counts() logger.info(f"{idx:2d}/{total_account} 账号 {padLeftRight(account_config.name, 12)} 的数据拉取完毕") return card_name_to_counts, prize_counts, djcHelper
def show_lottery_status(ctx, cfg, need_show_tips=False): if not has_any_account_in_normal_run(cfg): return _show_head_line(ctx) logger.info(get_not_ams_act_desc("集卡")) lottery_zzconfig = zzconfig() card_info_map = parse_card_group_info_map(lottery_zzconfig) order_map = {} # 卡片编码 => 名称 for name, card_info in card_info_map.items(): order_map[card_info.index] = name # 奖励展示名称 => 实际名称 groups = [ lottery_zzconfig.prizeGroups.group1, lottery_zzconfig.prizeGroups.group2, lottery_zzconfig.prizeGroups.group3, lottery_zzconfig.prizeGroups.group4, ] prizeDisplayTitles = [] for group in groups: displayTitle = group.title if len(displayTitle) > 4 and "礼包" in displayTitle: # 将 全民竞速礼包 这种名称替换为 全民竞速 displayTitle = displayTitle.replace("礼包", "") order_map[displayTitle] = group.title prizeDisplayTitles.append(displayTitle) heads = [] colSizes = [] baseHeads = ["序号", "账号名"] baseColSizes = [4, 12] heads.extend(baseHeads) colSizes.extend(baseColSizes) card_indexes = ["1-1", "1-2", "1-3", "1-4", "2-1", "2-2", "2-3", "2-4", "3-1", "3-2", "3-3", "3-4"] card_width = 3 heads.extend(card_indexes) colSizes.extend([card_width for i in card_indexes]) prize_indexes = [*prizeDisplayTitles] heads.extend(prize_indexes) colSizes.extend([printed_width(name) for name in prize_indexes]) accounts_that_should_enable_cost_card_to_lottery = [] logger.info(tableify(heads, colSizes)) summaryCols = [1, "总计", *[0 for card in card_indexes], *[count_with_color(0, "bold_green", show_width=printed_width(prize_index)) for prize_index in prize_indexes]] for _idx, account_config in enumerate(cfg.account_configs): idx = _idx + 1 if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 continue if not account_config.ark_lottery.show_status: continue djcHelper = DjcHelper(account_config, cfg.common) lr = djcHelper.fetch_pskey() if lr is None: continue djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) qa = QzoneActivity(djcHelper, lr) card_counts = qa.get_card_counts() prize_counts = qa.get_prize_counts() summaryCols[0] += 1 cols = [idx, account_config.name] has_any_card = False has_any_left_gift = False # 处理各个卡片数目 for card_position, card_index in enumerate(card_indexes): card_count = card_counts[order_map[card_index]] cols.append(colored_count(idx, card_count, account_config.ark_lottery.show_color)) # 更新统计信息 summaryCols[len(baseHeads) + card_position] += card_count if card_count > 0: has_any_card = True # 处理各个奖励剩余领取次数 for prize_index in prize_indexes: prize_count = prize_counts[order_map[prize_index]] cols.append(count_with_color(prize_count, "bold_green", show_width=printed_width(prize_index))) if prize_count > 0: has_any_left_gift = True logger.info(tableify(cols, colSizes)) if has_any_card and not has_any_left_gift: accounts_that_should_enable_cost_card_to_lottery.append(account_config.name) for cardIdx in range(len(card_indexes)): idx = len(baseHeads) + cardIdx summaryCols[idx] = colored_count(len(cfg.account_configs), summaryCols[idx], cfg.common.ark_lottery_summary_show_color or "fg_thin_cyan") logger.info(tableify(summaryCols, colSizes)) if need_show_tips and len(accounts_that_should_enable_cost_card_to_lottery) > 0: accounts = ', '.join(accounts_that_should_enable_cost_card_to_lottery) msg = f"账户({accounts})仍有剩余卡片,但已无任何可领取礼包,建议开启消耗卡片来抽奖的功能" logger.warning(color("fg_bold_yellow") + msg)
load_config("config.toml", "config.toml.local") cfg = config() # 12.30 送卡片次数(re:好像送给别人没有上限?) indexes = [4] for idx in indexes: # 从1开始,第i个 account_config = cfg.account_configs[idx - 1] show_head_line("开始处理第{}个账户[{}]".format(idx, account_config.name), color("fg_bold_yellow")) djcHelper = DjcHelper(account_config, cfg.common) djcHelper.check_skey_expired() djcHelper.get_bind_role_list() lr = djcHelper.fetch_pskey() # re: 先填QQ # undone: 然后填写卡片 targetQQ = "XXXXXXXXXXX" cards_to_send = [ ("XXXXXXXXXXX", 1), ("XXXXXXXXXXX", 1), ("XXXXXXXXXXX", 1), ("XXXXXXXXXXX", 1), ] for name, count in cards_to_send: for i in range(count): djcHelper.send_card_by_name(name, targetQQ) # -----------具体卡片相关信息---------------
def show_lottery_status(ctx, cfg, need_show_tips=False): if not has_any_account_in_normal_run(cfg): return _show_head_line(ctx) order_map = { "1-1": "多人配合新挑战", "1-2": "丰富机制闯难关", "1-3": "新剧情视听盛宴", "1-4": "单人成团战不停", "2-1": "回归奖励大升级", "2-2": "秒升Lv96刷深渊", "2-3": "灿烂自选回归领", "2-4": "告别酱油变大佬", "3-1": "单人爽刷新玩法", "3-2": "独立成团打副本", "3-3": "海量福利金秋享", "3-4": "超强奖励等你拿", "全新团本": "勇士归来礼包", "超低门槛": "超低门槛", "人人可玩": "人人可玩", "幸运礼包": "幸运礼包", } heads = ["序号", "账号名"] colSizes = [4, 12] card_indexes = [ "1-1", "1-2", "1-3", "1-4", "2-1", "2-2", "2-3", "2-4", "3-1", "3-2", "3-3", "3-4" ] card_width = 3 heads.extend(card_indexes) colSizes.extend([card_width for i in card_indexes]) prize_indexes = ["全新团本", "超低门槛", "人人可玩", "幸运礼包"] heads.extend(prize_indexes) colSizes.extend([printed_width(name) for name in prize_indexes]) accounts_that_should_enable_cost_card_to_lottery = [] logger.info(tableify(heads, colSizes)) for _idx, account_config in enumerate(cfg.account_configs): idx = _idx + 1 if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 continue if not account_config.ark_lottery.show_status: continue djcHelper = DjcHelper(account_config, cfg.common) djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) lr = djcHelper.fetch_pskey() if lr is None: continue al = ArkLottery(djcHelper, lr) card_counts = al.get_card_counts() prize_counts = al.get_prize_counts() cols = [idx, account_config.name] has_any_card = False has_any_left_gift = False # 处理各个卡片数目 for card_index in card_indexes: card_count = card_counts[order_map[card_index]] show_count = card_count # 特殊处理色彩 if card_count == 0: if idx == 1: # 突出显示大号没有的卡片 show_count = color("fg_bold_cyan") + padLeftRight( card_count, 3) + color("INFO") else: # 小号没有的卡片直接不显示,避免信息干扰 show_count = "" else: if idx == 1: if card_count == 1: # 大号只有一张的卡片也特殊处理 show_count = color("fg_bold_blue") + padLeftRight( card_count, 3) + color("INFO") else: # 大号其余卡片亮绿色 show_count = color("fg_bold_green") + padLeftRight( card_count, 3) + color("INFO") else: # 小号拥有的卡片淡化处理,方便辨识 show_color = account_config.ark_lottery.show_color or "fg_bold_black" show_count = color(show_color) + padLeftRight( card_count, 3) + color("INFO") cols.append(show_count) if card_count > 0: has_any_card = True # 处理各个奖励剩余领取次数 for prize_index in prize_indexes: prize_count = prize_counts[order_map[prize_index]] cols.append(prize_count) if prize_count > 0: has_any_left_gift = True logger.info(tableify(cols, colSizes)) if has_any_card and not has_any_left_gift: accounts_that_should_enable_cost_card_to_lottery.append( account_config.name) if need_show_tips and len( accounts_that_should_enable_cost_card_to_lottery) > 0: msg = "账户({})仍有剩余卡片,但已无任何可领取礼包,建议开启消耗卡片来抽奖的功能".format( ', '.join(accounts_that_should_enable_cost_card_to_lottery)) logger.warning(color("fg_bold_yellow") + msg)
def show_lottery_status(ctx, cfg, need_show_tips=False): if not has_any_account_in_normal_run(cfg): return _show_head_line(ctx) show_end_time("2021-02-28 23:59:59") lottery_zzconfig = zzconfig() card_info_map = parse_card_group_info_map(lottery_zzconfig) order_map = {} # 卡片编码 => 名称 for name, card_info in card_info_map.items(): order_map[card_info.index] = name # 奖励展示名称 => 实际名称 groups = [ lottery_zzconfig.prizeGroups.group1, lottery_zzconfig.prizeGroups.group2, lottery_zzconfig.prizeGroups.group3, lottery_zzconfig.prizeGroups.group4, ] prizeDisplayTitles = [] for group in groups: displayTitle = group.title if len(displayTitle) > 4 and "礼包" in displayTitle: # 将 全民竞速礼包 这种名称替换为 全民竞速 displayTitle = displayTitle.replace("礼包", "") order_map[displayTitle] = group.title prizeDisplayTitles.append(displayTitle) heads = [] colSizes = [] baseHeads = ["序号", "账号名"] baseColSizes = [4, 12] heads.extend(baseHeads) colSizes.extend(baseColSizes) card_indexes = ["1-1", "1-2", "1-3", "1-4", "2-1", "2-2", "2-3", "2-4", "3-1", "3-2", "3-3", "3-4"] card_width = 3 heads.extend(card_indexes) colSizes.extend([card_width for i in card_indexes]) prize_indexes = [*prizeDisplayTitles] heads.extend(prize_indexes) colSizes.extend([printed_width(name) for name in prize_indexes]) accounts_that_should_enable_cost_card_to_lottery = [] logger.info(tableify(heads, colSizes)) summaryCols = [1, "总计", *[0 for card in card_indexes], *[count_with_color(0, "bold_green", show_width=printed_width(prize_index)) for prize_index in prize_indexes]] for _idx, account_config in enumerate(cfg.account_configs): idx = _idx + 1 if not account_config.is_enabled(): # 未启用的账户的账户不走该流程 continue if not account_config.ark_lottery.show_status: continue djcHelper = DjcHelper(account_config, cfg.common) lr = djcHelper.fetch_pskey() if lr is None: continue djcHelper.check_skey_expired() djcHelper.get_bind_role_list(print_warning=False) qa = QzoneActivity(djcHelper, lr) card_counts = qa.get_card_counts() prize_counts = qa.get_prize_counts() summaryCols[0] += 1 cols = [idx, account_config.name] has_any_card = False has_any_left_gift = False # 处理各个卡片数目 for card_position, card_index in enumerate(card_indexes): card_count = card_counts[order_map[card_index]] cols.append(colored_count(idx, card_count, account_config.ark_lottery.show_color)) # 更新统计信息 summaryCols[len(baseHeads) + card_position] += card_count if card_count > 0: has_any_card = True # 处理各个奖励剩余领取次数 for prize_index in prize_indexes: prize_count = prize_counts[order_map[prize_index]] cols.append(count_with_color(prize_count, "bold_green", show_width=printed_width(prize_index))) if prize_count > 0: has_any_left_gift = True logger.info(tableify(cols, colSizes)) if has_any_card and not has_any_left_gift: accounts_that_should_enable_cost_card_to_lottery.append(account_config.name) for cardIdx in range(len(card_indexes)): idx = len(baseHeads) + cardIdx summaryCols[idx] = colored_count(len(cfg.account_configs), summaryCols[idx], cfg.common.ark_lottery_summary_show_color or "fg_thin_cyan") logger.info(tableify(summaryCols, colSizes)) if need_show_tips and len(accounts_that_should_enable_cost_card_to_lottery) > 0: accounts = ', '.join(accounts_that_should_enable_cost_card_to_lottery) msg = f"账户({accounts})仍有剩余卡片,但已无任何可领取礼包,建议开启消耗卡片来抽奖的功能" logger.warning(color("fg_bold_yellow") + msg) if not os.path.exists("DNF蚊子腿小助手_集卡特别版.exe"): logger.warning(color("bold_cyan") + ( "以下为广告时间0-0\n" "如果只需要集卡功能,可以联系我购买集卡特别版哦,特别版仅包含集卡相关功能(集卡、送卡、展示卡片信息、兑换卡片奖励、使用卡片抽奖),供某些只需要集卡的朋友使用\n" "演示地址:https://www.bilibili.com/video/BV1zA411H7mP\n" "价格:6.66元\n" "购买方式:加小助手群后QQ私聊我付款截图,我确认无误后会将DLC以及用法发给你,并拉到一个无法主动加入的专用群,通过群文件分发该DLC的后续更新版本~\n" "PS:这个DLC相当于是小助手的子集,用于仅处理集卡相关内容,之前听到有的朋友有这样的需求,所以特地制作的,是否购买自行考量哈。\n" "如果购买的话能鼓励我花更多时间来维护小助手,支持新的蚊子腿以及优化使用体验(o゚▽゚)o \n" "\n" "2021.2.2 update: 本轮集卡我又换完啦,有需要买卡的朋友可以加群私聊我购买哦~依旧是一元一张任意卡。先问下有没有卡,得到确定回复后直接发付款截图和要收卡片的QQ号码即可(不需要加好友)" ))
def query_card_info(): # 读取配置信息 cfg = config() # init_pool(cfg.get_pool_size()) # check_all_skey_and_pskey(cfg, check_skey_only=True) # 12.30 送卡片次数(re:好像送给别人没有上限?) indexes = list(range(len(cfg.account_configs), 0, -1)) order_map, _ = make_ark_lottery_card_and_award_info() heads = [] colSizes = [] card_indexes = ["1-1", "1-2", "1-3", "1-4", "2-1", "2-2", "2-3", "2-4", "3-1", "3-2", "3-3", "3-4"] card_width = 3 heads.extend(card_indexes) colSizes.extend([card_width for i in card_indexes]) summaryCols = [*[0 for card in card_indexes]] for idx in indexes: # 从1开始,第i个 account_config = cfg.account_configs[idx - 1] if not account_config.function_switches.get_ark_lottery or not account_config.is_enabled(): continue djcHelper = DjcHelper(account_config, cfg.common) lr = djcHelper.fetch_pskey() djcHelper.check_skey_expired() djcHelper.get_bind_role_list() qa = QzoneActivity(djcHelper, lr) # 获取卡片和奖励数目,其中新版本卡片为 id=>count ,旧版本卡片为 name=>count card_counts: Dict[str, int] if is_new_version_ark_lottery(): card_counts = djcHelper.dnf_ark_lottery_get_card_counts() else: qa = QzoneActivity(djcHelper, lr) card_counts = qa.get_card_counts() # 处理各个卡片数目 for card_position, card_index in enumerate(card_indexes): card_count = card_counts[order_map[card_index]] # 更新统计信息 summaryCols[card_position] += card_count msg = "\n卡片详情如下" msg += "\n " for col in range(4): msg += f" {col + 1:3d}" for row in range(3): msg += f"\n{row + 1}" for col in range(4): msg += f" {summaryCols[row * 4 + col]:3d}" msg += "\n" return msg
def sell_card(targetQQ: str, cards_to_send: List[str]) -> str: cards_to_send = [name for name in cards_to_send if name != CARD_PLACEHOLDER] original_cards = [*cards_to_send] # 读取配置信息 cfg = config() # 12.30 送卡片次数(re:好像送给别人没有上限?) indexes = list(range(len(cfg.account_configs), 0, -1)) if not is_new_version_ark_lottery(): card_info_map = parse_card_group_info_map(zzconfig()) for name in cards_to_send: if name not in card_info_map: return f"{name}不是本期卡片名称,有效的卡片名称为: {list(card_info_map.keys())}" success_send_list = [] for idx in indexes: # 从1开始,第i个 account_config = cfg.account_configs[idx - 1] show_head_line(f"开始处理第{idx}个账户[{account_config.name}]", color("fg_bold_yellow")) if not account_config.function_switches.get_ark_lottery or not account_config.is_enabled(): continue djcHelper = DjcHelper(account_config, cfg.common) djcHelper.fetch_pskey() djcHelper.check_skey_expired() djcHelper.get_bind_role_list() remaining_cards = [] for name in cards_to_send: send_ok = False if is_new_version_ark_lottery(): send_ok = djcHelper.dnf_ark_lottery_send_card(name, targetQQ) else: res = djcHelper.send_card_by_name(name, targetQQ) retCode = int(res["13333"]["ret"]) if retCode == 0: send_ok = True else: if len(original_cards) == 1: if retCode == 10017: return "该账号今日已被赠送过四次" if send_ok: success_send_list.append(name) else: remaining_cards.append(name) cards_to_send = remaining_cards if len(cards_to_send) == 0: break msg = "" if len(success_send_list) != 0: msg += f"\n成功发送以下卡片:{success_send_list}" if len(cards_to_send) != 0: msg += f"\n无法发送以下卡片:{cards_to_send},是否已达到赠送上限或者这个卡卖完了?" if len(success_send_list) != 0: msg += "\n请使用手机打开集卡页面确认是否到账~ 若到账请按1元每张的价格主动扫码转账哦~(不定期我会核查的,如果买了不付款的话就加入本工具黑名单~)" msg += "\n" return msg
def cui(): # 读取配置信息 load_config("config.toml", "config.toml.local") cfg = config() from main_def import check_proxy check_proxy(cfg) # note: 以下内容修改为自己的配置 # 大号的账号序号(从1开始) dahao_indexes = [1] # 三个小号的序号 xiaohao_indexes = [6, 7, 8] # 三个小号的QQ号 xiaohao_qq_list = ["3036079506", "1470237902", "1276170371"] # re: 流程: # 1. send_to_xiaohao设为True,大号发送宝箱链接给三个小号 # 2. 电脑上,大号QQ里点开三个小号对话的宝箱链接,替换Scode到scode_list里面 # 3. send_to_xiaohao设为False,让小号开启各个宝箱 # --------------- 每次只需要按流程修改下面几行 --------------------- send_to_xiaohao = True # send_to_xiaohao = False scode_list = [ "MDJKQ0t5dDJYazlMVmMrc2ZXV0tVT0xsZitZMi9YOXZUUFgxMW1PcnQ2Yz0=", "UFgxa1lQZ3RBZERCMTU0N3dSWmcwZUxsZitZMi9YOXZUUFgxMW1PcnQ2Yz0=", "cXNpZTIrY2dRYk1GL2E4UjlGQzBkdUxsZitZMi9YOXZUUFgxMW1PcnQ2Yz0=", ] if len(xiaohao_qq_list) != scode_list: message_box("配置的小号数目与scode数目不一致,请确保两者一致", "出错了") sys.exit() # --------------- 每次只需要按流程修改上面几行 --------------------- # 登录相应账号 if send_to_xiaohao: indexes = dahao_indexes else: indexes = xiaohao_indexes for idx in indexes: # 从1开始,第i个 account_config = cfg.account_configs[idx - 1] show_head_line(f"预先获取第{idx}个账户[{account_config.name}]的skey", color("fg_bold_yellow")) if not account_config.is_enabled(): logger.warning("账号被禁用,将跳过") continue djcHelper = DjcHelper(account_config, cfg.common) djcHelper.fetch_pskey() djcHelper.check_skey_expired() # 执行对应逻辑 for order_index, account_index in enumerate(indexes): # 从1开始,第i个 account_config = cfg.account_configs[account_index - 1] show_head_line(f"开始处理第{account_index}个账户[{account_config.name}]", color("fg_bold_yellow")) if not account_config.is_enabled(): logger.warning("账号被禁用,将跳过") continue djcHelper = DjcHelper(account_config, cfg.common) djcHelper.fetch_pskey() djcHelper.check_skey_expired() djcHelper.get_bind_role_list() if send_to_xiaohao: logger.info( color("bold_green") + f"发送宝箱链接给小号QQ: {xiaohao_qq_list}") djcHelper.majieluo_send_to_xiaohao(xiaohao_qq_list) msg = ( "1. 请在电脑登录大号QQ,依次点击各个小号的对话框里刚刚发送的宝箱链接,在浏览器中复制其链接中sCode的值到scode_list对应位置\n" "2. 请修改send_to_xiaohao为False后再次运行") message_box(msg, "后续流程") else: scode = scode_list[order_index] logger.info( f"第{order_index + 1}个小号领取刚刚运行后填写的Scode列表中第{order_index + 1}个scode - {scode}" ) res = djcHelper.majieluo_open_box(scode) if res.sOutValue1 == 0: logger.info(color("bold_green") + "领取成功") else: code_to_message = { "1": "无效的赠送链接", "2": "不能打开自己的礼盒~", "3": "该礼盒已经被开启", "4": "好友今天的礼盒已经被全部打开了哦~", "5": "一天只可以打开3次礼盒哦~", "6": "该礼盒已经被开启", "7": "该礼盒已经被开启", } message = "系统繁忙,请稍后再试~" if res.sOutValue1 in code_to_message: message = code_to_message[res.sOutValue1] logger.error(message) time.sleep(1) # 第二次执行完毕提示修改send_to_xiaohao if not send_to_xiaohao: message_box("已领取完毕,请修改send_to_xiaohao为True,方便明天继续从头用", "提示")