mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
🐛 修复sqlite下的日统计查询和0权限功能调用
This commit is contained in:
parent
8b9ae7255b
commit
8b1a2416f1
@ -1,5 +1,3 @@
|
|||||||
from datetime import datetime, timedelta
|
|
||||||
|
|
||||||
from tortoise.functions import Count
|
from tortoise.functions import Count
|
||||||
|
|
||||||
from zhenxun.models.group_console import GroupConsole
|
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.echart_utils.models import Barh
|
||||||
from zhenxun.utils.enum import PluginType
|
from zhenxun.utils.enum import PluginType
|
||||||
from zhenxun.utils.image_utils import BuildImage
|
from zhenxun.utils.image_utils import BuildImage
|
||||||
|
from zhenxun.utils.utils import TimeUtils
|
||||||
|
|
||||||
|
|
||||||
class StatisticsManage:
|
class StatisticsManage:
|
||||||
@ -68,8 +67,7 @@ class StatisticsManage:
|
|||||||
if plugin_name:
|
if plugin_name:
|
||||||
query = query.filter(plugin_name=plugin_name)
|
query = query.filter(plugin_name=plugin_name)
|
||||||
if day:
|
if day:
|
||||||
time = datetime.now() - timedelta(days=day)
|
query = query.filter(create_time__gte=TimeUtils.get_day_start())
|
||||||
query = query.filter(create_time__gte=time)
|
|
||||||
data_list = (
|
data_list = (
|
||||||
await query.annotate(count=Count("id"))
|
await query.annotate(count=Count("id"))
|
||||||
.group_by("plugin_name")
|
.group_by("plugin_name")
|
||||||
@ -89,8 +87,7 @@ class StatisticsManage:
|
|||||||
if group_id:
|
if group_id:
|
||||||
query = query.filter(group_id=group_id)
|
query = query.filter(group_id=group_id)
|
||||||
if day:
|
if day:
|
||||||
time = datetime.now() - timedelta(days=day)
|
query = query.filter(create_time__gte=TimeUtils.get_day_start())
|
||||||
query = query.filter(create_time__gte=time)
|
|
||||||
data_list = (
|
data_list = (
|
||||||
await query.annotate(count=Count("id"))
|
await query.annotate(count=Count("id"))
|
||||||
.group_by("plugin_name")
|
.group_by("plugin_name")
|
||||||
@ -106,8 +103,7 @@ class StatisticsManage:
|
|||||||
async def get_group_statistics(cls, group_id: str, day: int | None, title: str):
|
async def get_group_statistics(cls, group_id: str, day: int | None, title: str):
|
||||||
query = Statistics.filter(group_id=group_id)
|
query = Statistics.filter(group_id=group_id)
|
||||||
if day:
|
if day:
|
||||||
time = datetime.now() - timedelta(days=day)
|
query = query.filter(create_time__gte=TimeUtils.get_day_start())
|
||||||
query = query.filter(create_time__gte=time)
|
|
||||||
data_list = (
|
data_list = (
|
||||||
await query.annotate(count=Count("id"))
|
await query.annotate(count=Count("id"))
|
||||||
.group_by("plugin_name")
|
.group_by("plugin_name")
|
||||||
|
|||||||
@ -49,7 +49,8 @@ class ChatHistory(Model):
|
|||||||
o = "-" if order == "DESC" else ""
|
o = "-" if order == "DESC" else ""
|
||||||
query = cls.filter(group_id=gid) if gid else cls
|
query = cls.filter(group_id=gid) if gid else cls
|
||||||
if date_scope:
|
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(
|
return list(
|
||||||
await query.annotate(count=Count("user_id"))
|
await query.annotate(count=Count("user_id"))
|
||||||
.order_by(f"{o}count")
|
.order_by(f"{o}count")
|
||||||
|
|||||||
@ -90,13 +90,14 @@ class LevelUser(Model):
|
|||||||
返回:
|
返回:
|
||||||
bool: 是否大于level
|
bool: 是否大于level
|
||||||
"""
|
"""
|
||||||
|
if level == 0:
|
||||||
|
return True
|
||||||
if group_id:
|
if group_id:
|
||||||
if user := await cls.get_or_none(user_id=user_id, group_id=group_id):
|
if user := await cls.get_or_none(user_id=user_id, group_id=group_id):
|
||||||
return user.user_level >= level
|
return user.user_level >= level
|
||||||
else:
|
elif user_list := await cls.filter(user_id=user_id).all():
|
||||||
if user_list := await cls.filter(user_id=user_id).all():
|
user = max(user_list, key=lambda x: x.user_level)
|
||||||
user = max(user_list, key=lambda x: x.user_level)
|
return user.user_level >= level
|
||||||
return user.user_level >= level
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -119,8 +120,7 @@ class LevelUser(Model):
|
|||||||
return [
|
return [
|
||||||
# 将user_id改为user_id
|
# 将user_id改为user_id
|
||||||
"ALTER TABLE level_users RENAME COLUMN user_qq TO user_id;",
|
"ALTER TABLE level_users RENAME COLUMN user_qq TO user_id;",
|
||||||
"ALTER TABLE level_users "
|
"ALTER TABLE level_users ALTER COLUMN user_id TYPE character varying(255);",
|
||||||
"ALTER COLUMN user_id TYPE character varying(255);",
|
|
||||||
# 将user_id字段类型改为character varying(255)
|
# 将user_id字段类型改为character varying(255)
|
||||||
"ALTER TABLE level_users "
|
"ALTER TABLE level_users "
|
||||||
"ALTER COLUMN group_id TYPE character varying(255);",
|
"ALTER COLUMN group_id TYPE character varying(255);",
|
||||||
|
|||||||
@ -80,14 +80,14 @@ class PlatformUtils:
|
|||||||
@classmethod
|
@classmethod
|
||||||
async def send_superuser(
|
async def send_superuser(
|
||||||
cls,
|
cls,
|
||||||
bot: Bot,
|
bot: Bot | None,
|
||||||
message: UniMessage | str,
|
message: UniMessage | str,
|
||||||
superuser_id: str | None = None,
|
superuser_id: str | None = None,
|
||||||
) -> list[tuple[str, Receipt]]:
|
) -> list[tuple[str, Receipt]]:
|
||||||
"""发送消息给超级用户
|
"""发送消息给超级用户
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
bot: Bot
|
bot: Bot,没有传入时使用get_bot随机获取
|
||||||
message: 消息
|
message: 消息
|
||||||
superuser_id: 指定超级用户id.
|
superuser_id: 指定超级用户id.
|
||||||
|
|
||||||
@ -97,6 +97,8 @@ class PlatformUtils:
|
|||||||
返回:
|
返回:
|
||||||
Receipt | None: Receipt
|
Receipt | None: Receipt
|
||||||
"""
|
"""
|
||||||
|
if not bot:
|
||||||
|
bot = nonebot.get_bot()
|
||||||
superuser_ids = []
|
superuser_ids = []
|
||||||
if superuser_id:
|
if superuser_id:
|
||||||
superuser_ids.append(superuser_id)
|
superuser_ids.append(superuser_id)
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from datetime import datetime
|
from datetime import date, datetime
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import time
|
import time
|
||||||
@ -244,3 +244,20 @@ def is_number(text: str) -> bool:
|
|||||||
return True
|
return True
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return False
|
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())
|
||||||
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user