From 0e51d50a0581832e3e99f48beaca009badc3e0dc Mon Sep 17 00:00:00 2001 From: xtaodada Date: Sat, 6 Jul 2024 13:35:04 +0800 Subject: [PATCH] :sparkles: Support zzz action log --- core/dependence/influxdb.py | 3 + core/services/self_help/__init__.py | 0 core/services/self_help/models.py | 31 +++++ core/services/self_help/repositories.py | 56 ++++++++ core/services/self_help/services.py | 37 +++++ modules/action_log/__init__.py | 1 + modules/action_log/client.py | 150 ++++++++++++++++++++ modules/action_log/date.py | 36 +++++ modules/action_log/models.py | 21 +++ pdm.lock | 2 +- plugins/jobs/import_action_log.py | 29 ++++ plugins/tools/action_log_system.py | 80 +++++++++++ plugins/zzz/action_log.py | 155 +++++++++++++++++++++ requirements.txt | 2 +- resources/img/logo.png | Bin 76670 -> 11220 bytes resources/zzz/action_log/action_log.css | 134 ++++++++++++++++++ resources/zzz/action_log/action_log.html | 133 ++++++++++++++++++ resources/zzz/gacha_count/gacha_count.html | 2 +- resources/zzz/gacha_log/gacha_log.html | 2 +- 19 files changed, 870 insertions(+), 4 deletions(-) create mode 100644 core/dependence/influxdb.py create mode 100644 core/services/self_help/__init__.py create mode 100644 core/services/self_help/models.py create mode 100644 core/services/self_help/repositories.py create mode 100644 core/services/self_help/services.py create mode 100644 modules/action_log/__init__.py create mode 100644 modules/action_log/client.py create mode 100644 modules/action_log/date.py create mode 100644 modules/action_log/models.py create mode 100644 plugins/jobs/import_action_log.py create mode 100644 plugins/tools/action_log_system.py create mode 100644 plugins/zzz/action_log.py create mode 100644 resources/zzz/action_log/action_log.css create mode 100644 resources/zzz/action_log/action_log.html diff --git a/core/dependence/influxdb.py b/core/dependence/influxdb.py new file mode 100644 index 0000000..b4e286a --- /dev/null +++ b/core/dependence/influxdb.py @@ -0,0 +1,3 @@ +from gram_core.dependence.influxdb import InfluxDatabase + +__all__ = ("InfluxDatabase",) diff --git a/core/services/self_help/__init__.py b/core/services/self_help/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/core/services/self_help/models.py b/core/services/self_help/models.py new file mode 100644 index 0000000..704ff81 --- /dev/null +++ b/core/services/self_help/models.py @@ -0,0 +1,31 @@ +from datetime import timedelta + +from influxdb_client import Point +from influxdb_client.client.flux_table import FluxRecord +from simnet.models.zzz.self_help import ZZZSelfHelpActionLog + +from modules.action_log.date import TZ + +FIX = timedelta(minutes=6) + + +class ActionLogModel: + @staticmethod + def en(data: "ZZZSelfHelpActionLog") -> Point: + return ( + Point.measurement("action_log") + .tag("uid", data.uid) + .field("id", data.id) + .field("status", data.status) + .field("reason", data.reason.value) + .field("client_ip", data.client_ip) + .time(data.time.replace(tzinfo=TZ) + FIX) + ) + + @staticmethod + def de(data: "FluxRecord") -> "ZZZSelfHelpActionLog": + utc_time = data.get_time() + time = utc_time.astimezone(TZ) + return ZZZSelfHelpActionLog( + id=data["id"], uid=data["uid"], datetime=time, action_name=data["reason"], client_ip=data["client_ip"] + ) diff --git a/core/services/self_help/repositories.py b/core/services/self_help/repositories.py new file mode 100644 index 0000000..b848527 --- /dev/null +++ b/core/services/self_help/repositories.py @@ -0,0 +1,56 @@ +from typing import TYPE_CHECKING, List + +from gram_core.base_service import BaseService +from gram_core.dependence.influxdb import InfluxDatabase + +if TYPE_CHECKING: + from influxdb_client.client.flux_table import FluxTable + from influxdb_client.client.influxdb_client_async import InfluxDBClientAsync + from influxdb_client import Point + + +class ActionLogRepository(BaseService.Component): + + def __init__(self, influxdb: InfluxDatabase): + self.influxdb = influxdb + self.client = influxdb.client + self.bucket = "zzz" + + async def add(self, p: List["Point"]) -> bool: + async with self.client() as client: + client: "InfluxDBClientAsync" + return await client.write_api().write(self.bucket, record=p) + + async def count_uptime_period(self, uid: int) -> "FluxTable": + async with self.client() as client: + client: "InfluxDBClientAsync" + query = ( + 'import "date"' + 'import "timezone"' + 'option location = timezone.location(name: "Asia/Shanghai")' + 'from(bucket: "{}")' + "|> range(start: -180d)" + '|> filter(fn: (r) => r["_measurement"] == "action_log")' + '|> filter(fn: (r) => r["_field"] == "status")' + '|> filter(fn: (r) => r["_value"] == 1)' + '|> filter(fn: (r) => r["uid"] == "{}")' + "|> aggregateWindow(every: 1h, fn: count)" + ).format(self.bucket, uid) + query += '|> map(fn: (r) => ({r with hour: date.hour(t: r._time)}))|> yield(name: "hourly_count")' + tables = await client.query_api().query(query) + for table in tables: + return table + + async def get_data(self, uid: int, day: int = 30) -> "FluxTable": + async with self.client() as client: + client: "InfluxDBClientAsync" + query = ( + 'from(bucket: "{}")' + "|> range(start: -{}d)" + '|> filter(fn: (r) => r["_measurement"] == "action_log")' + '|> filter(fn: (r) => r["uid"] == "{}")' + '|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")' + ).format(self.bucket, day, uid) + tables = await client.query_api().query(query) + for table in tables: + return table diff --git a/core/services/self_help/services.py b/core/services/self_help/services.py new file mode 100644 index 0000000..d0d63cd --- /dev/null +++ b/core/services/self_help/services.py @@ -0,0 +1,37 @@ +from typing import List, TYPE_CHECKING, Dict + +from core.services.self_help.models import ActionLogModel +from core.services.self_help.repositories import ActionLogRepository +from gram_core.base_service import BaseService + +if TYPE_CHECKING: + from simnet.models.zzz.self_help import ZZZSelfHelpActionLog + + +class ActionLogService(BaseService): + def __init__(self, repository: ActionLogRepository): + self.repository = repository + + async def add(self, p: List["ZZZSelfHelpActionLog"]) -> bool: + return await self.repository.add([ActionLogModel.en(data) for data in p]) + + async def count_uptime_period(self, uid: int) -> Dict[int, int]: + """计算最近一个月不同时间点的登录次数""" + data = {k: 0 for k in range(24)} + r = await self.repository.count_uptime_period(uid) + if not r: + return data + for record in r.records: + if record.get_value(): + data[record["hour"]] += 1 + return data + + async def get_data(self, uid: int, day: int = 30) -> List["ZZZSelfHelpActionLog"]: + """获取指定天数内的某用户的登录记录""" + data = [] + r = await self.repository.get_data(uid, day) + if not r: + return data + for record in r.records: + data.append(ActionLogModel.de(record)) + return data diff --git a/modules/action_log/__init__.py b/modules/action_log/__init__.py new file mode 100644 index 0000000..de052e6 --- /dev/null +++ b/modules/action_log/__init__.py @@ -0,0 +1 @@ +"""登录日志分析""" diff --git a/modules/action_log/client.py b/modules/action_log/client.py new file mode 100644 index 0000000..e2b2524 --- /dev/null +++ b/modules/action_log/client.py @@ -0,0 +1,150 @@ +from typing import List, Dict, Union + +from simnet.models.zzz.self_help import ZZZSelfHelpActionLog + +from modules.action_log.date import DateUtils +from modules.action_log.models import ActionLogPair + + +class ActionLogAnalyse(DateUtils): + def __init__(self, data: List[ZZZSelfHelpActionLog], data2: Dict[int, int]): + super().__init__() + self.data = data + self.data2 = data2 + self.pairs = self.init_pair(data) + self.this_week_data: List[ActionLogPair] = [] + self.last_week_data: List[ActionLogPair] = [] + self.this_month_data: List[ActionLogPair] = [] + self.last_month_data: List[ActionLogPair] = [] + self.init_pair_data() + + def init_pair_data(self): + """通过时间点判断数据属于哪个时间段""" + for d in self.pairs: + if self.week_start <= d.start_time < self.week_end: + self.this_week_data.append(d) + elif self.week_last_start <= d.start_time < self.week_last_end: + self.last_week_data.append(d) + if self.month_start <= d.start_time < self.month_end: + self.this_month_data.append(d) + elif self.month_last_start <= d.start_time < self.month_last_end: + self.last_month_data.append(d) + + @staticmethod + def init_pair(data: List[ZZZSelfHelpActionLog]) -> List[ActionLogPair]: + # 确保第一个数据为登入,最后一条数据为登出 + if data[0].status == 0: + data.pop(0) + if data[-1].status == 1: + data.pop(-1) + pairs = [] + for i in range(0, len(data), 2): + pairs.append(ActionLogPair(start=data[i], end=data[i + 1])) + return pairs + + def get_this_week_duration(self) -> int: + """本周时长""" + return (sum(d.duration.seconds for d in self.this_week_data)) if self.this_week_data else 0 + + def get_last_week_duration(self) -> int: + """上周时长""" + return (sum(d.duration.seconds for d in self.last_week_data)) if self.last_week_data else 0 + + def get_this_month_duration(self) -> int: + """本月时长""" + return (sum(d.duration.seconds for d in self.this_month_data)) if self.this_month_data else 0 + + def get_last_month_duration(self) -> int: + """上月时长""" + return (sum(d.duration.seconds for d in self.last_month_data)) if self.last_month_data else 0 + + def get_this_month_avg_duration(self) -> float: + """本月平均时长""" + data_len = len(self.this_month_data) + return (self.get_this_month_duration() / data_len) if data_len else 0 + + def get_last_month_avg_duration(self) -> float: + """上月平均时长""" + data_len = len(self.last_month_data) + return (self.get_last_month_duration() / data_len) if data_len else 0 + + def get_this_week_long_duration(self) -> int: + """周最长会话""" + return (max(d.duration.seconds for d in self.this_week_data)) if self.this_week_data else 0 + + def get_this_week_short_duration(self) -> int: + """周最短会话""" + return (min(d.duration.seconds for d in self.this_week_data)) if self.this_week_data else 0 + + def get_this_month_long_duration(self) -> int: + """月最长会话""" + return (max(d.duration.seconds for d in self.this_month_data)) if self.this_month_data else 0 + + def get_this_month_short_duration(self) -> int: + """月最短会话""" + return (min(d.duration.seconds for d in self.this_month_data)) if self.this_month_data else 0 + + @staticmethod + def format_sec(sec: Union[int, float]) -> str: + hour = sec // 3600 + minute = (sec % 3600) // 60 + second = sec % 60 + if hour: + return f"{int(hour)}时{int(minute)}分" + if minute: + return f"{int(minute)}分{int(second)}秒" + return f"{int(second)}秒" + + def get_data(self) -> List[Dict[str, str]]: + data = { + "本周时长": self.get_this_week_duration(), + "上周时长": self.get_last_week_duration(), + "本月时长": self.get_this_month_duration(), + "上月时长": self.get_last_month_duration(), + "本月平均": self.get_this_month_avg_duration(), + "上月平均": self.get_last_month_avg_duration(), + "周最长会话": self.get_this_week_long_duration(), + "月最长会话": self.get_this_month_long_duration(), + "周最短会话": self.get_this_week_short_duration(), + "月最短会话": self.get_this_month_short_duration(), + } + datas = [] + for k, v in data.items(): + datas.append( + { + "name": k, + "value": self.format_sec(v), + } + ) + + max_hour = max(self.data2, key=self.data2.get) + min_hour = min(self.data2, key=self.data2.get) + datas.append({"name": "最常上线", "value": f"{max_hour}点"}) + datas.append({"name": "最少上线", "value": f"{min_hour}点"}) + + return datas + + def get_line_data(self) -> List[Dict[str, str]]: + data = [] + for k, v in self.data2.items(): + data.append( + { + "month": f"{k}点", + "value": v, + } + ) + return data + + def get_record_data(self) -> List[Dict[str, str]]: + data = [] + limit = 4 + data_len = len(self.data) - 1 + for i in range(data_len, data_len - limit, -1): + record = self.data[i] + data.append( + { + "time": record.time.strftime("%Y年%m月%d日 %H:%M:%S"), + "reason": record.reason.value, + } + ) + return data diff --git a/modules/action_log/date.py b/modules/action_log/date.py new file mode 100644 index 0000000..2697e11 --- /dev/null +++ b/modules/action_log/date.py @@ -0,0 +1,36 @@ +from datetime import datetime, timedelta + +from pytz import timezone + +TZ = timezone("Asia/Shanghai") + + +class DateUtils: + def __init__(self): + self.now = datetime.now(tz=TZ) + # 本周 + self.week_start = self.date_start(self.now - timedelta(days=self.now.weekday())) + self.week_end = self.week_start + timedelta(days=7) + # 上周 + self.week_last_start = self.week_start - timedelta(days=7) + self.week_last_end = self.week_start + # 本月 + self.month_start = self.date_start(self.now.replace(day=1)) + self.month_end = self.get_month_end(self.month_start) + # 上月 + month_last = (self.month_start - timedelta(days=1)).replace(day=1) + self.month_last_start = self.date_start(month_last) + self.month_last_end = self.get_month_end(month_last) + + @staticmethod + def date_start(date: datetime) -> datetime: + return date.replace(hour=4, minute=0, second=0, microsecond=0) + + def get_week_start(self) -> datetime: + day = self.now - timedelta(days=self.now.weekday()) + return self.date_start(day) + + def get_month_end(self, date: datetime) -> datetime: + next_month = date.replace(day=28) + timedelta(days=5) + next_month_start = next_month.replace(day=1) + return self.date_start(next_month_start) diff --git a/modules/action_log/models.py b/modules/action_log/models.py new file mode 100644 index 0000000..23679bd --- /dev/null +++ b/modules/action_log/models.py @@ -0,0 +1,21 @@ +from datetime import datetime, timedelta + +from pydantic import BaseModel +from simnet.models.zzz.self_help import ZZZSelfHelpActionLog + + +class ActionLogPair(BaseModel): + start: ZZZSelfHelpActionLog + end: ZZZSelfHelpActionLog + + @property + def start_time(self) -> datetime: + return self.start.time + + @property + def end_time(self) -> datetime: + return self.end.time + + @property + def duration(self) -> timedelta: + return self.end.time - self.start.time diff --git a/pdm.lock b/pdm.lock index d74d17d..556e95d 100644 --- a/pdm.lock +++ b/pdm.lock @@ -2212,7 +2212,7 @@ name = "simnet" version = "0.1.22" requires_python = "<4.0,>=3.8" git = "https://github.com/PaiGramTeam/SIMNet" -revision = "185733af85cabb57bf7e64bf6c46a35c515fef2e" +revision = "9839a06bb87403443ac2cbea0ffde4156b05d902" summary = "Modern API wrapper for Genshin Impact & Honkai: Star Rail built on asyncio and pydantic." groups = ["default"] dependencies = [ diff --git a/plugins/jobs/import_action_log.py b/plugins/jobs/import_action_log.py new file mode 100644 index 0000000..5d6c260 --- /dev/null +++ b/plugins/jobs/import_action_log.py @@ -0,0 +1,29 @@ +import datetime + +from typing import TYPE_CHECKING + +from gram_core.plugin import Plugin, job, handler +from plugins.tools.action_log_system import ActionLogSystem +from utils.log import logger + +if TYPE_CHECKING: + from telegram import Update + from telegram.ext import ContextTypes + + +class ImportActionLogJob(Plugin): + def __init__(self, action_log_system: ActionLogSystem = None): + self.action_log_system = action_log_system + + @job.run_daily(time=datetime.time(hour=12, minute=1, second=0), name="ImportActionLogJob") + async def refresh(self, _: "ContextTypes.DEFAULT_TYPE"): + await self.action_log_system.daily_import_login(_) + + @handler.command(command="action_log_import_all", block=False, admin=True) + async def action_log_import_all(self, update: "Update", context: "ContextTypes.DEFAULT_TYPE"): + user = update.effective_user + logger.info("用户 %s[%s] action_log_import_all 命令请求", user.full_name, user.id) + message = update.effective_message + reply = await message.reply_text("正在执行导入登录记录任务,请稍后...") + await self.refresh(context) + await reply.edit_text("全部账号导入登录记录任务完成") diff --git a/plugins/tools/action_log_system.py b/plugins/tools/action_log_system.py new file mode 100644 index 0000000..b704a47 --- /dev/null +++ b/plugins/tools/action_log_system.py @@ -0,0 +1,80 @@ +from asyncio import sleep + +from typing import TYPE_CHECKING + +from simnet.errors import ( + TimedOut as SimnetTimedOut, + BadRequest as SimnetBadRequest, + InvalidCookies, +) + +from core.services.self_help.services import ActionLogService +from gram_core.basemodel import RegionEnum +from gram_core.plugin import Plugin +from gram_core.services.cookies import CookiesService +from gram_core.services.cookies.models import CookiesStatusEnum +from plugins.tools.genshin import GenshinHelper, PlayerNotFoundError, CookiesNotFoundError +from utils.log import logger + +if TYPE_CHECKING: + from telegram.ext import ContextTypes + + from simnet import ZZZClient + + +class ActionLogSystem(Plugin): + """登录记录系统""" + + def __init__( + self, + cookies: CookiesService, + helper: GenshinHelper, + action_log_service: ActionLogService, + ): + self.cookies = cookies + self.helper = helper + self.action_log_service = action_log_service + + async def import_action_log(self, client: "ZZZClient", authkey: str) -> bool: + data = await client.get_zzz_action_log(authkey=authkey) + # 确保第一个数据为登出、最后一条数据为登入 + if not data: + return False + if data[0].status == 1: + data.pop(0) + if data[-1].status == 0: + data.pop(-1) + return await self.action_log_service.add(data) + + async def daily_import_login(self, _: "ContextTypes.DEFAULT_TYPE"): + logger.info("正在执行每日刷新登录记录任务") + for cookie_model in await self.cookies.get_all( + region=RegionEnum.HYPERION, status=CookiesStatusEnum.STATUS_SUCCESS + ): + user_id = cookie_model.user_id + cookies = cookie_model.data + if cookies.get("stoken") is None: + continue + try: + async with self.helper.genshin(user_id, region=RegionEnum.HYPERION) as client: + client: "StarRailClient" + try: + authkey = await client.get_authkey_by_stoken("csc") + except ValueError: + logger.warning("用户 user_id[%s] 请求登录记录失败 无 stoken", user_id) + continue + await self.import_action_log(client, authkey) + except (InvalidCookies, PlayerNotFoundError, CookiesNotFoundError): + continue + except SimnetBadRequest as exc: + logger.warning( + "用户 user_id[%s] 请求登录记录失败 [%s]%s", user_id, exc.ret_code, exc.original or exc.message + ) + continue + except SimnetTimedOut: + logger.info("用户 user_id[%s] 请求登录记录超时", user_id) + continue + except Exception as exc: + logger.error("执行自动刷新登录记录时发生错误 user_id[%s]", user_id, exc_info=exc) + continue + await sleep(1) diff --git a/plugins/zzz/action_log.py b/plugins/zzz/action_log.py new file mode 100644 index 0000000..4a1e68e --- /dev/null +++ b/plugins/zzz/action_log.py @@ -0,0 +1,155 @@ +from typing import TYPE_CHECKING, Dict, List, Optional + +from telegram.constants import ChatAction +from telegram.ext import filters + +from simnet import Region + +from core.services.self_help.services import ActionLogService +from gram_core.config import config +from gram_core.plugin import Plugin, handler +from gram_core.plugin.methods.inline_use_data import IInlineUseData +from gram_core.services.template.services import TemplateService +from modules.action_log.client import ActionLogAnalyse +from plugins.tools.action_log_system import ActionLogSystem +from plugins.tools.genshin import GenshinHelper +from utils.const import RESOURCE_DIR +from utils.log import logger +from utils.uid import mask_number + +if TYPE_CHECKING: + from telegram import Update + from telegram.ext import ContextTypes + + from simnet import ZZZClient + + from gram_core.services.template.models import RenderResult + + +class NotSupport(Exception): + """不支持的服务器""" + + def __init__(self, msg: str = None): + self.msg = msg + + +class ActionLogPlugins(Plugin): + """登录记录信息查询""" + + def __init__( + self, + helper: GenshinHelper, + action_log_service: ActionLogService, + action_log_system: ActionLogSystem, + template_service: TemplateService, + ): + self.helper = helper + self.action_log_service = action_log_service + self.action_log_system = action_log_system + self.template_service = template_service + + @handler.command(command="action_log_import", filters=filters.ChatType.PRIVATE, cookie=True, block=False) + async def action_log_import(self, update: "Update", _: "ContextTypes.DEFAULT_TYPE") -> None: + user_id = await self.get_real_user_id(update) + message = update.effective_message + uid, offset = self.get_real_uid_or_offset(update) + self.log_user(update, logger.info, "导入登录记录") + await message.reply_chat_action(ChatAction.TYPING) + + try: + async with self.helper.genshin(user_id, player_id=uid, offset=offset) as client: + client: "ZZZClient" + if client.region != Region.CHINESE: + raise NotSupport("不支持的服务器") + try: + authkey = await client.get_authkey_by_stoken("csc") + except ValueError as e: + raise NotSupport("未绑定 stoken") from e + + notice = await message.reply_text(f"{config.notice.bot_name}需要收集整理数据,还请耐心等待哦~") + + bo = await self.action_log_system.import_action_log(client, authkey) + text = "导入登录记录成功" if bo else "导入登录记录失败,可能没有新记录" + await notice.edit_text(text) + self.log_user(update, logger.success, text) + except NotSupport as e: + msg = await message.reply_text(e.msg) + if filters.ChatType.GROUPS.filter(message): + self.add_delete_message_job(message, delay=60) + self.add_delete_message_job(msg, delay=60) + + async def get_render_data(self, uid: int): + r = await self.action_log_service.get_data(uid, 63) + r2 = await self.action_log_service.count_uptime_period(uid) + if not r or not r2: + raise NotSupport("未查询到登录记录") + d = ActionLogAnalyse(r, r2) + data = d.get_data() + line_data = d.get_line_data() + records = d.get_record_data() + return { + "uid": mask_number(uid), + "datas": data, + "line_data": line_data, + "records": records, + } + + async def add_theme_data(self, data: Dict, player_id: int): + res = RESOURCE_DIR / "img" + data["avatar"] = (res / "avatar.png").as_uri() + data["background"] = (res / "home.png").as_uri() + return data + + async def render(self, client: "ZZZClient") -> "RenderResult": + data = await self.get_render_data(client.player_id) + return await self.template_service.render( + "zzz/action_log/action_log.html", + await self.add_theme_data(data, client.player_id), + full_page=True, + query_selector=".container", + ) + + @handler.command(command="action_log", cookie=True, block=False) + async def action_log(self, update: "Update", _: "ContextTypes.DEFAULT_TYPE") -> None: + user_id = await self.get_real_user_id(update) + message = update.effective_message + uid, offset = self.get_real_uid_or_offset(update) + self.log_user(update, logger.info, "查询登录记录") + + try: + async with self.helper.genshin(user_id, player_id=uid, offset=offset) as client: + client: "ZZZClient" + render = await self.render(client) + await render.reply_photo(message) + except NotSupport as e: + msg = await message.reply_text(e.msg) + if filters.ChatType.GROUPS.filter(message): + self.add_delete_message_job(message, delay=60) + self.add_delete_message_job(msg, delay=60) + + async def action_log_use_by_inline(self, update: "Update", context: "ContextTypes.DEFAULT_TYPE") -> None: + callback_query = update.callback_query + user = update.effective_user + user_id = user.id + uid = IInlineUseData.get_uid_from_context(context) + self.log_user(update, logger.info, "查询登录记录") + + try: + async with self.helper.genshin(user_id, player_id=uid) as client: + client: "ZZZClient" + render = await self.render(client) + except NotSupport as e: + await callback_query.answer(e.msg, show_alert=True) + return + await render.edit_inline_media(callback_query) + + async def get_inline_use_data(self) -> List[Optional[IInlineUseData]]: + return [ + IInlineUseData( + text="登录统计", + hash="action_log", + callback=self.action_log_use_by_inline, + cookie=True, + player=True, + ) + ] diff --git a/requirements.txt b/requirements.txt index 87c29b1..dafd982 100644 --- a/requirements.txt +++ b/requirements.txt @@ -88,7 +88,7 @@ rich==13.7.1 sentry-sdk==2.7.1 setuptools==70.2.0 shellingham==1.5.4 -simnet @ git+https://github.com/PaiGramTeam/SIMNet@185733af85cabb57bf7e64bf6c46a35c515fef2e +simnet @ git+https://github.com/PaiGramTeam/SIMNet@9839a06bb87403443ac2cbea0ffde4156b05d902 six==1.16.0 smmap==5.0.1 sniffio==1.3.1 diff --git a/resources/img/logo.png b/resources/img/logo.png index 3e0bce0a43cd9e97ec8589df599282c5467065ec..80fd301b01418584193efd9e0f28cdca041caa3c 100644 GIT binary patch literal 11220 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 SONklN#eyoR$``#h3H%>Mv63+W literal 76670 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 lMx + + + + + + + + + + + +

