def vote():
        # 1) Make sure player who made the command
        # is in the game
        if not player_in_game(g, user_id):
            return False, MSG['u_not_in_game']
        # is alive
        if not is_player_alive(g, user_id):
            return False, MSG['u_not_alive']
        # only valid during day
        if get_current_round(g) != 'day':
            return False, MSG['not_day']

        # if target_name=pass is okay
        if target_name == 'pass':
            return True, user_name + ' wants to pass.'

        # target is in game
        if not player_in_game(g, target_id):
            return False, MSG['t_not_in_game']
        # target is alive
        if not is_player_alive(g, target_id):
            return False, MSG['t_not_alive']

        # voting again just changes your vote.
        if has_voted(g, user_id):
            return True, user_name + ' changed vote to ' + '*'+target_name + '.*'

        # after each success vote should list all votes.
        return True, user_name + ' voted for ' + '*' + target_name + '.*'
def vote(user_id, action, game_state, target_name):
    user_map = UserMap()
    target_id = user_map.get(name=target_name)
    user_name = user_map.get(user_id)

    if not status.player_in_game(game_state, user_id):
        return False, RESPONSE['u_not_in_game']

    if not status.is_player_alive(game_state, user_id):
        return False, RESPONSE['u_not_alive']

    if status.get_current_round(game_state) != 'day':
        return False, RESPONSE['not_day']

    if target_name == 'pass':
        return True, user_name + RESPONSE['pass']

    if not status.player_in_game(game_state, target_id):
        return False, RESPONSE['t_not_in_game']

    if not status.is_player_alive(game_state, target_id):
        return False, RESPONSE['t_not_alive']

    if status.has_voted(game_state, user_id):
        return True, user_name + ' changed vote to ' + '*' + target_name + '*'

    return True, user_name + ' voted for ' + '*' + target_name + '*'
def peek(user_id, action, game_state, target_name):
    user_map = UserMap()
    role_map = {
        's': "the Seer",
        'w': "a wolf",
        'v': "a vanilla villa",
        'a': "the Angel"
    }

    target_id = user_map.get(name=target_name)

    user_name = user_map.get(user_id)

    if not status.player_in_game(game_state, user_id):
        return False, RESPONSE['noop']

    if not status.is_player_alive(game_state, user_id):
        return False, RESPONSE['dead_villa']

    #if status.get_current_round(game_state) != 'night':
    #    return False, RESPONSE['noop']

    if status.player_role(game_state, user_id) != 's':
        return False, RESPONSE['not_seer']

    target_role = status.player_role(game_state, target_id)
    target_str = RESPONSE['peek']

    return True, target_name + "'s role is " + role_map[target_role]
 def can_join():#idk dont want to override join()
     # status is WAITING_FOR_JOIN
     if g.get('STATUS') != 'WAITING_FOR_JOIN':
         return False, MSG['not_waiting']
     # Not already in the game
     if player_in_game(g, user_id):
         return False, MSG['already_join']
     return True, None
def should_user_join_game(user_id, action, game_state):
    """Check if user can join game."""
    if game_state.get('STATUS') != 'WAITING_FOR_JOIN':
        return False, RESPONSE['not_waiting']

    if status.player_in_game(game_state, user_id):
        return False, RESPONSE['already_joined']

    return True, None
    def kill():
        # 1) Make sure player who made the command
        # is in the game
        if not player_in_game(g,user_id):
            return False, 'Not allowed.'
        # 1a) is a werewolf
        # Only werewolf can use kill. (for now)
        if player_role(g, user_id) != 'w':
            return False, 'Not allowed.'
        # 1c) is alive
        if not is_player_alive(g, user_id):
            return False, 'Dead wolves can not kill.'
        # 2) Kill command only valid at night.
        if get_current_round(g) != 'night':
            return False, 'Not allowed.'
        # 3) Target must be in game.
        if not player_in_game(g, target_id):
            return False, 'Not allowed.'
        # 4) Target must be alive.
        if not is_player_alive(g, target_id):
            return False, 'Not allowed.'

        return True, '' # no message
def night_kill(user_id, action, game_state, target_name):
    user_map = UserMap()
    target_id = user_map.get(name=target_name)
    user_name = user_map.get(user_id)

    if not status.player_in_game(game_state, user_id):
        return False, RESPONSE['noop']

    #if status.player_role(game_state, user_id) != 'w':
    #    return False, RESPONSE['noop']

    if not status.is_player_alive(game_state, user_id):
        return False, 'Dead wolves can not kill.'

    #if status.get_current_round(game_state) != 'night':
    #    return False, RESPONSE['noop']

    if not status.player_in_game(game_state, target_id):
        return False, RESPONSE['noop']

    if not status.is_player_alive(game_state, target_id):
        return False, RESPONSE['noop']

    return True, ""