zhenxun_bot/models/group_info.py

112 lines
3.4 KiB
Python
Raw Normal View History

2021-05-20 18:37:51 +08:00
from services.db_context import db
2021-11-04 16:11:50 +08:00
from services.log import logger
from typing import List, Optional
2021-05-20 18:37:51 +08:00
class GroupInfo(db.Model):
2021-07-30 21:21:51 +08:00
__tablename__ = "group_info"
2021-05-20 18:37:51 +08:00
group_id = db.Column(db.BigInteger(), nullable=False, primary_key=True)
group_name = db.Column(db.Unicode(), nullable=False, default="")
max_member_count = db.Column(db.Integer(), nullable=False, default=0)
member_count = db.Column(db.Integer(), nullable=False, default=0)
2021-11-04 16:11:50 +08:00
group_flag = db.Column(db.Integer(), nullable=False, default=0)
2021-05-20 18:37:51 +08:00
2021-07-30 21:21:51 +08:00
_idx1 = db.Index("group_info_idx1", "group_id", unique=True)
2021-05-20 18:37:51 +08:00
@classmethod
2021-07-30 21:21:51 +08:00
async def get_group_info(cls, group_id: int) -> "GroupInfo":
"""
说明
获取群信息
参数
:param group_id: 群号
"""
query = cls.query.where(cls.group_id == group_id)
2021-05-20 18:37:51 +08:00
return await query.gino.first()
@classmethod
2021-07-30 21:21:51 +08:00
async def add_group_info(
2021-11-04 16:11:50 +08:00
cls,
group_id: int,
group_name: str,
max_member_count: int,
member_count: int,
group_flag: Optional[int] = None,
2021-07-30 21:21:51 +08:00
) -> bool:
"""
说明
添加群信息
参数
:param group_id: 群号
:param group_name: 群名称
:param max_member_count: 群员最大数量
:param member_count: 群员数量
2021-11-04 16:11:50 +08:00
:param group_flag: 群认证0为未认证1为认证
2021-07-30 21:21:51 +08:00
"""
2021-05-20 18:37:51 +08:00
try:
2021-07-30 21:21:51 +08:00
group = (
await cls.query.where(cls.group_id == group_id)
.with_for_update()
.gino.first()
)
2021-05-20 18:37:51 +08:00
if group:
2021-11-04 16:11:50 +08:00
await group.update(
2021-05-20 18:37:51 +08:00
group_name=group_name,
max_member_count=max_member_count,
member_count=member_count,
).apply()
2021-11-04 16:11:50 +08:00
if group_flag is not None:
await group.update(group_flag=group_flag).apply()
2021-05-20 18:37:51 +08:00
else:
await cls.create(
group_id=group_id,
group_name=group_name,
max_member_count=max_member_count,
member_count=member_count,
2021-11-04 16:11:50 +08:00
group_flag=group_flag,
2021-05-20 18:37:51 +08:00
)
return True
2021-11-04 16:11:50 +08:00
except Exception as e:
logger.info(f"GroupInfo 调用 add_group_info 发生错误 {type(e)}{e}")
2021-05-20 18:37:51 +08:00
return False
@classmethod
2021-11-04 16:11:50 +08:00
async def delete_group_info(cls, group_id: int):
2021-07-30 21:21:51 +08:00
"""
说明
删除群信息
参数
:param group_id: 群号
"""
2021-11-04 16:11:50 +08:00
await cls.delete.where(cls.group_id == group_id).gino.status()
2021-05-20 18:37:51 +08:00
2021-07-30 21:21:51 +08:00
@classmethod
async def get_all_group(cls) -> List["GroupInfo"]:
"""
说明
获取所有群对象
"""
query = await cls.query.gino.all()
return query
2021-11-04 16:11:50 +08:00
@classmethod
async def set_group_flag(cls, group_id: int, group_flag: int) -> bool:
"""
设置群认证
:param group_id: 群号
:param group_flag: 群认证0为未认证1为认证
"""
group = (
await cls.query.where(cls.group_id == group_id)
.with_for_update()
.gino.first()
)
if group:
if group.group_flag != group_flag:
await group.update(
group_flag=group_flag,
).apply()
return True
return False