def getAllStatus(type: StatusType):
     query = RPGStatus.select().where(RPGStatus.type == type.value)
     result = []
     if query.exists():
         for status in query.iterator():
             result.append(status)
     return result
 def reviveComaStatus(reviveMemberCount: int = 5):
     query = RPGStatus.select().where(
         RPGStatus.type == StatusType.COMA.value, )
     result = []
     if query.exists():
         count = RPGStatus.select().where(
             RPGStatus.type == StatusType.COMA.value, ).count()
         if count >= reviveMemberCount:
             status: RPGStatus
             for status in query.iterator():
                 result.append(
                     StatusUpdate(status.member_id, status.guild_id,
                                  status.type))
                 StatusUtil._cleanUpStatus(status)
                 status.delete_instance()
     return result
 def removeAlertStatus(member_id: int):
     query = RPGStatus.select().where(
         RPGStatus.member_id == member_id,
         RPGStatus.type == StatusType.ALERTED.value)
     if query.exists():
         status: RPGStatus
         for status in query.iterator():
             status.delete_instance()
 def createComaStatus(guild_id: int, user: User, hp_max: int):
     buff = Buff(BuffType.NONE, hp_max, -1)
     return RPGStatus.create(member_id=user.id,
                             guild_id=guild_id,
                             type=StatusType.COMA.value,
                             buff=buff,
                             expire_time=datetime.datetime.now() +
                             datetime.timedelta(seconds=10))
 def getStatus(member_id: int, guild_id: int, type: StatusType):
     query = RPGStatus.select().where(
         RPGStatus.member_id == member_id,
         RPGStatus.guild_id == guild_id,
         RPGStatus.type == type.value,
     )
     if query.exists():
         return query.get()
     return None
 def createOrUpdateAlertStatus(member_id: int, guild_id: int,
                               expire_seconds: int):
     buff = Buff(BuffType.NONE, 0, -1)
     query = RPGStatus.select().where(
         RPGStatus.member_id == member_id, RPGStatus.guild_id == guild_id,
         RPGStatus.type == StatusType.ALERTED.value)
     new_time = datetime.datetime.now() + datetime.timedelta(
         seconds=expire_seconds)
     if query.exists():
         status: RPGStatus = query.get()
         status.expire_time = new_time
         status.save()
     else:
         RPGStatus.create(member_id=member_id,
                          guild_id=guild_id,
                          type=StatusType.ALERTED.value,
                          buff=buff,
                          expire_time=new_time)
 def createRestStatus(member_id: int, guild_id: int, max_hp: int,
                      expire_seconds: int):
     buff = Buff(BuffType.NONE, max_hp, -1)
     return RPGStatus.create(member_id=member_id,
                             guild_id=guild_id,
                             type=StatusType.REST.value,
                             buff=buff,
                             expire_time=datetime.datetime.now() +
                             datetime.timedelta(seconds=expire_seconds))
 def applyExpiredStatus():
     now = datetime.datetime.now()
     query = RPGStatus.select().where(
         RPGStatus.expire_time < now,
         RPGStatus.type == StatusType.REST.value)
     result = []
     if query.exists():
         status: RPGStatus
         for status in query.iterator():
             result.append(
                 StatusUpdate(status.member_id, status.guild_id,
                              status.type))
             StatusUtil._cleanUpStatus(status)
             status.delete_instance()
     return result
 def removeAllStatus(member_id: int):
     query = RPGStatus.select().where(RPGStatus.member_id == member_id)
     if query.exists():
         status: RPGStatus
         for status in query.iterator():
             status.delete_instance()