diff --git a/models/bag_user.py b/models/bag_user.py index fb6171b1..3590d33f 100755 --- a/models/bag_user.py +++ b/models/bag_user.py @@ -11,9 +11,9 @@ class BagUser(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_qq = fields.BigIntField() + user_id = fields.CharField(255) """用户id""" - group_id = fields.BigIntField() + group_id = fields.CharField(255) """群聊id""" gold = fields.IntField(default=100) """金币数量""" @@ -31,18 +31,18 @@ class BagUser(Model): class Meta: table = "bag_users" table_description = "用户道具数据表" - unique_together = ("user_qq", "group_id") + unique_together = ("user_id", "group_id") @classmethod - async def get_user_total_gold(cls, user_qq: int, group_id: int) -> str: + async def get_user_total_gold(cls, user_id: str | int, group_id: str | int) -> str: """ 说明: 获取金币概况 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) return ( f"当前金币:{user.gold}\n今日获取金币:{user.get_today_gold}\n今日花费金币:{user.spend_today_gold}" f"\n今日收益:{user.get_today_gold - user.spend_today_gold}" @@ -50,30 +50,30 @@ class BagUser(Model): ) @classmethod - async def get_gold(cls, user_qq: int, group_id: int) -> int: + async def get_gold(cls, user_id: str | int, group_id: str | int) -> int: """ 说明: 获取当前金币 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) return user.gold @classmethod async def get_property( - cls, user_qq: int, group_id: int, only_active: bool = False + cls, user_id: str | int, group_id: str | int, only_active: bool = False ) -> Dict[str, int]: """ 说明: 获取当前道具 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id :param only_active: 仅仅获取主动使用的道具 """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) if only_active and user.property: data = {} name_list = [ @@ -87,49 +87,49 @@ class BagUser(Model): return user.property @classmethod - async def add_gold(cls, user_qq: int, group_id: int, num: int): + async def add_gold(cls, user_id: str | int, group_id: str | int, num: int): """ 说明: 增加金币 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id :param num: 金币数量 """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) user.gold = user.gold + num user.get_total_gold = user.get_total_gold + num user.get_today_gold = user.get_today_gold + num await user.save(update_fields=["gold", "get_today_gold", "get_total_gold"]) @classmethod - async def spend_gold(cls, user_qq: int, group_id: int, num: int): + async def spend_gold(cls, user_id: str | int, group_id: str | int, num: int): """ 说明: 花费金币 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id :param num: 金币数量 """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) user.gold = user.gold - num user.spend_total_gold = user.spend_total_gold + num user.spend_today_gold = user.spend_today_gold + num await user.save(update_fields=["gold", "spend_total_gold", "spend_today_gold"]) @classmethod - async def add_property(cls, user_qq: int, group_id: int, name: str, num: int = 1): + async def add_property(cls, user_id: str | int, group_id: str | int, name: str, num: int = 1): """ 说明: 增加道具 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id :param name: 道具名称 :param num: 道具数量 """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) property_ = user.property if property_.get(name) is None: property_[name] = 0 @@ -139,18 +139,18 @@ class BagUser(Model): @classmethod async def delete_property( - cls, user_qq: int, group_id: int, name: str, num: int = 1 + cls, user_id: str | int, group_id: str | int, name: str, num: int = 1 ) -> bool: """ 说明: 使用/删除 道具 参数: - :param user_qq: qq号 - :param group_id: 所在群号 + :param user_id: 用户id + :param group_id: 所在群组id :param name: 道具名称 :param num: 使用个数 """ - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) property_ = user.property if name in property_: if (n := property_.get(name, 0)) < num: @@ -165,5 +165,9 @@ class BagUser(Model): @classmethod async def _run_script(cls): - await cls.raw("ALTER TABLE bag_users DROP props;") - """删除 props 字段""" + return ["ALTER TABLE bag_users DROP props;", # 删除 props 字段 + "ALTER TABLE bag_users RENAME COLUMN user_id TO user_id;", # 将user_id改为user_id + "ALTER TABLE bag_users ALTER COLUMN user_id TYPE character varying(255);", + # 将user_id字段类型改为character varying(255) + "ALTER TABLE bag_users ALTER COLUMN group_id TYPE character varying(255);" + ] diff --git a/models/ban_user.py b/models/ban_user.py index bc3b5848..be2269b9 100755 --- a/models/ban_user.py +++ b/models/ban_user.py @@ -9,7 +9,7 @@ from services.log import logger class BanUser(Model): - user_qq = fields.IntField(pk=True) + user_id = fields.CharField(255, pk=True) """用户id""" ban_level = fields.IntField() """使用ban命令的用户等级""" @@ -23,33 +23,33 @@ class BanUser(Model): table_description = ".ban/b了 封禁人员数据表" @classmethod - async def check_ban_level(cls, user_qq: int, level: int) -> bool: + async def check_ban_level(cls, user_id: str | int, level: int) -> bool: """ 说明: 检测ban掉目标的用户与unban用户的权限等级大小 参数: - :param user_qq: unban用户的qq号 + :param user_id: unban用户的用户id :param level: ban掉目标用户的权限等级 """ - user = await cls.filter(user_qq=user_qq).first() + user = await cls.filter(user_id=str(user_id)).first() if user: logger.debug( f"检测用户被ban等级,user_level: {user.ban_level},level: {level}", - target=user_qq, + target=str(user_id), ) return bool(user and user.ban_level > level) return False @classmethod - async def check_ban_time(cls, user_qq: int) -> Union[str, int]: + async def check_ban_time(cls, user_id: str | int) -> Union[str, int]: """ 说明: 检测用户被ban时长 参数: - :param user_qq: qq号 + :param user_id: 用户id """ - logger.debug(f"获取用户ban时长", target=user_qq) - if user := await cls.filter(user_qq=user_qq).first(): + logger.debug(f"获取用户ban时长", target=str(user_id)) + if user := await cls.filter(user_id=str(user_id)).first(): if ( time.time() - (user.ban_time + user.duration) > 0 and user.duration != -1 @@ -61,64 +61,71 @@ class BanUser(Model): return "" @classmethod - async def is_ban(cls, user_qq: int) -> bool: + async def is_ban(cls, user_id: str | int) -> bool: """ 说明: 判断用户是否被ban 参数: - :param user_qq: qq号 + :param user_id: 用户id """ - logger.debug(f"检测是否被ban", target=user_qq) - if await cls.check_ban_time(user_qq): + logger.debug(f"检测是否被ban", target=str(user_id)) + if await cls.check_ban_time(str(user_id)): return True else: - await cls.unban(user_qq) + await cls.unban(user_id) return False @classmethod - async def is_super_ban(cls, user_qq: int) -> bool: + async def is_super_ban(cls, user_id: str | int) -> bool: """ 说明: 判断用户是否被超级用户ban / b了 参数: - :param user_qq: qq号 + :param user_id: 用户id """ - logger.debug(f"检测是否被超级用户权限封禁", target=user_qq) - if user := await cls.filter(user_qq=user_qq).first(): + logger.debug(f"检测是否被超级用户权限封禁", target=str(user_id)) + if user := await cls.filter(user_id=str(user_id)).first(): if user.ban_level == 10: return True return False @classmethod - async def ban(cls, user_qq: int, ban_level: int, duration: int): + async def ban(cls, user_id: str | int, ban_level: int, duration: int): """ 说明: ban掉目标用户 参数: - :param user_qq: 目标用户qq号 + :param user_id: 目标用户id :param ban_level: 使用ban命令用户的权限 :param duration: ban时长,秒 """ - logger.debug(f"封禁用户,等级:{ban_level},时长: {duration}", target=user_qq) - if await cls.filter(user_qq=user_qq).first(): - await cls.unban(user_qq) + logger.debug(f"封禁用户,等级:{ban_level},时长: {duration}", target=str(user_id)) + if await cls.filter(user_id=str(user_id)).first(): + await cls.unban(user_id) await cls.create( - user_qq=user_qq, + user_id=str(user_id), ban_level=ban_level, ban_time=time.time(), duration=duration, ) @classmethod - async def unban(cls, user_qq: int) -> bool: + async def unban(cls, user_id: str | int) -> bool: """ 说明: unban用户 参数: - :param user_qq: qq号 + :param user_id: 用户id """ - if user := await cls.filter(user_qq=user_qq).first(): - logger.debug("解除封禁", target=user_qq) + if user := await cls.filter(user_id=str(user_id)).first(): + logger.debug("解除封禁", target=str(user_id)) await user.delete() return True return False + + @classmethod + async def _run_script(cls): + return ["ALTER TABLE ban_users RENAME COLUMN user_qq TO user_id;", # 将user_id改为user_id + "ALTER TABLE ban_users ALTER COLUMN user_id TYPE character varying(255);", + # 将user_id字段类型改为character varying(255) + ] diff --git a/models/chat_history.py b/models/chat_history.py index 4fea595d..52597b2a 100644 --- a/models/chat_history.py +++ b/models/chat_history.py @@ -11,9 +11,9 @@ class ChatHistory(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_qq = fields.BigIntField() + user_id = fields.CharField(255) """用户id""" - group_id = fields.BigIntField(null=True) + group_id = fields.CharField(255, null=True) """群聊id""" text = fields.TextField(null=True) """文本内容""" @@ -29,7 +29,7 @@ class ChatHistory(Model): @classmethod async def get_group_msg_rank( cls, - gid: int, + gid: str | int, limit: int = 10, order: str = "DESC", date_scope: Optional[Tuple[datetime, datetime]] = None, @@ -44,27 +44,27 @@ class ChatHistory(Model): :param date_scope: 日期范围 """ o = "-" if order == "DESC" else "" - query = cls.filter(group_id=gid) + query = cls.filter(group_id=str(gid)) if date_scope: query = query.filter(create_time__range=date_scope) return list( - await query.annotate(count=Count("user_qq")) + await query.annotate(count=Count("user_id")) .order_by(o + "count") - .group_by("user_qq") + .group_by("user_id") .limit(limit) - .values_list("user_qq", "count") + .values_list("user_id", "count") ) # type: ignore @classmethod - async def get_group_first_msg_datetime(cls, group_id: int) -> Optional[datetime]: + async def get_group_first_msg_datetime(cls, group_id: str | int) -> Optional[datetime]: """ 说明: 获取群第一条记录消息时间 参数: - :param group_id: 群聊id + :param group_id: 群组id """ if ( - message := await cls.filter(group_id=group_id) + message := await cls.filter(group_id=str(group_id)) .order_by("create_time") .first() ): @@ -73,8 +73,8 @@ class ChatHistory(Model): @classmethod async def get_message( cls, - uid: Optional[int], - gid: Optional[int], + uid: Union[int, str], + gid: Union[int, str], type_: Literal["user", "group"], msg_type: Optional[Literal["private", "group"]] = None, days: Optional[Union[int, Tuple[datetime, datetime]]] = None, @@ -83,22 +83,22 @@ class ChatHistory(Model): 说明: 获取消息查询query 参数: - :param uid: 用户qq - :param gid: 群号 + :param uid: 用户id + :param gid: 群聊id :param type_: 类型,私聊或群聊 :param msg_type: 消息类型,用户或群聊 :param days: 限制日期 """ if type_ == "user": - query = cls.filter(user_qq=uid) + query = cls.filter(user_id=str(uid)) if msg_type == "private": query = query.filter(group_id__isnull=True) elif msg_type == "group": query = query.filter(group_id__not_isnull=True) else: - query = cls.filter(group_id=gid) + query = cls.filter(group_id=str(gid)) if uid: - query = query.filter(user_qq=uid) + query = query.filter(user_id=str(uid)) if days: if isinstance(days, int): query = query.filter( @@ -114,4 +114,7 @@ class ChatHistory(Model): "alter table chat_history alter group_id drop not null;", # 允许 group_id 为空 "alter table chat_history alter text drop not null;", # 允许 text 为空 "alter table chat_history alter plain_text drop not null;", # 允许 plain_text 为空 + "ALTER TABLE chat_history RENAME COLUMN user_qq TO user_id;", # 将user_id改为user_id + "ALTER TABLE chat_history ALTER COLUMN user_id TYPE character varying(255);", + "ALTER TABLE chat_history ALTER COLUMN group_id TYPE character varying(255);", ] diff --git a/models/friend_user.py b/models/friend_user.py index 3b41259a..90cf279b 100755 --- a/models/friend_user.py +++ b/models/friend_user.py @@ -8,7 +8,7 @@ class FriendUser(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_id = fields.BigIntField(unique=True) + user_id = fields.CharField(255, unique=True) """用户id""" user_name = fields.CharField(max_length=255, default="") """用户名称""" @@ -20,26 +20,26 @@ class FriendUser(Model): table_description = "好友信息数据表" @classmethod - async def get_user_name(cls, user_id: int) -> str: + async def get_user_name(cls, user_id: str | int) -> str: """ 说明: 获取好友用户名称 参数: - :param user_id: qq号 + :param user_id: 用户id """ - if user := await cls.get_or_none(user_id=user_id): + if user := await cls.get_or_none(user_id=str(user_id)): return user.user_name return "" @classmethod - async def get_user_nickname(cls, user_id: int) -> str: + async def get_user_nickname(cls, user_id: str | int) -> str: """ 说明: 获取用户昵称 参数: - :param user_id: qq号 + :param user_id: 用户id """ - if user := await cls.get_or_none(user_id=user_id): + if user := await cls.get_or_none(user_id=str(user_id)): if user.nickname: _tmp = "" if black_word := Config.get_config("nickname", "BLACK_WORD"): @@ -49,12 +49,17 @@ class FriendUser(Model): return "" @classmethod - async def set_user_nickname(cls, user_id: int, nickname: str): + async def set_user_nickname(cls, user_id: str | int, nickname: str): """ 说明: 设置用户昵称 参数: - :param user_id: qq号 + :param user_id: 用户id :param nickname: 昵称 """ - await cls.update_or_create(user_id=user_id, defaults={"nickname": nickname}) + await cls.update_or_create(user_id=str(user_id), defaults={"nickname": nickname}) + + @classmethod + async def _run_script(cls): + await cls.raw("ALTER TABLE friend_users ALTER COLUMN user_id TYPE character varying(255);") + # 将user_id字段类型改为character varying(255)) diff --git a/models/group_info.py b/models/group_info.py index e3150cda..85b2d468 100755 --- a/models/group_info.py +++ b/models/group_info.py @@ -8,7 +8,7 @@ from services.log import logger class GroupInfo(Model): - group_id = fields.BigIntField(pk=True) + group_id = fields.CharField(255, pk=True) """群聊id""" group_name = fields.TextField(default="") """群聊名称""" @@ -25,6 +25,7 @@ class GroupInfo(Model): @classmethod def _run_script(cls): - return [ - "ALTER TABLE group_info ADD group_flag Integer NOT NULL DEFAULT 0;" # group_info表添加一个group_flag - ] + return ["ALTER TABLE group_info ADD group_flag Integer NOT NULL DEFAULT 0;", # group_info表添加一个group_flag + "ALTER TABLE group_info ALTER COLUMN group_id TYPE character varying(255);" + # 将group_id字段类型改为character varying(255) + ] diff --git a/models/group_member_info.py b/models/group_member_info.py index cb9e4751..8e6527b8 100755 --- a/models/group_member_info.py +++ b/models/group_member_info.py @@ -12,11 +12,11 @@ class GroupInfoUser(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_qq = fields.BigIntField() + user_id = fields.CharField(255) """用户id""" user_name = fields.CharField(255, default="") """用户昵称""" - group_id = fields.BigIntField() + group_id = fields.CharField(255) """群聊id""" user_join_time: datetime = fields.DatetimeField(null=True) """用户入群时间""" @@ -28,58 +28,58 @@ class GroupInfoUser(Model): class Meta: table = "group_info_users" table_description = "群员信息数据表" - unique_together = ("user_qq", "group_id") + unique_together = ("user_id", "group_id") @classmethod - async def get_group_member_id_list(cls, group_id: int) -> Set[int]: + async def get_group_member_id_list(cls, group_id: str | int) -> Set[int]: """ 说明: - 获取该群所有用户qq + 获取该群所有用户id 参数: :param group_id: 群号 """ return set( - await cls.filter(group_id=group_id).values_list("user_qq", flat=True) + await cls.filter(group_id=str(group_id)).values_list("user_id", flat=True) ) # type: ignore @classmethod - async def set_user_nickname(cls, user_qq: int, group_id: int, nickname: str): + async def set_user_nickname(cls, user_id: str | int, group_id: str | int, nickname: str): """ 说明: 设置群员在该群内的昵称 参数: - :param user_qq: qq号 + :param user_id: 用户id :param group_id: 群号 :param nickname: 昵称 """ await cls.update_or_create( - user_qq=user_qq, - group_id=group_id, + user_id=str(user_id), + group_id=str(group_id), defaults={"nickname": nickname}, ) @classmethod - async def get_user_all_group(cls, user_qq: int) -> List[int]: + async def get_user_all_group(cls, user_id: str | int) -> List[int]: """ 说明: 获取该用户所在的所有群聊 参数: - :param user_qq: 用户qq + :param user_id: 用户id """ return list( - await cls.filter(user_qq=user_qq).values_list("group_id", flat=True) + await cls.filter(user_id=str(user_id)).values_list("group_id", flat=True) ) # type: ignore @classmethod - async def get_user_nickname(cls, user_qq: int, group_id: int) -> str: + async def get_user_nickname(cls, user_id: str | int, group_id: str | int) -> str: """ 说明: 获取用户在该群的昵称 参数: - :param user_qq: qq号 + :param user_id: 用户id :param group_id: 群号 """ - if user := await cls.get_or_none(user_qq=user_qq, group_id=group_id): + if user := await cls.get_or_none(user_id=str(user_id), group_id=str(group_id)): if user.nickname: nickname = "" if black_word := Config.get_config("nickname", "BLACK_WORD"): @@ -90,15 +90,15 @@ class GroupInfoUser(Model): return "" @classmethod - async def get_group_member_uid(cls, user_qq: int, group_id: int) -> Optional[int]: + async def get_group_member_uid(cls, user_id: str | int, group_id: str | int) -> Optional[int]: logger.debug( - f"GroupInfoUser 尝试获取 用户[{user_qq}] 群聊[{group_id}] UID" + f"GroupInfoUser 尝试获取 用户[{user_id}] 群聊[{group_id}] UID" ) - user, _ = await cls.get_or_create(user_qq=user_qq, group_id=group_id) - _max_uid_user, _ = await cls.get_or_create(user_qq=114514, group_id=114514) + user, _ = await cls.get_or_create(user_id=str(user_id), group_id=str(group_id)) + _max_uid_user, _ = await cls.get_or_create(user_id=114514, group_id=114514) _max_uid = _max_uid_user.uid if not user.uid: - all_user = await cls.filter(user_qq=user_qq).all() + all_user = await cls.filter(user_id=str(user_id)).all() for x in all_user: if x.uid: return x.uid @@ -106,7 +106,7 @@ class GroupInfoUser(Model): _max_uid_user.uid = _max_uid + 1 await cls.bulk_update([user, _max_uid_user], ["uid"]) logger.debug( - f"GroupInfoUser 获取 用户[{user_qq}] 群聊[{group_id}] UID: {user.uid}" + f"GroupInfoUser 获取 用户[{user_id}] 群聊[{group_id}] UID: {user.uid}" ) return user.uid @@ -115,4 +115,8 @@ class GroupInfoUser(Model): return [ "alter table group_info_users alter user_join_time drop not null;", # 允许 user_join_time 为空 "ALTER TABLE group_info_users ALTER COLUMN user_join_time TYPE timestamp with time zone USING user_join_time::timestamp with time zone;", + "ALTER TABLE group_info_users RENAME COLUMN user_qq TO user_id;", # 将user_id改为user_id + "ALTER TABLE group_info_users ALTER COLUMN user_id TYPE character varying(255);", + # 将user_id字段类型改为character varying(255) + "ALTER TABLE group_info_users ALTER COLUMN group_id TYPE character varying(255);" ] diff --git a/models/level_user.py b/models/level_user.py index 691767dc..dc9a5dfb 100755 --- a/models/level_user.py +++ b/models/level_user.py @@ -7,9 +7,9 @@ class LevelUser(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_qq = fields.BigIntField() + user_id = fields.CharField(255) """用户id""" - group_id = fields.BigIntField() + group_id = fields.CharField(255) """群聊id""" user_level = fields.BigIntField() """用户权限等级""" @@ -19,82 +19,90 @@ class LevelUser(Model): class Meta: table = "level_users" table_description = "用户权限数据库" - unique_together = ("user_qq", "group_id") + unique_together = ("user_id", "group_id") @classmethod - async def get_user_level(cls, user_qq: int, group_id: int) -> int: + async def get_user_level(cls, user_id: str | int, group_id: str | int) -> int: """ 说明: 获取用户在群内的等级 参数: - :param user_qq: qq号 - :param group_id: 群号 + :param user_id: 用户id + :param group_id: 群组id """ - if user := await cls.get_or_none(user_qq=user_qq, group_id=group_id): + if user := await cls.get_or_none(user_id=str(user_id), group_id=str(group_id)): return user.user_level return -1 @classmethod async def set_level( - cls, user_qq: int, group_id: int, level: int, group_flag: int = 0 + cls, user_id: str | int, group_id: str | int, level: int, group_flag: int = 0 ): """ 说明: 设置用户在群内的权限 参数: - :param user_qq: qq号 - :param group_id: 群号 + :param user_id: 用户id + :param group_id: 群组id :param level: 权限等级 :param group_flag: 是否被自动更新刷新权限 0:是,1:否 """ await cls.update_or_create( - user_qq=user_qq, - group_id=group_id, + user_id=str(user_id), + group_id=str(group_id), defaults={"user_level": level, "group_flag": group_flag}, ) @classmethod - async def delete_level(cls, user_qq: int, group_id: int) -> bool: + async def delete_level(cls, user_id: str | int, group_id: str | int) -> bool: """ 说明: 删除用户权限 参数: - :param user_qq: qq号 - :param group_id: 群号 + :param user_id: 用户id + :param group_id: 群组id """ - if user := await cls.get_or_none(user_qq=user_qq, group_id=group_id): + if user := await cls.get_or_none(user_id=str(user_id), group_id=str(group_id)): await user.delete() return True return False @classmethod - async def check_level(cls, user_qq: int, group_id: int, level: int) -> bool: + async def check_level(cls, user_id: str | int, group_id: str | int, level: int) -> bool: """ 说明: 检查用户权限等级是否大于 level 参数: - :param user_qq: qq号 - :param group_id: 群号 + :param user_id: 用户id + :param group_id: 群组id :param level: 权限等级 """ if group_id: - if user := await cls.get_or_none(user_qq=user_qq, group_id=group_id): + if user := await cls.get_or_none(user_id=str(user_id), group_id=str(group_id)): return user.user_level >= level else: - user_list = await cls.filter(user_qq=user_qq).all() + user_list = await cls.filter(user_id=str(user_id)).all() user = max(user_list, key=lambda x: x.user_level) return user.user_level >= level return False @classmethod - async def is_group_flag(cls, user_qq: int, group_id: int) -> bool: + async def is_group_flag(cls, user_id: str | int, group_id: str | int) -> bool: """ 说明: 检测是否会被自动更新刷新权限 参数: - :param user_qq: qq号 - :param group_id: 群号 + :param user_id: 用户id + :param group_id: 群组id """ - if user := await cls.get_or_none(user_qq=user_qq, group_id=group_id): + if user := await cls.get_or_none(user_id=str(user_id), group_id=str(group_id)): return user.group_flag == 1 return False + + @classmethod + async def _run_script(cls): + return ["ALTER TABLE level_users RENAME COLUMN user_id TO user_id;", # 将user_id改为user_id + "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/models/sign_group_user.py b/models/sign_group_user.py index e585d137..18ffbd38 100755 --- a/models/sign_group_user.py +++ b/models/sign_group_user.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import List, Literal, Optional, Tuple +from typing import List, Literal, Optional, Tuple, Union from tortoise import fields @@ -10,9 +10,9 @@ class SignGroupUser(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_qq = fields.BigIntField() + user_id = fields.CharField(255) """用户id""" - group_id = fields.BigIntField() + group_id = fields.CharField(255) """群聊id""" checkin_count = fields.IntField(default=0) """签到次数""" @@ -29,7 +29,7 @@ class SignGroupUser(Model): class Meta: table = "sign_group_users" table_description = "群员签到数据表" - unique_together = ("user_qq", "group_id") + unique_together = ("user_id", "group_id") @classmethod async def sign(cls, user: "SignGroupUser", impression: float): @@ -49,8 +49,8 @@ class SignGroupUser(Model): @classmethod async def get_all_impression( - cls, group_id: Optional[int] - ) -> Tuple[List[int], List[int], List[float]]: + cls, group_id: Union[int, str] + ) -> Tuple[List[str], List[str], List[float]]: """ 说明: 获取该群所有用户 id 及对应 好感度 @@ -58,15 +58,23 @@ class SignGroupUser(Model): :param group_id: 群号 """ if group_id: - query = cls.filter(group_id=group_id) + query = cls.filter(group_id=str(group_id)) else: query = cls - value_list = await query.all().values_list("user_qq", "group_id", "impression") # type: ignore - qq_list = [] + value_list = await query.all().values_list("user_id", "group_id", "impression") # type: ignore + user_list = [] group_list = [] impression_list = [] for value in value_list: - qq_list.append(value[0]) + user_list.append(value[0]) group_list.append(value[1]) impression_list.append(float(value[2])) - return qq_list, impression_list, group_list + return user_list, group_list, impression_list + + @classmethod + async def _run_script(cls): + return ["ALTER TABLE sign_group_users RENAME COLUMN user_id TO user_id;", # 将user_id改为user_id + "ALTER TABLE sign_group_users ALTER COLUMN user_id TYPE character varying(255);", + # 将user_id字段类型改为character varying(255) + "ALTER TABLE sign_group_users ALTER COLUMN group_id TYPE character varying(255);" + ] diff --git a/models/user_shop_gold_log.py b/models/user_shop_gold_log.py index 5e444196..41c980f6 100644 --- a/models/user_shop_gold_log.py +++ b/models/user_shop_gold_log.py @@ -9,9 +9,9 @@ class UserShopGoldLog(Model): id = fields.IntField(pk=True, generated=True, auto_increment=True) """自增id""" - user_qq = fields.BigIntField() + user_id = fields.CharField(255) """用户id""" - group_id = fields.BigIntField() + group_id = fields.CharField(255) """群聊id""" type = fields.IntField() """金币使用类型 0: 购买, 1: 使用, 2: 插件""" @@ -27,3 +27,12 @@ class UserShopGoldLog(Model): class Meta: table = "user_shop_gold_log" table_description = "金币使用日志表" + + @classmethod + def _run_script(cls): + return [ + "ALTER TABLE user_shop_gold_log RENAME COLUMN user_qq TO user_id;", # 将user_qq改为user_id + "ALTER TABLE user_shop_gold_log ALTER COLUMN user_id TYPE character varying(255);", + # 将user_id字段类型改为character varying(255) + "ALTER TABLE user_shop_gold_log ALTER COLUMN group_id TYPE character varying(255);", + ]