Commit 9e2c7c52 authored by 陈俊羽's avatar 陈俊羽
Browse files

fix and log strang hits

parent 985e5882
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
/tmp/
/.idea/
src

KnightReport.spec

0 → 100644
+40 −0
Original line number Diff line number Diff line
# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(['..\\src\\main.py', '..\\src\\ctrl.py', '..\\src\\constants.py', '..\\src\\utils.py'],
             pathex=[],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='KnightReport',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )
+16 −1
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ def user_login():

class Ctrl:
    def __init__(self):
        self.max_retry = 20

        self.cookiesJar: Union[CookieJar, None] = None

        self.dates: Sequence[str] = list()
@@ -32,6 +34,8 @@ class Ctrl:
        self.combat: Union[Combat, None] = None
        self.all_uid: Set = set()



    def exec(self):
        r"""
        execute the whole generating stream
@@ -56,10 +60,13 @@ class Ctrl:
        r"""
        send network requests and get guild status
        """
        tried = 0
        while True:
            cj = browser_cookie3.edge(domain_name=".bigfun.cn")
            r = requests.get(constants.GuildStatusURL, cookies=cj, headers=constants.Headers)
            guild_status = json.loads(r.text)
            if tried > self.max_retry:
                raise TimeoutError("超时{:d}s,未获得有效cookies".format(self.max_retry * 15))
            if guild_status['code'] == 0:
                logging.info("成功读取公会数据")
                self.cookiesJar = cj
@@ -67,6 +74,7 @@ class Ctrl:
            elif guild_status['code'] == 401:
                logging.warning("cookies 未正确获取, 请完成登录,等待15秒重试...")
                sleep(15)
                tried += 1
                continue
            else:
                raise RuntimeError("未知的错误码 {:d}".format(guild_status['code']))
@@ -106,10 +114,17 @@ class Ctrl:
            if uid not in uid_today:
                uid_today.add(uid)
            else:
                logging.warning("重复玩家uid {:d}, 已去除".format(uid))
                logging.warning(f"重复玩家uid {uid}, 已去除")
                continue

            hits = person_attack['damage_num']
            # check abnormal hits today
            if hits > 3:
                logging.warning("玩家uid{:d}于日期{:s}对boss{:s}异常出刀数{:d}"
                                .format(uid, self.dates[index], boss_name,
                                        self.person_info[uid].boss_hits[boss_name]))
                logging.warning("记录当日战斗日志")
                logging.warning(f"{json.dumps(attack_status)}")
            damage = person_attack['damage_total']
            self.person_info[uid].hits += hits
            self.person_info[uid].damage += damage
+9 −3
Original line number Diff line number Diff line
import csv
import logging
from typing import Sequence, Dict, List


class Info:
    omit_mapping = {0: "", -1: "-1", -2: "-2", -3: "-3"}

    def __init__(self, uid: int, name: str, days: int):
        self.uid: int = uid
        self.name: str = name
@@ -15,6 +14,13 @@ class Info:
        # omit can be [-3, 0], -x equals omit x hit one day
        self.omission: List[int] = [0] * days

    @staticmethod
    def omit_mapping(x: int):
        if x == 0:
            return ""
        else:
            return str(x)

    def add_hit(self, boss_target: str, damage: int):
        if not self.boss_hits.__contains__(boss_target):
            self.boss_hits[boss_target] = 1
@@ -31,7 +37,7 @@ class Info:
            else:
                boss_status.extend([0, 0])

        date_status = [self.omit_mapping[omit] for omit in self.omission]
        date_status = [self.omit_mapping(omit) for omit in self.omission]

        status = [self.uid, self.name, self.hits, self.damage]
        status.extend(boss_status)