From 04c516f783cad008367341c42654b71a987fab13 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Fri, 14 Apr 2023 11:45:45 +0800 Subject: [PATCH 1/4] :bricks: Update the 'user_qq' field in the database to 'user_id' --- models/bag_user.py | 70 +++++++++++++++++++----------------- models/ban_user.py | 63 +++++++++++++++++--------------- models/chat_history.py | 37 ++++++++++--------- models/friend_user.py | 25 +++++++------ models/group_info.py | 9 ++--- models/group_member_info.py | 48 +++++++++++++------------ models/level_user.py | 58 +++++++++++++++++------------- models/sign_group_user.py | 30 ++++++++++------ models/user_shop_gold_log.py | 13 +++++-- 9 files changed, 201 insertions(+), 152 deletions(-) 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);", + ] From 0eeb55a0ca68445d530195b92c8904fb7c99ae48 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Fri, 14 Apr 2023 12:48:00 +0800 Subject: [PATCH 2/4] :construction: Update the data types of the user_qq and group_id fields to str --- basic_plugins/admin_bot_manage/_data_source.py | 2 +- basic_plugins/admin_bot_manage/admin_config.py | 2 +- basic_plugins/apscheduler/__init__.py | 4 ++-- basic_plugins/chat_history/chat_message_handle.py | 2 +- basic_plugins/group_handle/__init__.py | 14 +++++++------- basic_plugins/hooks/_utils.py | 4 ++-- basic_plugins/invite_manager/__init__.py | 4 ++-- basic_plugins/nickname.py | 2 +- basic_plugins/shop/my_props/__init__.py | 2 +- basic_plugins/super_cmd/bot_friend_group.py | 4 ++-- .../super_cmd/update_friend_group_info.py | 4 ++-- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/basic_plugins/admin_bot_manage/_data_source.py b/basic_plugins/admin_bot_manage/_data_source.py index fdd9d366..be2e6c8d 100644 --- a/basic_plugins/admin_bot_manage/_data_source.py +++ b/basic_plugins/admin_bot_manage/_data_source.py @@ -306,7 +306,7 @@ async def update_member_info( if user_info["role"] in [ "owner", "admin", - ] and not await LevelUser.is_group_flag(user_info["user_id"], group_id): + ] and not await LevelUser.is_group_flag(user_info["user_id"], str(group_id)): await LevelUser.set_level( user_info["user_id"], user_info["group_id"], diff --git a/basic_plugins/admin_bot_manage/admin_config.py b/basic_plugins/admin_bot_manage/admin_config.py index 45957035..33740b92 100755 --- a/basic_plugins/admin_bot_manage/admin_config.py +++ b/basic_plugins/admin_bot_manage/admin_config.py @@ -17,7 +17,7 @@ admin_notice = on_notice(priority=5) @admin_notice.handle() async def _(event: GroupAdminNoticeEvent): if user := await GroupInfoUser.filter( - user_qq=event.user_id, group_id=event.group_id + user_qq=str(event.user_id), group_id=str(event.group_id) ).first(): nickname = user.nickname else: diff --git a/basic_plugins/apscheduler/__init__.py b/basic_plugins/apscheduler/__init__.py index 545dba29..35f4056f 100755 --- a/basic_plugins/apscheduler/__init__.py +++ b/basic_plugins/apscheduler/__init__.py @@ -91,7 +91,7 @@ async def _(): _used_group.append(g) group_info = await bot.get_group_info(group_id=g) await GroupInfo.update_or_create( - group_id=group_info["group_id"], + group_id=str(group_info["group_id"]), defaults={ "group_name": group_info["group_name"], "max_member_count": group_info["max_member_count"], @@ -118,7 +118,7 @@ async def _(): bot = bots[key] fl = await bot.get_friend_list() for f in fl: - await FriendUser.create(user_id=f["user_id"], user_name=f["nickname"]) + await FriendUser.create(user_id=str(f["user_id"]), user_name=f["nickname"]) logger.debug(f"更新好友信息成功", "自动更新好友", f["user_id"]) except Exception as e: logger.error(f"自动更新群组信息错误", e=e) diff --git a/basic_plugins/chat_history/chat_message_handle.py b/basic_plugins/chat_history/chat_message_handle.py index 3c1c2ddb..bfb2ba81 100644 --- a/basic_plugins/chat_history/chat_message_handle.py +++ b/basic_plugins/chat_history/chat_message_handle.py @@ -69,7 +69,7 @@ async def _(event: GroupMessageEvent, reg_group: Tuple[Any, ...] = RegexGroup()) num_str = "发言次数:\n\n" idx = 1 for uid, num in rank_data: - if user := await GroupInfoUser.filter(user_qq=uid, group_id=gid).first(): + if user := await GroupInfoUser.filter(user_qq=str(uid), group_id=str(gid)).first(): user_name = user.user_name else: user_name = uid diff --git a/basic_plugins/group_handle/__init__.py b/basic_plugins/group_handle/__init__.py index bfa6ae5f..72fe8ea1 100755 --- a/basic_plugins/group_handle/__init__.py +++ b/basic_plugins/group_handle/__init__.py @@ -68,7 +68,7 @@ add_group = on_request(priority=1, block=False) @group_increase_handle.handle() async def _(bot: Bot, event: GroupIncreaseNoticeEvent): if event.user_id == int(bot.self_id): - group = await GroupInfo.get_or_none(group_id=event.group_id) + group = await GroupInfo.get_or_none(group_id=str(event.group_id)) # 群聊不存在或被强制拉群,退出该群 if (not group or group.group_flag == 0) and Config.get_config( "invite_manager", "flag" @@ -139,8 +139,8 @@ async def _(bot: Bot, event: GroupIncreaseNoticeEvent): group_id=event.group_id, user_id=event.user_id ) await GroupInfoUser.update_or_create( - user_qq=user_info["user_id"], - group_id=user_info["group_id"], + user_qq=str(user_info["user_id"]), + group_id=str(user_info["group_id"]), defaults={"user_name": user_info["nickname"], "user_join_time": join_time}, ) logger.info(f"用户{user_info['user_id']} 所属{user_info['group_id']} 更新成功") @@ -187,12 +187,12 @@ async def _(bot: Bot, event: GroupDecreaseNoticeEvent): group_id = event.group_id operator_id = event.operator_id if user := await GroupInfoUser.get_or_none( - user_qq=event.operator_id, group_id=event.group_id + user_qq=str(event.operator_id), group_id=str(event.group_id) ): operator_name = user.user_name else: operator_name = "None" - group = await GroupInfo.filter(group_id=group_id).first() + group = await GroupInfo.filter(group_id=str(group_id)).first() group_name = group.group_name if group else "" coffee = int(list(bot.config.superusers)[0]) await bot.send_private_msg( @@ -207,12 +207,12 @@ async def _(bot: Bot, event: GroupDecreaseNoticeEvent): group_manager.delete_group(event.group_id) return if user := await GroupInfoUser.get_or_none( - user_qq=event.user_id, group_id=event.group_id + user_qq=str(event.user_id), group_id=str(event.group_id) ): user_name = user.user_name else: user_name = f"{event.user_id}" - await GroupInfoUser.filter(user_qq=event.user_id, group_id=event.group_id).delete() + await GroupInfoUser.filter(user_qq=str(event.user_id), group_id=str(event.group_id)).delete() logger.info( f"名称: {user_name} 退出群聊", "group_decrease_handle", diff --git a/basic_plugins/hooks/_utils.py b/basic_plugins/hooks/_utils.py index b490afb4..de44e245 100644 --- a/basic_plugins/hooks/_utils.py +++ b/basic_plugins/hooks/_utils.py @@ -569,8 +569,8 @@ class AuthChecker: event.user_id, event.group_id, psm.cost_gold ) await UserShopGoldLog.create( - user_qq=event.user_id, - group_id=event.group_id, + user_qq=str(event.user_id), + group_id=str(event.group_id), type=2, name=plugin_name, num=1, diff --git a/basic_plugins/invite_manager/__init__.py b/basic_plugins/invite_manager/__init__.py index bf6dbbee..ba289d00 100755 --- a/basic_plugins/invite_manager/__init__.py +++ b/basic_plugins/invite_manager/__init__.py @@ -58,7 +58,7 @@ async def _(bot: Bot, event: FriendRequestEvent): if Config.get_config("invite_manager", "AUTO_ADD_FRIEND"): logger.debug(f"已开启好友请求自动同意,成功通过该请求", "好友请求", target=event.user_id) await bot.set_friend_add_request(flag=event.flag, approve=True) - await FriendUser.create(user_id=user["user_id"], user_name=user["nickname"]) + await FriendUser.create(user_id=str(user["user_id"]), user_name=user["nickname"]) else: requests_manager.add_request( event.user_id, @@ -87,7 +87,7 @@ async def _(bot: Bot, event: GroupRequestEvent): ) group_info = await bot.get_group_info(group_id=event.group_id) await GroupInfo.update_or_create( - group_id=group_info["group_id"], + group_id=str(group_info["group_id"]), defaults={ "group_name": group_info["group_name"], "max_member_count": group_info["max_member_count"], diff --git a/basic_plugins/nickname.py b/basic_plugins/nickname.py index 46341207..40f064df 100755 --- a/basic_plugins/nickname.py +++ b/basic_plugins/nickname.py @@ -104,7 +104,7 @@ async def _( ): (msg,) = reg_group await FriendUser.set_user_nickname(event.user_id, msg) - await GroupInfoUser.filter(user_qq=event.user_id).update(nickname=msg) + await GroupInfoUser.filter(user_qq=str(event.user_id)).update(nickname=msg) logger.info(f"设置全局昵称成功: {msg}", "设置全局昵称", event.user_id) await global_nickname.send(f"设置全局昵称成功!亲爱的{msg}") diff --git a/basic_plugins/shop/my_props/__init__.py b/basic_plugins/shop/my_props/__init__.py index a634fb52..07faf00c 100644 --- a/basic_plugins/shop/my_props/__init__.py +++ b/basic_plugins/shop/my_props/__init__.py @@ -33,7 +33,7 @@ my_props = on_command("我的道具", priority=5, block=True, permission=GROUP) @my_props.handle() async def _(event: GroupMessageEvent): - props = await BagUser.get_property(event.user_id, event.group_id) + props = await BagUser.get_property(str(event.user_id), str(event.group_id)) if props: await my_props.send(image(b64=await create_bag_image(props))) logger.info(f"查看我的道具", "我的道具", event.user_id, event.group_id) diff --git a/basic_plugins/super_cmd/bot_friend_group.py b/basic_plugins/super_cmd/bot_friend_group.py index 44a9f1d9..eef776d3 100755 --- a/basic_plugins/super_cmd/bot_friend_group.py +++ b/basic_plugins/super_cmd/bot_friend_group.py @@ -109,13 +109,13 @@ async def _( if cmd[:2] == "同意": rid = requests_manager.get_group_id(id_) if rid: - if group := await GroupInfo.get_or_none(group_id=rid): + if group := await GroupInfo.get_or_none(group_id=str(rid)): group.group_flag = 1 await group.save(update_fields=["group_flag"]) else: group_info = await bot.get_group_info(group_id=rid) await GroupInfo.create( - group_id=rid, + group_id=str(rid), group_name=group_info["group_name"], max_member_count=group_info["max_member_count"], member_count=group_info["member_count"], diff --git a/basic_plugins/super_cmd/update_friend_group_info.py b/basic_plugins/super_cmd/update_friend_group_info.py index f56c4ae6..5d4b1089 100755 --- a/basic_plugins/super_cmd/update_friend_group_info.py +++ b/basic_plugins/super_cmd/update_friend_group_info.py @@ -40,7 +40,7 @@ async def _(bot: Bot, event: MessageEvent): try: group_info = await bot.get_group_info(group_id=g) await GroupInfo.update_or_create( - group_id=group_info["group_id"], + group_id=str(group_info["group_id"]), defaults={ "group_name": group_info["group_name"], "max_member_count": group_info["max_member_count"], @@ -65,7 +65,7 @@ async def _(bot: Bot, event: MessageEvent): for f in fl: try: await FriendUser.update_or_create( - user_id=f["user_id"], defaults={"nickname": f["nickname"]} + user_id=str(f["user_id"]), defaults={"nickname": f["nickname"]} ) logger.debug(f"更新好友信息成功", "更新好友信息", event.user_id, target=f["user_id"]) num += 1 From c577aa13186e88c5dd598bb036ea948c4a64deaf Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Fri, 14 Apr 2023 15:47:53 +0800 Subject: [PATCH 3/4] :construction: Update the data types of the user_qq and group_id fields to str --- basic_plugins/admin_bot_manage/_data_source.py | 8 ++++---- basic_plugins/admin_bot_manage/admin_config.py | 2 +- basic_plugins/chat_history/chat_message_handle.py | 2 +- basic_plugins/group_handle/__init__.py | 2 +- basic_plugins/nickname.py | 2 +- basic_plugins/shop/buy.py | 4 ++-- models/bag_user.py | 2 +- models/level_user.py | 2 +- models/sign_group_user.py | 2 +- plugins/black_word/utils.py | 2 +- plugins/my_info/__init__.py | 2 +- plugins/open_cases/open_cases_c.py | 2 +- plugins/russian/__init__.py | 2 +- plugins/send_setu_/send_setu/__init__.py | 4 ++-- plugins/sign_in/goods_register.py | 2 +- plugins/sign_in/group_user_checkin.py | 12 ++++++------ plugins/sign_in/utils.py | 12 ++++++------ plugins/statistics/statistics_handle.py | 4 ++-- plugins/web_ui/api/request.py | 4 ++-- utils/data_utils.py | 2 +- utils/depends/__init__.py | 4 ++-- 21 files changed, 39 insertions(+), 39 deletions(-) diff --git a/basic_plugins/admin_bot_manage/_data_source.py b/basic_plugins/admin_bot_manage/_data_source.py index be2e6c8d..4b536d6e 100644 --- a/basic_plugins/admin_bot_manage/_data_source.py +++ b/basic_plugins/admin_bot_manage/_data_source.py @@ -317,7 +317,7 @@ async def update_member_info( user_info["user_id"], user_info["group_id"], 9 ) user = await GroupInfoUser.get_or_none( - user_qq=user_info["user_id"], group_id=user_info["group_id"] + user_id=str(user_info["user_id"]), group_id=str(user_info["group_id"]) ) if user: if user.user_name != nickname: @@ -338,8 +338,8 @@ async def update_member_info( "%Y-%m-%d %H:%M:%S", ) await GroupInfoUser.update_or_create( - user_qq=user_info["user_id"], - group_id=user_info["group_id"], + user_id=str(user_info["user_id"]), + group_id=str(user_info["group_id"]), defaults={ "user_name": nickname, "user_join_time": join_time.replace( @@ -356,7 +356,7 @@ async def update_member_info( ) if _del_member_list: for del_user in _del_member_list: - await GroupInfoUser.filter(user_qq=del_user, group_id=group_id).delete() + await GroupInfoUser.filter(user_id=str(del_user), group_id=str(group_id)).delete() logger.info(f"删除已退群用户", "更新群组成员信息", del_user, group_id) if _error_member_list and remind_superuser: result = "" diff --git a/basic_plugins/admin_bot_manage/admin_config.py b/basic_plugins/admin_bot_manage/admin_config.py index 33740b92..49a5a632 100755 --- a/basic_plugins/admin_bot_manage/admin_config.py +++ b/basic_plugins/admin_bot_manage/admin_config.py @@ -17,7 +17,7 @@ admin_notice = on_notice(priority=5) @admin_notice.handle() async def _(event: GroupAdminNoticeEvent): if user := await GroupInfoUser.filter( - user_qq=str(event.user_id), group_id=str(event.group_id) + user_id=str(event.user_id), group_id=str(event.group_id) ).first(): nickname = user.nickname else: diff --git a/basic_plugins/chat_history/chat_message_handle.py b/basic_plugins/chat_history/chat_message_handle.py index bfb2ba81..e262ccad 100644 --- a/basic_plugins/chat_history/chat_message_handle.py +++ b/basic_plugins/chat_history/chat_message_handle.py @@ -69,7 +69,7 @@ async def _(event: GroupMessageEvent, reg_group: Tuple[Any, ...] = RegexGroup()) num_str = "发言次数:\n\n" idx = 1 for uid, num in rank_data: - if user := await GroupInfoUser.filter(user_qq=str(uid), group_id=str(gid)).first(): + if user := await GroupInfoUser.filter(user_id=str(uid), group_id=str(gid)).first(): user_name = user.user_name else: user_name = uid diff --git a/basic_plugins/group_handle/__init__.py b/basic_plugins/group_handle/__init__.py index 72fe8ea1..c67b06f1 100755 --- a/basic_plugins/group_handle/__init__.py +++ b/basic_plugins/group_handle/__init__.py @@ -212,7 +212,7 @@ async def _(bot: Bot, event: GroupDecreaseNoticeEvent): user_name = user.user_name else: user_name = f"{event.user_id}" - await GroupInfoUser.filter(user_qq=str(event.user_id), group_id=str(event.group_id)).delete() + await GroupInfoUser.filter(user_id=str(event.user_id), group_id=str(event.group_id)).delete() logger.info( f"名称: {user_name} 退出群聊", "group_decrease_handle", diff --git a/basic_plugins/nickname.py b/basic_plugins/nickname.py index 40f064df..d9e104cc 100755 --- a/basic_plugins/nickname.py +++ b/basic_plugins/nickname.py @@ -104,7 +104,7 @@ async def _( ): (msg,) = reg_group await FriendUser.set_user_nickname(event.user_id, msg) - await GroupInfoUser.filter(user_qq=str(event.user_id)).update(nickname=msg) + await GroupInfoUser.filter(user_id=str(event.user_id)).update(nickname=msg) logger.info(f"设置全局昵称成功: {msg}", "设置全局昵称", event.user_id) await global_nickname.send(f"设置全局昵称成功!亲爱的{msg}") diff --git a/basic_plugins/shop/buy.py b/basic_plugins/shop/buy.py index a89031f8..61701e00 100644 --- a/basic_plugins/shop/buy.py +++ b/basic_plugins/shop/buy.py @@ -94,8 +94,8 @@ async def _(event: GroupMessageEvent, arg: Message = CommandArg()): event.group_id, ) await UserShopGoldLog.create( - user_qq=event.user_id, - group_id=event.group_id, + user_id=str(event.user_id), + group_id=str(event.group_id), type=0, name=goods.goods_name, num=num, diff --git a/models/bag_user.py b/models/bag_user.py index 3590d33f..07f219dc 100755 --- a/models/bag_user.py +++ b/models/bag_user.py @@ -166,7 +166,7 @@ class BagUser(Model): @classmethod async def _run_script(cls): 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 RENAME COLUMN user_qq TO user_id;", # 将user_qq改为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/level_user.py b/models/level_user.py index dc9a5dfb..c74e41e4 100755 --- a/models/level_user.py +++ b/models/level_user.py @@ -101,7 +101,7 @@ class LevelUser(Model): @classmethod async def _run_script(cls): - return ["ALTER TABLE level_users RENAME COLUMN user_id TO user_id;", # 将user_id改为user_id + return ["ALTER TABLE level_users RENAME COLUMN user_qq 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 18ffbd38..f6449888 100755 --- a/models/sign_group_user.py +++ b/models/sign_group_user.py @@ -73,7 +73,7 @@ class SignGroupUser(Model): @classmethod async def _run_script(cls): - return ["ALTER TABLE sign_group_users RENAME COLUMN user_id TO user_id;", # 将user_id改为user_id + return ["ALTER TABLE sign_group_users RENAME COLUMN user_qq 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/plugins/black_word/utils.py b/plugins/black_word/utils.py index bcd42254..7bf9a56c 100644 --- a/plugins/black_word/utils.py +++ b/plugins/black_word/utils.py @@ -235,7 +235,7 @@ async def _get_punish( ban_4_duration = Config.get_config("black_word", "BAN_4_DURATION") # 口头警告内容 warning_result = Config.get_config("black_word", "WARNING_RESULT") - if user := await GroupInfoUser.get_or_none(user_qq=user_id, group_id=group_id): + if user := await GroupInfoUser.get_or_none(user_id=str(user_id), group_id=str(group_id)): uname = user.user_name else: uname = user_id diff --git a/plugins/my_info/__init__.py b/plugins/my_info/__init__.py index e7ba778c..9e3d73c8 100644 --- a/plugins/my_info/__init__.py +++ b/plugins/my_info/__init__.py @@ -32,7 +32,7 @@ async def _(event: GroupMessageEvent): async def get_member_info(user_qq: int, group_id: int) -> str: - if user := await GroupInfoUser.get_or_none(user_qq=user_qq, group_id=group_id): + if user := await GroupInfoUser.get_or_none(user_id=str(user_qq), group_id=str(group_id)): result = "" result += "昵称:" + user.user_name + "\n" result += "加群时间:" + str(user.user_join_time.date()) diff --git a/plugins/open_cases/open_cases_c.py b/plugins/open_cases/open_cases_c.py index fe0f477d..b3bba8fe 100755 --- a/plugins/open_cases/open_cases_c.py +++ b/plugins/open_cases/open_cases_c.py @@ -73,7 +73,7 @@ async def get_user_max_count(user_qq: int, group_id: int) -> int: Returns: int: 最大开箱次数 """ - user, _ = await SignGroupUser.get_or_create(user_qq=user_qq, group_id=group_id) + user, _ = await SignGroupUser.get_or_create(user_id=str(user_qq), group_id=str(group_id)) impression = int(user.impression) initial_open_case_count = Config.get_config("open_cases", "INITIAL_OPEN_CASE_COUNT") each_impression_add_count = Config.get_config( diff --git a/plugins/russian/__init__.py b/plugins/russian/__init__.py index ff8f5bc2..bb6244c7 100755 --- a/plugins/russian/__init__.py +++ b/plugins/russian/__init__.py @@ -160,7 +160,7 @@ async def _(event: GroupMessageEvent): if rs_player[event.group_id]["at"] == event.user_id: at_player_name = ( await GroupInfoUser.get_or_none( - user_qq=event.user_id, group_id=event.group_id + user_id=str(event.user_id), group_id=str(event.group_id) ) ).user_name await accept.send( diff --git a/plugins/send_setu_/send_setu/__init__.py b/plugins/send_setu_/send_setu/__init__.py index ae2e0b82..b08cf58c 100755 --- a/plugins/send_setu_/send_setu/__init__.py +++ b/plugins/send_setu_/send_setu/__init__.py @@ -172,7 +172,7 @@ async def _( msg = arg.extract_plain_text().strip() if isinstance(event, GroupMessageEvent): user, _ = await SignGroupUser.get_or_create( - user_qq=event.user_id, group_id=event.group_id + user_id=str(event.user_id), group_id=str(event.group_id) ) impression = user.impression if luox := get_luoxiang(impression): @@ -232,7 +232,7 @@ num_key = { async def _(bot: Bot, event: MessageEvent, reg_group: Tuple[Any, ...] = RegexGroup()): if isinstance(event, GroupMessageEvent): user, _ = await SignGroupUser.get_or_create( - user_qq=event.user_id, group_id=event.group_id + user_id=str(event.user_id), group_id=str(event.group_id) ) impression = user.impression if luox := get_luoxiang(impression): diff --git a/plugins/sign_in/goods_register.py b/plugins/sign_in/goods_register.py index 748400c3..e8cf9e5a 100644 --- a/plugins/sign_in/goods_register.py +++ b/plugins/sign_in/goods_register.py @@ -31,7 +31,7 @@ async def _(): **{"好感度双倍加持卡Ⅰ_prob": 0.1, "好感度双倍加持卡Ⅱ_prob": 0.2, "好感度双倍加持卡Ⅲ_prob": 0.3}, ) async def sign_card(user_id: int, group_id: int, prob: float): - user, _ = await SignGroupUser.get_or_create(user_qq=user_id, group_id=group_id) + user, _ = await SignGroupUser.get_or_create(user_id=str(user_id), group_id=str(group_id)) user.add_probability = prob await user.save(update_fields=["add_probability"]) diff --git a/plugins/sign_in/group_user_checkin.py b/plugins/sign_in/group_user_checkin.py index 596ff1ec..95ade971 100755 --- a/plugins/sign_in/group_user_checkin.py +++ b/plugins/sign_in/group_user_checkin.py @@ -28,7 +28,7 @@ async def group_user_check_in( "Returns string describing the result of checking in" present = datetime.now() # 取得相应用户 - user, is_create = await SignGroupUser.get_or_create(user_qq=user_qq, group_id=group) + user, is_create = await SignGroupUser.get_or_create(user_id=str(user_qq), group_id=str(group)) # 如果同一天签到过,特殊处理 if not is_create and ( user.checkin_time_last.date() >= present.date() @@ -49,7 +49,7 @@ async def check_in_all(nickname: str, user_qq: int): :param user_qq: 用户qq """ present = datetime.now() - for u in await SignGroupUser.filter(user_qq=user_qq).all(): + for u in await SignGroupUser.filter(user_id=str(user_qq)).all(): group = u.group_id if not ( u.checkin_time_last.date() >= present.date() @@ -62,7 +62,7 @@ async def check_in_all(nickname: str, user_qq: int): async def _handle_check_in( nickname: str, user_qq: int, group: int, present: datetime ) -> MessageSegment: - user, _ = await SignGroupUser.get_or_create(user_qq=user_qq, group_id=group) + user, _ = await SignGroupUser.get_or_create(user_id=str(user_qq), group_id=str(group)) impression_added = (secrets.randbelow(99) + 1) / 100 critx2 = random.random() add_probability = float(user.add_probability) @@ -83,7 +83,7 @@ async def _handle_check_in( gift += " + 1" logger.info( - f"(USER {user.user_qq}, GROUP {user.group_id})" + f"(USER {user.user_id}, GROUP {user.group_id})" f" CHECKED IN successfully. score: {user.impression:.2f} " f"(+{impression_added:.2f}).获取金币:{gold + gift if gift == 'gold' else gold}" ) @@ -95,7 +95,7 @@ async def _handle_check_in( async def group_user_check(nickname: str, user_qq: int, group: int) -> MessageSegment: # heuristic: if users find they have never checked in they are probable to check in - user, _ = await SignGroupUser.get_or_create(user_qq=user_qq, group_id=group) + user, _ = await SignGroupUser.get_or_create(user_id=str(user_qq), group_id=str(group)) gold = await BagUser.get_gold(user_qq, group) return await get_card(user, nickname, None, gold, "", is_card_view=True) @@ -171,7 +171,7 @@ async def _pst(users: list, impressions: list, groups: list): impressions.pop(index) users.pop(index) groups.pop(index) - if user_ := await GroupInfoUser.get_or_none(user_qq=user, group_id=group): + if user_ := await GroupInfoUser.get_or_none(user_id=str(user), group_id=str(group)): user_name = user_.user_name else: user_name = f"我名字呢?" diff --git a/plugins/sign_in/utils.py b/plugins/sign_in/utils.py index 4d47efd5..14b7920e 100755 --- a/plugins/sign_in/utils.py +++ b/plugins/sign_in/utils.py @@ -35,10 +35,10 @@ driver: Driver = nonebot.get_driver() async def init_image(): SIGN_RESOURCE_PATH.mkdir(parents=True, exist_ok=True) SIGN_TODAY_CARD_PATH.mkdir(exist_ok=True, parents=True) - if not await GroupInfoUser.get_or_none(user_qq=114514): + if not await GroupInfoUser.get_or_none(user_id="A_nmi_114514"): await GroupInfoUser.create( - user_qq=114514, - group_id=114514, + user_id="A_nmi_114514", + group_id="A_nmi_114514", user_name="", uid=0, ) @@ -55,7 +55,7 @@ async def get_card( is_double: bool = False, is_card_view: bool = False, ) -> MessageSegment: - user_id = user.user_qq + user_id = user.user_id date = datetime.now().date() _type = "view" if is_card_view else "sign" card_file = ( @@ -83,7 +83,7 @@ async def get_card( ) is_card_view = True ava = BytesIO(await get_user_avatar(user_id)) - uid = await GroupInfoUser.get_group_member_uid(user.user_qq, user.group_id) + uid = await GroupInfoUser.get_group_member_uid(user.user_id, user.group_id) impression_list = None if is_card_view: _, impression_list, _ = await SignGroupUser.get_all_impression( @@ -109,7 +109,7 @@ async def get_card( def _generate_card( user: "SignGroupUser", nickname: str, - user_id: int, + user_id: str, impression: Optional[float], gold: Optional[int], gift: str, diff --git a/plugins/statistics/statistics_handle.py b/plugins/statistics/statistics_handle.py index df151536..706ff10c 100755 --- a/plugins/statistics/statistics_handle.py +++ b/plugins/statistics/statistics_handle.py @@ -162,8 +162,8 @@ async def _(bot: Bot, event: MessageEvent, cmd: Tuple[str, ...] = Command(), arg day_index = data["day_index"] data = data[arg][key] if _type == "group": - group = await GroupInfo.filter(group_id=event.group_id).first() - name = name.group_name if group else str(event.group_id) + group = await GroupInfo.filter(group_id=str(event.group_id)).first() + name = group if group else str(event.group_id) else: name = event.sender.card or event.sender.nickname img = await generate_statistics_img(data, arg, name, plugin, day_index) diff --git a/plugins/web_ui/api/request.py b/plugins/web_ui/api/request.py index 809a11cf..d68583ed 100644 --- a/plugins/web_ui/api/request.py +++ b/plugins/web_ui/api/request.py @@ -56,12 +56,12 @@ async def _(parma: HandleRequest) -> Result: if parma.type == "group": if rid := requests_manager.get_group_id(parma.id): # await GroupInfo.update_or_create(defaults={"group_flag": 1}, ) - if group := await GroupInfo.get_or_none(group_id=rid): + if group := await GroupInfo.get_or_none(group_id=str(rid)): await group.update_or_create(group_flag=1) else: group_info = await bot.get_group_info(group_id=rid) await GroupInfo.update_or_create( - group_id=group_info["group_id"], + group_id=str(group_info["group_id"]), defaults={ "group_name": group_info["group_name"], "max_member_count": group_info["max_member_count"], diff --git a/utils/data_utils.py b/utils/data_utils.py index 1fcc0a9d..842ec22a 100755 --- a/utils/data_utils.py +++ b/utils/data_utils.py @@ -32,7 +32,7 @@ async def init_rank( all_user_id.remove(max_user_id) all_user_data.remove(_max) if user := await GroupInfoUser.get_or_none( - user_qq=max_user_id, group_id=group_id + user_qq=str(max_user_id), group_id=str(group_id) ): user_name = user.user_name else: diff --git a/utils/depends/__init__.py b/utils/depends/__init__.py index d1ccb88e..67e66f78 100644 --- a/utils/depends/__init__.py +++ b/utils/depends/__init__.py @@ -75,8 +75,8 @@ def CostGold(gold: int): await matcher.finish(at(event.user_id) + f"金币不足..该功能需要{gold}金币..") await BagUser.spend_gold(event.user_id, event.group_id, gold) await UserShopGoldLog.create( - user_qq=event.user_id, - group_id=event.group_id, + user_qq=str(event.user_id), + group_id=str(event.group_id), type=2, name=matcher.plugin_name, num=1, From 5f9748582dd3c74cf5d8ed584b55af014d2de3d5 Mon Sep 17 00:00:00 2001 From: yajiwa <839790708@qq.com> Date: Sat, 15 Apr 2023 13:55:26 +0800 Subject: [PATCH 4/4] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E5=91=BD=E4=BB=A4=E6=97=A5=E5=BF=97=E8=BF=87=E9=95=BF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- basic_plugins/help/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/basic_plugins/help/__init__.py b/basic_plugins/help/__init__.py index 3e2a9a2c..d804cf08 100755 --- a/basic_plugins/help/__init__.py +++ b/basic_plugins/help/__init__.py @@ -42,9 +42,9 @@ async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()): if str(event.user_id) in bot.config.superusers: is_super = True msg = msg.replace("-super", "").strip() - msg = get_plugin_help(msg, is_super) - if msg: - await simple_help.send(image(b64=msg)) + img_msg = get_plugin_help(msg, is_super) + if img_msg: + await simple_help.send(image(b64=img_msg)) else: await simple_help.send("没有此功能的帮助信息...") logger.info(