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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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