예제 #1
0
 def permission_set(self,
                    notice: int = 0,
                    command: int = 0,
                    level: int = 0) -> DBResult:
     session = NBdb().get_session()
     # 检查群组是否在表中, 存在则直接更新状态
     try:
         exist_group = session.query(Group).filter(
             Group.group_id == self.group_id).one()
         exist_group.notice_permissions = notice
         exist_group.command_permissions = command
         exist_group.permission_level = level
         exist_group.updated_at = datetime.now()
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #2
0
 def get_info(self) -> DBResult:
     session = NBdb().get_session()
     try:
         # 已存在则更新
         exist_box = session.query(EmailBox).filter(
             EmailBox.address == self.address).one()
         server_host = exist_box.server_host
         port = exist_box.port
         password = exist_box.password
         res_dict = {
             'server_host': server_host,
             'port': port,
             'password': password
         }
         result = DBResult(error=False, info='Success', result=res_dict)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result={})
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result={})
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result={})
     finally:
         session.close()
     return result
예제 #3
0
 def permission_info(self) -> DBResult:
     session = NBdb().get_session()
     res = {}
     # 检查群组是否在表中, 存在则直接更新状态
     try:
         notice, command, level = session.query(Group.notice_permissions,
                                                Group.command_permissions,
                                                Group.permission_level).\
             filter(Group.group_id == self.group_id).one()
         res['notice'] = notice
         res['command'] = command
         res['level'] = level
         result = DBResult(error=False, info='Success', result=res)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=res)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=res)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=res)
     finally:
         session.close()
     return result
예제 #4
0
 def add_global_cool_down_event(cls,
                                stop_at: datetime,
                                description: str = None) -> DBResult:
     session = NBdb().get_session()
     try:
         exist_event = session.query(CoolDownEvent).filter(
             CoolDownEvent.event_type == 'global').one()
         exist_event.stop_at = stop_at
         exist_event.description = description
         exist_event.updated_at = datetime.now()
         session.commit()
         result = DBResult(error=False, info='Success upgraded', result=0)
     except NoResultFound:
         try:
             new_event = CoolDownEvent(event_type='global',
                                       stop_at=stop_at,
                                       description=description,
                                       created_at=datetime.now())
             session.add(new_event)
             session.commit()
             result = DBResult(error=False, info='Success added', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #5
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         # 清空群成员表中该用户
         for exist_user in session.query(UserGroup).filter(
                 UserGroup.user_id == self.id().result).all():
             session.delete(exist_user)
         # 删除技能
         self.skill_clear()
         # 删除状态和假期
         self.status_del()
         exist_user = session.query(User).filter(User.qq == self.qq).one()
         session.delete(exist_user)
         session.commit()
         result = DBResult(error=False, info='Success', result=0)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #6
0
 def list(cls, auth_type: str, auth_id: int) -> DBResult:
     session = NBdb().get_session()
     try:
         if auth_type == 'user':
             auth_node_list = session.query(AuthUser.auth_node, AuthUser.allow_tag, AuthUser.deny_tag). \
                 join(User). \
                 filter(AuthUser.user_id == User.id). \
                 filter(User.qq == auth_id).all()
             result = DBResult(error=False,
                               info='Success',
                               result=auth_node_list)
         elif auth_type == 'group':
             auth_node_list = session.query(AuthGroup.auth_node, AuthGroup.allow_tag, AuthGroup.deny_tag). \
                 join(Group). \
                 filter(AuthGroup.group_id == Group.id). \
                 filter(Group.group_id == auth_id).all()
             result = DBResult(error=False,
                               info='Success',
                               result=auth_node_list)
         else:
             result = DBResult(error=True,
                               info='Auth type error',
                               result=-1)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #7
0
 def idle_skill_list(self, skill: DBSkill) -> DBResult:
     session = NBdb().get_session()
     res = []
     # 查询这这个技能有那些人会
     try:
         for user_id, nickname in session.query(User.id, UserGroup.user_group_nickname). \
                 join(UserSkill).join(Skill).join(UserGroup).join(Group). \
                 filter(User.id == UserSkill.user_id). \
                 filter(UserSkill.skill_id == Skill.id). \
                 filter(User.id == UserGroup.user_id). \
                 filter(UserGroup.group_id == Group.id). \
                 filter(Skill.name == skill.name). \
                 filter(Group.group_id == self.group_id). \
                 all():
             # 查这个人是不是空闲
             user_status = session.query(Vocation.status).filter(
                 Vocation.user_id == user_id).one()[0]
             # 如果空闲则把这个人昵称放进结果列表里面
             if user_status == 0:
                 res.append(nickname)
         result = DBResult(error=False, info='Success', result=res)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=res)
     finally:
         session.close()
     return result
