From 2921aed248026d00a7c51ea27f55be8b4142aa4b Mon Sep 17 00:00:00 2001 From: HibiKier <45528451+HibiKier@users.noreply.github.com> Date: Fri, 11 Jul 2025 10:07:23 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8Dsqlite=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E7=BB=9F=E8=AE=A1=E6=9F=A5=E8=AF=A2=E5=92=8C?= =?UTF-8?q?0=E6=9D=83=E9=99=90=E5=8A=9F=E8=83=BD=E8=B0=83=E7=94=A8=20(#194?= =?UTF-8?q?3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistics/_data_source.py | 12 ++++-------- zhenxun/models/chat_history.py | 3 ++- zhenxun/models/level_user.py | 12 ++++++------ zhenxun/utils/platform.py | 6 ++++-- zhenxun/utils/utils.py | 19 ++++++++++++++++++- 5 files changed, 34 insertions(+), 18 deletions(-) diff --git a/zhenxun/builtin_plugins/statistics/_data_source.py b/zhenxun/builtin_plugins/statistics/_data_source.py index d51cb685..2ceb4590 100644 --- a/zhenxun/builtin_plugins/statistics/_data_source.py +++ b/zhenxun/builtin_plugins/statistics/_data_source.py @@ -1,5 +1,3 @@ -from datetime import datetime, timedelta - from tortoise.functions import Count from zhenxun.models.group_console import GroupConsole @@ -10,6 +8,7 @@ from zhenxun.utils.echart_utils import ChartUtils from zhenxun.utils.echart_utils.models import Barh from zhenxun.utils.enum import PluginType from zhenxun.utils.image_utils import BuildImage +from zhenxun.utils.utils import TimeUtils class StatisticsManage: @@ -68,8 +67,7 @@ class StatisticsManage: if plugin_name: query = query.filter(plugin_name=plugin_name) if day: - time = datetime.now() - timedelta(days=day) - query = query.filter(create_time__gte=time) + query = query.filter(create_time__gte=TimeUtils.get_day_start()) data_list = ( await query.annotate(count=Count("id")) .group_by("plugin_name") @@ -89,8 +87,7 @@ class StatisticsManage: if group_id: query = query.filter(group_id=group_id) if day: - time = datetime.now() - timedelta(days=day) - query = query.filter(create_time__gte=time) + query = query.filter(create_time__gte=TimeUtils.get_day_start()) data_list = ( await query.annotate(count=Count("id")) .group_by("plugin_name") @@ -106,8 +103,7 @@ class StatisticsManage: async def get_group_statistics(cls, group_id: str, day: int | None, title: str): query = Statistics.filter(group_id=group_id) if day: - time = datetime.now() - timedelta(days=day) - query = query.filter(create_time__gte=time) + query = query.filter(create_time__gte=TimeUtils.get_day_start()) data_list = ( await query.annotate(count=Count("id")) .group_by("plugin_name") diff --git a/zhenxun/models/chat_history.py b/zhenxun/models/chat_history.py index 7284db1e..a9e0ca6c 100644 --- a/zhenxun/models/chat_history.py +++ b/zhenxun/models/chat_history.py @@ -49,7 +49,8 @@ class ChatHistory(Model): o = "-" if order == "DESC" else "" query = cls.filter(group_id=gid) if gid else cls if date_scope: - query = query.filter(create_time__range=date_scope) + filter_scope = (date_scope[0].isoformat(" "), date_scope[1].isoformat(" ")) + query = query.filter(create_time__range=filter_scope) return list( await query.annotate(count=Count("user_id")) .order_by(f"{o}count") diff --git a/zhenxun/models/level_user.py b/zhenxun/models/level_user.py index d60b52c2..4269f315 100644 --- a/zhenxun/models/level_user.py +++ b/zhenxun/models/level_user.py @@ -90,13 +90,14 @@ class LevelUser(Model): 返回: bool: 是否大于level """ + if level == 0: + return True if group_id: if user := await cls.get_or_none(user_id=user_id, group_id=group_id): return user.user_level >= level - else: - if user_list := await cls.filter(user_id=user_id).all(): - user = max(user_list, key=lambda x: x.user_level) - return user.user_level >= level + elif user_list := await cls.filter(user_id=user_id).all(): + user = max(user_list, key=lambda x: x.user_level) + return user.user_level >= level return False @classmethod @@ -119,8 +120,7 @@ class LevelUser(Model): return [ # 将user_id改为user_id "ALTER TABLE level_users RENAME COLUMN user_qq TO user_id;", - "ALTER TABLE level_users " - "ALTER COLUMN user_id TYPE character varying(255);", + "ALTER TABLE level_users ALTER COLUMN user_id TYPE character varying(255);", # 将user_id字段类型改为character varying(255) "ALTER TABLE level_users " "ALTER COLUMN group_id TYPE character varying(255);", diff --git a/zhenxun/utils/platform.py b/zhenxun/utils/platform.py index 790aa230..13bf4144 100644 --- a/zhenxun/utils/platform.py +++ b/zhenxun/utils/platform.py @@ -80,14 +80,14 @@ class PlatformUtils: @classmethod async def send_superuser( cls, - bot: Bot, + bot: Bot | None, message: UniMessage | str, superuser_id: str | None = None, ) -> list[tuple[str, Receipt]]: """发送消息给超级用户 参数: - bot: Bot + bot: Bot,没有传入时使用get_bot随机获取 message: 消息 superuser_id: 指定超级用户id. @@ -97,6 +97,8 @@ class PlatformUtils: 返回: Receipt | None: Receipt """ + if not bot: + bot = nonebot.get_bot() superuser_ids = [] if superuser_id: superuser_ids.append(superuser_id) diff --git a/zhenxun/utils/utils.py b/zhenxun/utils/utils.py index c8046813..bdd28f83 100644 --- a/zhenxun/utils/utils.py +++ b/zhenxun/utils/utils.py @@ -1,5 +1,5 @@ from collections import defaultdict -from datetime import datetime +from datetime import date, datetime import os from pathlib import Path import time @@ -244,3 +244,20 @@ def is_number(text: str) -> bool: return True except ValueError: return False + + +class TimeUtils: + @classmethod + def get_day_start(cls, target_date: date | datetime | None = None) -> datetime: + """获取某天的0点时间 + + 返回: + datetime: 今天某天的0点时间 + """ + if not target_date: + target_date = datetime.now() + return ( + target_date.replace(hour=0, minute=0, second=0, microsecond=0) + if isinstance(target_date, datetime) + else datetime.combine(target_date, datetime.min.time()) + )