|  | @@ -19,7 +19,7 @@ def check_vote(db, vote_name, user_id):  # Check if user has already voted on th
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          row = cursor.fetchone()
 | 
	
		
			
				|  |  |          if row is None:
 | 
	
		
			
				|  |  | -            current_app.logger.warning(f'\"{vote_name}\" not found in vote table.')
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'\"{vote_name}\" not found in vote table.')
 | 
	
		
			
				|  |  |              return False
 | 
	
		
			
				|  |  |          if row[0] == user_id:
 | 
	
		
			
				|  |  |              return True
 | 
	
	
		
			
				|  | @@ -36,7 +36,7 @@ def add_to_vote(db, vote_name, user_id):  # Add a count to a vote
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          vote = cursor.fetchone()
 | 
	
		
			
				|  |  |          if vote is None:
 | 
	
		
			
				|  |  | -            current_app.logger.warning(f'{vote_name} not found in vote table.')
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'{vote_name} not found in vote table.')
 | 
	
		
			
				|  |  |              return False
 | 
	
		
			
				|  |  |          else:  # If vote exists, add a count
 | 
	
		
			
				|  |  |              db.execute(
 | 
	
	
		
			
				|  | @@ -80,7 +80,7 @@ def add_to_goal(db, user_id, reward_name, points_contributed):  # Add a contribu
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          row = cursor.fetchone()
 | 
	
		
			
				|  |  |          if row is None:
 | 
	
		
			
				|  |  | -            current_app.logger.warning(f'\"{reward_name}\" not found in goal table.')
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'\"{reward_name}\" not found in goal table.')
 | 
	
		
			
				|  |  |              return False
 | 
	
		
			
				|  |  |          progress, target = row
 | 
	
		
			
				|  |  |          if progress + points_contributed > target:
 | 
	
	
		
			
				|  | @@ -107,7 +107,7 @@ def goal_left(db, reward_name):
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          row = cursor.fetchone()
 | 
	
		
			
				|  |  |          if row is None:
 | 
	
		
			
				|  |  | -            current_app.logger.warning(f'{reward_name} not found in Goal table.')
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'{reward_name} not found in Goal table.')
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              progress, target = row
 | 
	
		
			
				|  |  |              left = target - progress
 | 
	
	
		
			
				|  | @@ -124,7 +124,7 @@ def goal_reached(db, reward_name):  # Set a goal as completed
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          row = cursor.fetchone()
 | 
	
		
			
				|  |  |          if row is None:
 | 
	
		
			
				|  |  | -            current_app.logger.warning(f'{reward_name} not found in goal table.')
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'{reward_name} not found in goal table.')
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              return row[0]
 | 
	
		
			
				|  |  |      except Error as grerror:
 | 
	
	
		
			
				|  | @@ -132,6 +132,60 @@ def goal_reached(db, reward_name):  # Set a goal as completed
 | 
	
		
			
				|  |  |          return False
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +def was_milestone_reached(db, reward_name):  # Check if a milestone was reached
 | 
	
		
			
				|  |  | +    try:
 | 
	
		
			
				|  |  | +        all_rewards = current_app.config['REWARDS']  # Get milestone numbers from REWARDS
 | 
	
		
			
				|  |  | +        milestones_info = all_rewards[reward_name]['milestones']
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        if milestones_info['milestone1'][1]:
 | 
	
		
			
				|  |  | +            ms1_goal = milestones_info['milestone1'][1]
 | 
	
		
			
				|  |  | +            ms1_reward = f'🚩 \"{milestones_info["milestone1"][0]}\"'
 | 
	
		
			
				|  |  | +        if milestones_info['milestone2'][1]:
 | 
	
		
			
				|  |  | +            ms2_goal = milestones_info['milestone2'][1]
 | 
	
		
			
				|  |  | +            ms2_reward = f'🚩🚩 \"{milestones_info["milestone2"][0]}\"'
 | 
	
		
			
				|  |  | +        if milestones_info['milestone3'][1]:
 | 
	
		
			
				|  |  | +            ms3_goal = milestones_info['milestone3'][1]
 | 
	
		
			
				|  |  | +            ms3_reward = f'🚩🚩🚩 \"{milestones_info["milestone3"][0]}\"'
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        cursor = db.execute(
 | 
	
		
			
				|  |  | +            "SELECT progress, milestones FROM goals WHERE name = ?",
 | 
	
		
			
				|  |  | +            (reward_name,)
 | 
	
		
			
				|  |  | +        )  # Get progress and milestones info from database
 | 
	
		
			
				|  |  | +        row = cursor.fetchone()
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        if row is None:
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'{reward_name} not found in Goal table.')
 | 
	
		
			
				|  |  | +        else:
 | 
	
		
			
				|  |  | +            progress = int(row['progress'])
 | 
	
		
			
				|  |  | +            milestones = int(row['milestones'])
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            if progress >= ms1_goal and progress < ms2_goal:
 | 
	
		
			
				|  |  | +                new_milestones = 1
 | 
	
		
			
				|  |  | +                ms_reward = ms1_reward
 | 
	
		
			
				|  |  | +            elif progress >= ms2_goal and progress < ms3_goal:
 | 
	
		
			
				|  |  | +                new_milestones = 2
 | 
	
		
			
				|  |  | +                ms_reward = ms2_reward
 | 
	
		
			
				|  |  | +            elif progress >= ms3_goal:
 | 
	
		
			
				|  |  | +                new_milestones = 3
 | 
	
		
			
				|  |  | +                ms_reward = ms3_reward
 | 
	
		
			
				|  |  | +            else:
 | 
	
		
			
				|  |  | +                new_milestones = 0
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +            if new_milestones > milestones:  # If we're passing a milestone, get the reward
 | 
	
		
			
				|  |  | +                cursor = db.execute(
 | 
	
		
			
				|  |  | +                    "UPDATE goals SET milestones = ? WHERE name = ?",
 | 
	
		
			
				|  |  | +                    (new_milestones, reward_name)
 | 
	
		
			
				|  |  | +                )
 | 
	
		
			
				|  |  | +                db.commit()
 | 
	
		
			
				|  |  | +                return ms_reward
 | 
	
		
			
				|  |  | +            else:
 | 
	
		
			
				|  |  | +                return False
 | 
	
		
			
				|  |  | +        return False
 | 
	
		
			
				|  |  | +    except Error as wmrerror:
 | 
	
		
			
				|  |  | +        current_app.logger.error(f'Couldn\'t check if a milestone was reached: {wmrerror.args[0]}')
 | 
	
		
			
				|  |  | +        return False
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def was_goal_reached(db, reward_name):  # Check if a goal was reached
 | 
	
		
			
				|  |  |      try:
 | 
	
		
			
				|  |  |          cursor = db.execute(
 | 
	
	
		
			
				|  | @@ -140,7 +194,7 @@ def was_goal_reached(db, reward_name):  # Check if a goal was reached
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          row = cursor.fetchone()
 | 
	
		
			
				|  |  |          if row is None:
 | 
	
		
			
				|  |  | -            current_app.logger.warning(f'{reward_name} not found in Goal table.')
 | 
	
		
			
				|  |  | +            current_app.logger.error(f'{reward_name} not found in Goal table.')
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              progress, target = row
 | 
	
		
			
				|  |  |              if progress == target:
 | 
	
	
		
			
				|  | @@ -204,7 +258,7 @@ def all_active_votes(db):  # Get only active votes
 | 
	
		
			
				|  |  |  def all_goals(db):  # Get all the goals
 | 
	
		
			
				|  |  |      try:
 | 
	
		
			
				|  |  |          cursor = db.execute(
 | 
	
		
			
				|  |  | -            """SELECT name, progress, target, info FROM goals"""
 | 
	
		
			
				|  |  | +            "SELECT name, progress, target, info FROM goals"
 | 
	
		
			
				|  |  |          )
 | 
	
		
			
				|  |  |          return cursor.fetchall()
 | 
	
		
			
				|  |  |      except Error as agerror:
 |