예제 #8
0
 def member_del(self, user: DBUser) -> DBResult:
     if self.exist() and user.exist():
         session = NBdb().get_session()
         # 查询成员-群组表中用户-群关系
         try:
             # 用户-群关系已存在, 删除
             exist_user = session.query(UserGroup). \
                 filter(UserGroup.user_id == user.id().result). \
                 filter(UserGroup.group_id == self.id().result).one()
             session.delete(exist_user)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', result=-1)
         except MultipleResultsFound:
             result = DBResult(error=True,
                               info='MultipleResultsFound',
                               result=-1)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
         finally:
             session.close()
     else:
         result = DBResult(error=True,
                           info='Group or user not exist',
                           result=-1)
     return result
예제 #9
0
 def skill_del(self, skill: DBSkill) -> DBResult:
     if self.exist() and skill.exist():
         session = NBdb().get_session()
         # 查询用户已有技能
         try:
             # 已有技能, 删除
             exist_skill = session.query(UserSkill). \
                 filter(UserSkill.skill_id == skill.id().result). \
                 filter(UserSkill.user_id == self.id().result).one()
             session.delete(exist_skill)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', result=-1)
         except MultipleResultsFound:
             result = DBResult(error=True,
                               info='MultipleResultsFound',
                               result=-1)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
         finally:
             session.close()
     else:
         result = DBResult(error=True,
                           info='Skill or user not exist',
                           result=-1)
     return result
예제 #10
0
 def idle_member_list(self) -> DBResult:
     session = NBdb().get_session()
     res = []
     # 查询该群组中所有没有假的人
     try:
         for user_id, nickname in session.query(User.id, UserGroup.user_group_nickname). \
                 join(Vocation).join(UserGroup).join(Group). \
                 filter(User.id == Vocation.user_id). \
                 filter(User.id == UserGroup.user_id). \
                 filter(UserGroup.group_id == Group.id). \
                 filter(Vocation.status == 0). \
                 filter(Group.group_id == self.group_id). \
                 all():
             res_skills = session.query(Skill.name). \
                 join(UserSkill).join(User). \
                 filter(Skill.id == UserSkill.skill_id). \
                 filter(UserSkill.user_id == User.id). \
                 filter(User.id == user_id). \
                 all()
             user_skill = ''
             if res_skills:
                 for skill in res_skills:
                     user_skill += f'/{skill[0]}'
             else:
                 user_skill = '/暂无技能'
             res.append([nickname, user_skill])
         result = DBResult(error=False, info='Success', result=res)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=res)
     finally:
         session.close()
     return result
예제 #11
0
 def subscription_del(self, sub: DBSubscription) -> DBResult:
     if self.exist() and sub.exist():
         session = NBdb().get_session()
         # 查询成员-群组表中用户-群关系
         try:
             # 用户-群关系已存在, 删除
             exist_subscription = session.query(GroupSub). \
                 filter(GroupSub.group_id == self.id().result). \
                 filter(GroupSub.sub_id == sub.id().result).one()
             session.delete(exist_subscription)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', result=-1)
         except MultipleResultsFound:
             result = DBResult(error=True,
                               info='MultipleResultsFound',
                               result=-1)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
         finally:
             session.close()
     else:
         result = DBResult(error=True,
                           info='Group or subscription not exist',
                           result=-1)
     return result
예제 #12
0
 def mailbox_del(self, mailbox: DBEmailBox) -> DBResult:
     if self.exist() and mailbox.exist():
         session = NBdb().get_session()
         try:
             # 群邮箱已存在, 更新信息
             exist_mailbox = session.query(GroupEmailBox). \
                 filter(GroupEmailBox.group_id == self.id().result). \
                 filter(GroupEmailBox.email_box_id == mailbox.id().result).one()
             session.delete(exist_mailbox)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         except NoResultFound:
             result = DBResult(error=True, info='NoResultFound', result=-1)
         except MultipleResultsFound:
             result = DBResult(error=True,
                               info='MultipleResultsFound',
                               result=-1)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
         finally:
             session.close()
     else:
         result = DBResult(error=True,
                           info='Group or mailbox not exist',
                           result=-1)
     return result
