def reg_activity(cls, group_id: int, act_name: str, act_info: str, act_start_time: datetime, act_end_time: datetime, by: User) -> Result[bool]: with RxTable(UserGroup) as ug_dao: if not ug_dao.where(UserGroup.user_cls.in_( [Role.leader, Role.admin]), user_id=by.id, group_id=group_id).first(): return Result(False, '操作用户权限不足') with RxTable(Activity) as act_dao: if act_dao.where(name=act_name).first(): return Result(False, '活动重复') act = act_dao.add(name=act_name, info=act_info) with RxTable(GroupActivity) as ga_dao: ga_dao.add(group_id=group_id, activity_id=act.id, start=act_start_time, end=act_end_time, is_active=0) if not act_dao.is_succeed: return Result(False, '创建活动失败,不再相信爱') return Result(True, '建立活动成功')
def delete_with_relations(cls, user: User) -> Result[Dict[str, int]]: """ 删除用户并删除其关系。 """ with RxRecord(user) as user_rx: res = user_rx.delete() if user_rx.is_succeed: return Result(res, user_rx.msg) return Result(None, user_rx.msg)
def delete(cls, group_id: int, by: User) -> Result[bool]: with RxTable(UserGroup) as ug_dao: ug = ug_dao.where(group_id=group_id, user_id=by.id).first() if not ug: return Result(False, '当前组已不存在') if ug.user_cls != Role.leader: return Result(False, '请技术宅不要作弊,诅咒你补给全保底,副本零掉落:)') before_delete(group_id, trigger_user=by) db.delete_group(ug.group) return Result(ug_dao.is_succeed, ug_dao.msg)
def change_role(cls, group_id: int, other_user_id: int, new_role: Role, by: User) -> Result[bool]: """加减管理员""" with RxTable(UserGroup) as ug_dao: ug = ug_dao.where(group_id=group_id, user_id=by.id).first() if ug.user_cls != Role.leader: return Result(False, "操作用户权限不足") before_change_role(group_id, trigger_user=by) suc = ug_dao.where(group_id=group_id, user_id=other_user_id).mutate(user_cls=new_role) return Result(ug_dao.is_succeed and suc, ug_dao.msg)
def leave_group(cls, group_id: int, target_id: int, by: User) -> Result[bool]: """退群""" with RxTable(UserGroup) as ug_dao: ug = ug_dao.where(user_id=target_id, group_id=group_id).first() if not ug: return Result(False, f'{by.nickname}不在此群') if ug.user_cls == Role.leader: before_delete(group_id, trigger_user=by) db.delete_group(ug.group) RxRecord(ug).delete() return Result(ug_dao.is_succeed, ug_dao.msg)
def mutate_role(cls, for_user: User, entity: EntityUnion, role: Role) -> Result[bool]: """修改用户的角色""" with RxRecord(for_user) as user_rx: res: bool = user_rx.mutate_relation_between(entity, user_cls=role) return Result(res and user_rx.is_succeed, user_rx.msg)
def modify_info(cls, group_id: int, group_spec: dict, by: User) -> Result[bool]: checked = check_group_spec(group_spec) if not checked.Object: return Result(False, "群信息不合法") with RxTable(Group) as group_dao: ug = RxTable(UserGroup).where(user_id=by.id, group_id=group_id).first() if not ug: return Result(False, '群里没这个人') if ug.user_cls not in (Role.leader, Role.admin): return Result(False, '操作用户权限不足') group_dao.where(id=group_id).mutate(**checked.Object) return Result(group_dao.is_succeed, group_dao.msg)
def apply_for_join_in(cls, group_id: int, apply_info: str, by: User) -> Result[bool]: """ 申请加群 """ with RxTable(UserGroup) as ug_dao: if ug_dao.where(user_id=by.id, group_id=group_id).first(): return Result(False, '请勿重复加群') rx_msg.Group.push_msg_list(group_id, title=f'{by.nickname}的申请加群', content=apply_info, operating_user_id=by.id, operating_username=by.nickname, channel_branch=rx_msg.Group.Channel.ApplyIn) return Result(True, '加群成功')
def invite_member(cls, group_id: int, invited_user_id: int, by: User) -> Result[bool]: """ 邀请用户加群 """ with RxTable(UserGroup) as ug_dao: if not ug_dao.where(UserGroup.user_cls.in_( [Role.leader, Role.admin]), user_id=by.id, group_id=group_id).first(): return Result(False, '操作用户权限不足') if ug_dao.where(user_id=invited_user_id, group_id=group_id).first(): return Result(True, "已加群") ug_dao.add(group_id=group_id, user_id=invited_user_id) return Result(ug_dao.is_succeed, ug_dao.msg)
def check_group_spec(spec: dict) -> Result[dict]: return Result(spec, "")