def eat_player(g, user_id, *args):
    """
    ex. *args = (['kill', 'maksym'], )
    arg_list =
    target_name = args[1]

    user_name = u.id_dict.get(user_id)

    """
    arg_list = args[0]

    if len(arg_list) < 1: # no target no good
        return "Have to pick a target.", None
    elif len(arg_list) > 2: # too many args
        return "Not a valid command.", None
    else:
        u = UserMap() # get usermap

        target_name = arg_list[1]
        target_id =  u.get(name=target_name) # turn name into id
        result, message = is_valid_action(user_id, 'kill', g, target_name=target_name)
        if not result:
            # was not a valid kill
            return message, None
        else:
            # player is eaten
            # update state
            # changes targeted player's status to dead
            new_g = update_game_state(g, 'player_status', player=target_id, status='dead')
            # tell the players.
            eaten_str = "%s was eaten." % (target_name)
            return resolve_night_round(new_g, alert=eaten_str), None
def night_kill(game_state, user_id, *args):
    """Night kill the selected player."""
    arg_list = args[0]

    print arg_list
    print len(arg_list)

    if len(arg_list) < 1:
        return "Have to pick a target.", None

    elif len(arg_list) > 2:
        return "Not a valid command.", None

    else:
        user_map = UserMap()

        target_name = arg_list[1]
        target_id =  user_map.get(name=target_name)
        result, message = is_valid_action(user_id, 'night_kill', game_state, target_name=target_name)

        if not result:
            return message, None

        else:
            new_game = update_game_state(game_state, 'player_status', player=target_id, status='dead')
            eaten_str = "%s was night killed." % (target_name)

            return resolve_night_round(new_game, alert=eaten_str), None
def player_vote(g, user_id, *args):
    """
    ex. *args = (['vote', 'maksym'], )
    arg_list = args[0]
    target_name = arg_list[1]


    user_name = u.id_dict.get(user_id)

    """
    arg_list = args[0]

    if len(arg_list) < 1: # didn't vote
        return "Have to vote FOR someone.", None
    elif len(arg_list) > 2: # too many args
        return "Not a valid command.", None
    else:
        target_name = arg_list[1]
        target_id =  u.get(name=target_name) # turn name into id

        result, message = is_valid_action(user_id, 'vote', g, target_name=target_name)
        if not result:
            # was not a valid kill
            return message, None
        else:
            # player voted
            # update state
            # change votes to reflect their vote
            new_g = update_game_state(g, 'vote', voter=user_id, votee=target_id)

            # after each vote need to check if total
            # everyone has voted.
            if did_everyone_vote(new_g):
                # resolve vote round
                result_id = resolve_votes(new_g)
                if result_id:
                    # result is id of player
                    # set player status to dead.
                    result_name = u.get(user_id=result_id)

                    new_g_2 = update_game_state(new_g, 'player_status', player=result_id, status='dead')
                    # have to reset all the votes
                    new_g_3 = update_game_state(new_g_2, 'reset_votes')

                    # tell the players.
                    lynch_str = "%s was lynched." % (result_name)
                    # pass in game state before votes reset.
                    return resolve_day_round(new_g_2, alert=lynch_str), None

                else:
                    # list votes returns a tuple ('str', None)
                    return resolve_day_round(new_g, alert='*No one dies.*'), None
            else:
                # valid vote, but not everyone voted yet.
                # suggestion to list vote summary every vote.
                return list_votes(new_g)[0] + '\n\n' + message
            return message, None
def player_vote(game_state, user_id, *args):
    """Update the game_state with a players lynch vote."""
    user_map = UserMap()
    arg_list = args[0]

    if len(arg_list) < 1:
        return "Have to vote FOR someone.", None

    elif len(arg_list) > 2:
        return "Not a valid command.", None

    else:
        target_name = arg_list[1]
        target_id =  user_map.get(name=target_name)

        result, message = is_valid_action(user_id, 'vote', game_state, target_name=target_name)
        if not result:
            return message, None

        else:
            new_game = update_game_state(game_state, 'vote', voter=user_id, votee=target_id)

            if status.did_everyone_vote(new_game):
                result_id = resolve_votes(new_game)

                if result_id:
                    result_name = user_map.get(user_id=result_id)

                    set_deaths_in_game_state = update_game_state(new_game, 'player_status', player=result_id, status='dead')
                    reset_game_votes = update_game_state(set_deaths_in_game_state, 'reset_votes')

                    lynch_str = "%s was lynched." % (result_name)
                    return resolve_day_round(set_deaths_in_game_state, alert=lynch_str), None

                else:
                    return resolve_day_round(new_game, alert='*No one dies.*'), None

            else:
                return list_votes(new_game)[0] + '\n\n' + message, None

            return message, None
def seer_peek_player(game_state, user_id, *args):
    """Seer can peek a players role during the night."""
    user_map = UserMap()
    arg_list = args[0]

    if len(arg_list) < 1:
        return "Have to pick a target.", None

    elif len(arg_list) > 2:
        return "Not a valid command.", None

    else:
        target_name = arg_list[1]
        target_id = user_map.get(name=target_name)
        result, message = is_valid_action(user_id, 'peek', game_state, target_name=target_name)

        if not result:
            return message, None

        else:
            player_channel = user_map.get(user_id=user_id, DM=True)
            send_message(message, channel=player_channel)

            return "", None