예제 #13
0
 def add(self, description: str) -> DBResult:
     session = NBdb().get_session()
     try:
         # 已存在则更新描述
         exist_skill = session.query(Skill).filter(
             Skill.name == self.name).one()
         exist_skill.description = description
         exist_skill.updated_at = datetime.now()
         session.commit()
         result = DBResult(error=False, info='Success upgraded', result=0)
     except NoResultFound:
         # 不存在则添加新技能
         try:
             new_skill = Skill(name=self.name,
                               description=description,
                               created_at=datetime.now())
             session.add(new_skill)
             session.commit()
             result = DBResult(error=False, info='Success added', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #14
0
 def add(self, up_name: str, live_info: str = None) -> DBResult:
     session = NBdb().get_session()
     try:
         # 已存在则更新描述
         exist_subscription = session.query(Subscription).filter(Subscription.sub_type == self.sub_type).\
             filter(Subscription.sub_id == self.sub_id).one()
         exist_subscription.up_name = up_name
         exist_subscription.live_info = live_info
         exist_subscription.updated_at = datetime.now()
         session.commit()
         result = DBResult(error=False, info='Success upgraded', result=0)
     except NoResultFound:
         # 不存在则添加新订阅信息
         try:
             new_subscription = Subscription(sub_type=self.sub_type,
                                             sub_id=self.sub_id,
                                             up_name=up_name,
                                             live_info=live_info,
                                             created_at=datetime.now())
             session.add(new_subscription)
             session.commit()
             result = DBResult(error=False, info='Success added', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #15
0
 def add(self, name: str) -> DBResult:
     session = NBdb().get_session()
     try:
         # qq群已存在则更新群名称
         exist_group = session.query(Group).filter(
             Group.group_id == self.group_id).one()
         exist_group.name = name
         exist_group.updated_at = datetime.now()
         session.commit()
         result = DBResult(error=False, info='Success upgraded', result=0)
     except NoResultFound:
         # 不存在则添加新群组
         try:
             new_group = Group(group_id=self.group_id,
                               name=name,
                               notice_permissions=0,
                               command_permissions=0,
                               permission_level=0,
                               created_at=datetime.now())
             session.add(new_group)
             session.commit()
             result = DBResult(error=False, info='Success added', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #16
0
 def delete(self) -> DBResult:
     session = NBdb().get_session()
     try:
         if self.auth_type == 'user':
             auth = session.query(AuthUser).join(User). \
                 filter(AuthUser.user_id == User.id). \
                 filter(User.qq == self.auth_id). \
                 filter(AuthUser.auth_node == self.auth_node).one()
             session.delete(auth)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         elif self.auth_type == 'group':
             auth = session.query(AuthGroup).join(Group). \
                 filter(AuthGroup.group_id == Group.id). \
                 filter(Group.group_id == self.auth_id). \
                 filter(AuthGroup.auth_node == self.auth_node).one()
             session.delete(auth)
             session.commit()
             result = DBResult(error=False, info='Success', result=0)
         else:
             result = DBResult(error=True,
                               info='Auth type error',
                               result=-1)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #17
0
 def add(self) -> DBResult:
     session = NBdb().get_session()
     try:
         exist_pixivtag = session.query(PixivTag).filter(
             PixivTag.tagname == self.tagname).one()
         result = DBResult(error=False, info='pixivtag exist', result=0)
     except NoResultFound:
         try:
             # 动态表中添加新动态
             new_tag = PixivTag(tagname=self.tagname,
                                created_at=datetime.now())
             session.add(new_tag)
             session.commit()
             result = DBResult(error=False, info='Success added', result=0)
         except Exception as e:
             result = DBResult(error=True, info=repr(e), result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True,
                           info='MultipleResultsFound',
                           result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #18
0
 def add(self, dynamic_type: int, content: str) -> DBResult:
     session = NBdb().get_session()
     try:
         exist_dynamic = session.query(Bilidynamic).\
             filter(Bilidynamic.uid == self.uid).\
             filter(Bilidynamic.dynamic_id == self.dynamic_id).one()
         exist_dynamic.content += f'\nupdate: {datetime.now()}\n{content}'
         exist_dynamic.updated_at = datetime.now()
         session.commit()
         result = DBResult(error=False, info='Success upgrade', result=0)
     except NoResultFound:
         try:
             # 动态表中添加新动态
             new_dynamic = Bilidynamic(uid=self.uid, dynamic_id=self.dynamic_id, dynamic_type=dynamic_type,
                                       content=content, created_at=datetime.now())
             session.add(new_dynamic)
             session.commit()
             result = DBResult(error=False, info='Success added', result=0)
         except Exception as e:
             session.rollback()
             result = DBResult(error=True, info=repr(e), result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True, info='MultipleResultsFound', result=-1)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #19
0
 def add(self,
         date: str,
         header: str,
         sender: str,
         to: str = None,
         body: str = None,
         html: str = None) -> DBResult:
     session = NBdb().get_session()
     try:
         new_email = Email(mail_hash=self.mail_hash,
                           date=date,
                           header=header,
                           sender=sender,
                           to=to,
                           body=body,
                           html=html,
                           created_at=datetime.now())
         session.add(new_email)
         session.commit()
         result = DBResult(error=False, info='Success added', result=0)
     except Exception as e:
         session.rollback()
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #20
0
 def list(cls) -> DBResult:
     session = NBdb().get_session()
     try:
         res = [x[0] for x in session.query(EmailBox.address).all()]
         result = DBResult(error=False, info='Success', result=res)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=[])
     finally:
         session.close()
     return result
예제 #21
0
 def permission_level(self) -> DBResult:
     session = NBdb().get_session()
     try:
         res = session.query(Group.permission_level).filter(
             Group.group_id == self.group_id).one()
         result = DBResult(error=False, info='Success', result=res[0])
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #22
0
 def status(self) -> DBResult:
     session = NBdb().get_session()
     try:
         res = session.query(Vocation.status).filter(
             Vocation.user_id == self.id().result).one()
         result = DBResult(error=False, info='Success', result=res[0])
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #23
0
 def mailbox_list(self) -> DBResult:
     session = NBdb().get_session()
     if self.exist():
         mailbox_list = session.query(EmailBox.address).join(GroupEmailBox).\
                 filter(EmailBox.id == GroupEmailBox.email_box_id). \
                 filter(GroupEmailBox.group_id == self.id().result).all()
         res = [x[0] for x in mailbox_list]
         result = DBResult(error=False, info='Success', result=res)
     else:
         result = DBResult(error=True, info='Group not exist', result=[])
     session.close()
     return result
예제 #24
0
 def member_list(self) -> DBResult:
     session = NBdb().get_session()
     res = []
     if self.exist():
         for item in session.query(User.qq, UserGroup.user_group_nickname).join(UserGroup). \
                 filter(User.id == UserGroup.user_id). \
                 filter(UserGroup.group_id == self.id().result).all():
             res.append(item)
         result = DBResult(error=False, info='Success', result=res)
     else:
         result = DBResult(error=True, info='Group not exist', result=res)
     session.close()
     return result
예제 #25
0
 def vocation_status(self) -> DBResult:
     session = NBdb().get_session()
     try:
         status, stop_time = session.query(Vocation.status, Vocation.stop_at). \
             filter(Vocation.user_id == self.id().result).one()
         result = DBResult(error=False,
                           info='Success',
                           result=[status, stop_time])
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=[-1, None])
     finally:
         session.close()
     return result
예제 #26
0
 def skill_list(self) -> DBResult:
     session = NBdb().get_session()
     res = []
     if self.exist():
         for item in session.query(Skill.name, UserSkill.skill_level).join(UserSkill). \
                 filter(Skill.id == UserSkill.skill_id). \
                 filter(UserSkill.user_id == self.id().result).all():
             res.append(item)
         result = DBResult(error=False, info='Success', result=res)
     else:
         result = DBResult(error=True, info='User not exist', result=res)
     session.close()
     return result
예제 #27
0
 def permission_command(self) -> DBResult:
     session = NBdb().get_session()
     try:
         res = session.query(Group.command_permissions).filter(
             Group.group_id == self.group_id).one()
         if res and res[0] == 1:
             result = DBResult(error=False, info='Success', result=1)
         else:
             result = DBResult(error=False, info='Success', result=0)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #28
0
 def id(self) -> DBResult:
     session = NBdb().get_session()
     try:
         pixiv_table_id = session.query(Pixiv.id).filter(Pixiv.pid == self.pid).one()[0]
         result = DBResult(error=False, info='Success', result=pixiv_table_id)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True, info='MultipleResultsFound', result=-1)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result
예제 #29
0
 def subscription_list(self) -> DBResult:
     session = NBdb().get_session()
     res = []
     if self.exist():
         for item in session.query(Subscription.sub_type, Subscription.sub_id, Subscription.up_name).\
                 join(GroupSub).\
                 filter(Subscription.id == GroupSub.sub_id). \
                 filter(GroupSub.group_id == self.id().result).all():
             res.append(item)
         result = DBResult(error=False, info='Success', result=res)
     else:
         result = DBResult(error=True, info='Group not exist', result=res)
     session.close()
     return result
예제 #30
0
 def id(self) -> DBResult:
     session = NBdb().get_session()
     try:
         bilidynamic_table_id = session.query(Bilidynamic.id).\
             filter(Bilidynamic.uid == self.uid).\
             filter(Bilidynamic.dynamic_id == self.dynamic_id).one()[0]
         result = DBResult(error=False, info='Success', result=bilidynamic_table_id)
     except NoResultFound:
         result = DBResult(error=True, info='NoResultFound', result=-1)
     except MultipleResultsFound:
         result = DBResult(error=True, info='MultipleResultsFound', result=-1)
     except Exception as e:
         result = DBResult(error=True, info=repr(e), result=-1)
     finally:
         session.close()
     return result