Пример #1
0
    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, '建立活动成功')
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
    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, '加群成功')
Пример #9
0
    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)
Пример #10
0
def check_group_spec(spec: dict) -> Result[dict]:
    return Result(spec, "")