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
|