Beispiel #1
0
def update_retry_data(retry_key: str,
                      success_timeout: int,
                      recommended_retry_wait_time_change_rate=0.125,
                      debug_ctx=""):
    from dao import RetryData

    # 重新读取数据,避免其他进程已经更新过数据
    db = load_db()
    raw_login_retry_data = db.get(retry_key, {})
    login_retry_data = RetryData().auto_update_config(raw_login_retry_data)

    # 第idx-1次的重试成功了,尝试更新历史数据
    cr = recommended_retry_wait_time_change_rate
    login_retry_data.recommended_first_retry_timeout = (
        1 - cr
    ) * login_retry_data.recommended_first_retry_timeout + cr * success_timeout
    login_retry_data.history_success_timeouts.append(success_timeout)

    db[retry_key] = to_raw_type(login_retry_data)
    save_db(db)

    if use_by_myself():
        logger.info(
            color("bold_cyan") +
            f"(仅我可见){debug_ctx} 本次重试等待时间为{success_timeout},当前历史重试数据为{login_retry_data}"
        )
Beispiel #2
0
    def save(self):
        # 本地存盘
        with open(self.save_path, 'w', encoding='utf-8') as save_file:
            json.dump(to_raw_type(self.notices), save_file, ensure_ascii=False, indent=2)
            logger.info("公告存盘完毕")

        # 上传到网盘
        uploader = Uploader()
        with open("upload_cookie.json") as fp:
            cookie = json.load(fp)
        uploader.login(cookie)
        uploader.upload_to_lanzouyun(self.save_path, uploader.folder_online_files, also_upload_compressed_version=True)
Beispiel #3
0
def save_config(cfg: Config, config_path="config.toml"):
    with open(config_path, 'w', encoding='utf-8') as save_file:
        data_to_save = json.loads(json.dumps(to_raw_type(cfg)))
        toml.dump(data_to_save, save_file)
Beispiel #4
0
def show_config_size(cfg: Config, ctx):
    data_to_save = json.loads(json.dumps(to_raw_type(cfg)))
    toml_str = toml.dumps(data_to_save)
    total_size = len(toml_str)
    total_lines = toml_str.count('\n')
    logger.info(f"{ctx} 生成配置文件大小为{total_size},总行数为{total_lines}")
Beispiel #5
0
 def clone(self) -> RoleInfo:
     return RoleInfo().auto_update_config(to_raw_type(self))
Beispiel #6
0
def update_buy_user_local(order_infos: List[OrderInfo]):
    buy_users = {}  # type: Dict[str, BuyInfo]
    if os.path.exists(local_save_path):
        with open(local_save_path, 'r', encoding='utf-8') as data_file:
            raw_infos = json.load(data_file)
            for qq, raw_info in raw_infos.items():
                info = BuyInfo().auto_update_config(raw_info)
                buy_users[qq] = info

    datetime_fmt = "%Y-%m-%d %H:%M:%S"
    now = datetime.now()
    now_str = now.strftime(datetime_fmt)

    for order_info in order_infos:
        delta = timedelta(hours=24)
        if has_buy_recently(order_info.qq, delta):
            logger.error(f"{order_info.qq}在{delta}内已经处理过,是否是重复运行了?")
            continue

        if order_info.qq in buy_users:
            user_info = buy_users[order_info.qq]
        else:
            user_info = BuyInfo()
            user_info.qq = order_info.qq
            buy_users[order_info.qq] = user_info

        # 更新时长
        expired_at = datetime.strptime(user_info.expire_at, datetime_fmt)
        if now > expired_at:
            # 已过期,从当前时间开始重新计算
            start_time = now
        else:
            # 续期,从之前结束时间叠加
            start_time = expired_at
        updated_expired_at = start_time + order_info.buy_month * month_inc
        user_info.expire_at = updated_expired_at.strftime(datetime_fmt)

        user_info.total_buy_month += order_info.buy_month
        user_info.buy_records.append(BuyRecord().auto_update_config({
            "buy_month": order_info.buy_month,
            "buy_at": now_str,
            "reason": "购买",
        }))

        # 更新游戏QQ
        for game_qq in order_info.game_qqs:
            if game_qq not in user_info.game_qqs:
                user_info.game_qqs.append(game_qq)

        msg = f"{user_info.qq} 购买 {order_info.buy_month} 个月成功,过期时间为{user_info.expire_at},购买前过期时间为{expired_at}。累计购买{user_info.total_buy_month}个月。"
        msg += "购买详情如下:\n" + '\n'.join('\t' + f'{record.buy_at} {record.reason} {record.buy_month} 月' for record in user_info.buy_records)
        logger.info(msg)

        save_buy_timestamp(order_info.qq)

    with open(local_save_path, 'w', encoding='utf-8') as save_file:
        json.dump(to_raw_type(buy_users), save_file, indent=2, ensure_ascii=False)

    total_month = 0
    for qq, user_info in buy_users.items():
        if qq == "1054073896":
            # 跳过自己<_<,不然数据被污染了
            continue
        total_month += user_info.total_buy_month
    total_money = 5 * total_month
    logger.info(color("bold_green") + f"目前总购买人数为{len(buy_users)},累计购买月数为{total_month},累积金额约为{total_money}")
Beispiel #7
0
def show_config_size(cfg: Config, ctx):
    data_to_save = json.loads(json.dumps(to_raw_type(cfg)))
    toml_str = toml.dumps(data_to_save)

    show_file_content_info(ctx, toml_str)