+
+ Avatar +
+
ID: {{ uid }}
+

登录统计

+
+ +
+
+
数据总览
+
+ {% for data in datas[:4] %} +
+
{{ data.value }}
+
{{ data.name }}
+
+ {% endfor %} +
+
+ {% for data in datas[4:8] %} +
+
{{ data.value }}
+
{{ data.name }}
+
+ {% endfor %} +
+
+ {% for data in datas[8:] %} +
+
{{ data.value }}
+
{{ data.name }}
+
+ {% endfor %} +
+
+
+
登录时间点统计
+
+
+
+
最近日志
+ {% for record in records %} +
+
+
{{ record.time }}
+
+
+
{{ record.reason }}
+
+
+ {% endfor %} +
+ +
+ + + + + + + diff --git a/resources/zzz/gacha_count/gacha_count.html b/resources/zzz/gacha_count/gacha_count.html index 0e045af..97673c4 100644 --- a/resources/zzz/gacha_count/gacha_count.html +++ b/resources/zzz/gacha_count/gacha_count.html @@ -52,7 +52,7 @@ {% if hasMore %}
*完整数据请私聊查看
{% endif %} - + diff --git a/resources/zzz/gacha_log/gacha_log.html b/resources/zzz/gacha_log/gacha_log.html index 0cc4c39..6e57d99 100644 --- a/resources/zzz/gacha_log/gacha_log.html +++ b/resources/zzz/gacha_log/gacha_log.html @@ -76,7 +76,7 @@ {% endfor %} - +