SanYeCao-Nonebot/src/clover_sqlite/models/user.py
2025-02-06 16:00:21 +08:00

111 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import datetime, timedelta
import random
from tortoise import fields
from src.clover_sqlite.data_init.db_connect import Model
class UserList(Model):
user_id = fields.CharField(max_length=64, description="用户member_openid")
group_id = fields.CharField(max_length=64, description="用户所在群聊id")
last_used_time = fields.DateField(auto_now_add=True, description="用户最近一次使用时间")
class Meta:
table = "user_list"
table_description = "用户表"
@classmethod
async def get_user_id(cls, user_id: str | None, group_id: str | None, days: int = 3) -> str | None:
"""
获取指定天数内有活动的用户ID并随机选择一个作为伴侣ID。
:param user_id: 用户ID
:param group_id: 群组ID
:param days: 最近活动天数默认为3天
:return: 随机选择的伴侣ID如果没有符合条件的用户则返回None
"""
# 检查用户是否已有伴侣
has_wife = await Wife.has_wife(user_id=user_id, group_id=group_id)
if has_wife:
return has_wife
# 获取最近指定天数内有活动的用户
start_date = datetime.now().date() - timedelta(days=days)
end_date = datetime.now().date()
user_ids = await cls.filter(group_id=group_id, last_used_time__range=(start_date, end_date)) \
.exclude(user_id=user_id).values_list("user_id", flat=True)
if user_ids:
wife_id = random.choice(user_ids)
await Wife.save_wife(user_id=user_id, group_id=group_id, wife_id=wife_id)
return wife_id
else:
return None
@classmethod
async def insert_user(cls, user_id: str | None, group_id: str | None):
"""
插入用户数据
:param user_id:
:param group_id:
:return:
"""
user_table = await cls.filter(user_id=user_id, group_id=group_id).first()
if user_table:
user_table.last_used_time = datetime.now().date()
await user_table.save()
else:
await cls.create(user_id=user_id,group_id=group_id,last_used_time=datetime.now().date())
class Wife(Model):
"""
群今日老婆记录表(包含群老婆和二次元老婆)
"""
id = fields.IntField(primary_key=True, generated=True, auto_increment=True)
user_id = fields.CharField(max_length=64, description="用户id", null=True)
group_id = fields.CharField(max_length=64, description="群聊id", null=True)
wife_id = fields.CharField(max_length=64, description="对应群聊用户抽取到的id", null=True)
wife_name = fields.CharField(max_length=64, description="名称", null=True)
wife_description = fields.CharField(max_length=64, description="描述", null=True)
create_time = fields.DateField(auto_now_add=True, description="创建时间", null=True)
class Meta:
# 指定表名
table = "wife"
table_description = "群今日老婆记录表"
@classmethod
async def has_wife(cls, user_id: str | None, group_id: str | None) -> str | None:
"""
查询是否有今日群老婆
:param user_id:
:param group_id:
:return:
"""
wife = await cls.filter(user_id=user_id, group_id=group_id, create_time=datetime.now().date()).first()
if wife is None:
return None
else:
return wife.wife_id
@classmethod
async def save_wife(cls, user_id: str | None, group_id: str | None, wife_id: str | None):
"""
保存今日群老婆
:param user_id:
:param group_id:
:param wife_id:
:return:
"""
data = {
"user_id":user_id,
"group_id":group_id,
"wife_id":wife_id,
"create_time":datetime.now().date()
}
await cls.create(**data)