Exemple #1
0
def get_event_entrants(event_id: int,
                       num_entrants: int,
                       seeds: bool = False,
                       phase_id: int = 0) -> [Player]:
    ''' Given an event ID for a tournament on Smash.gg and the number
    of entrants, returns a list of Player objects, representing players
    at the tournament. If the seeds flag is true, the Player objects will have
    both player IDs and seed IDs (all players must be marked as seeded on smash.gg
    for this to work). '''
    if seeds:
        with open('queries/queryphaseseeds.txt') as phaseseeds:
            query = phaseseeds.read()
        variables = {'phaseId': phase_id, 'perPage': num_entrants}
    else:
        with open('queries/queryevententrants.txt') as evententrants:
            query = evententrants.read()
        variables = {'eventId': event_id, 'perPage': num_entrants}
    response = run_query(query, variables)
    entrants = []
    event_key = "event" if not seeds else "phase"
    players_key = "entrants" if not seeds else "seeds"
    if response and response["data"][event_key]:
        event = response["data"][event_key]
        nodes = event[players_key]["nodes"]
        for node in nodes:
            seed_id = 0 if not seeds else node["id"]
            node = node if not seeds else node["entrant"]
            player = node["participants"][0]["player"]
            player = Player(player["gamerTag"], player["id"], seed_id)
            entrants.append(player)
    return entrants
Exemple #2
0
 def get(self):
     userid = users.get_current_user().user_id()
     player = Player.from_id(userid)
     if player.gameroom is not None:
         self.template_values.update({"gamekey": player.gameroom})
     clientid_for_channel = player.create_channel()
     token = channel.create_channel(clientid_for_channel)
     self.template_values.update({"token": token, "userid": player.keyname})
     return self.render("index.html")
Exemple #3
0
 def post(self):
     """
     Processes the req from a client/player to join a gameroom
     """
     user = users.get_current_user()
     if not user:
         return self.redirect(users.create_login_url("/"))
     player = Player.from_id(user.user_id())
     if not player.gameroom:
         return Game.join_latest_or_new(player)
     return Game.continue_tournament(player)
Exemple #4
0
    url = f"https://smashdata.gg/smash/ultimate/player/{player.tag}?id={player.id}"
    try:
        soup = make_soup(url)
    except requests.exceptions.HTTPError as http_err:
        print(f"An error occurred while trying to get tourney placements for {player.tag} (ID: {player.get_player_id()}).")
        print(http_err)
        return []
    tourneys = soup.find_all(class_="tournament-listing")
    if tourneys:
        return construct_tourney_placings(tourneys)
    else:
        # check if on invalid players page
        invalid_players = soup.find(class_="invalid-players")
        # look for an ID match
        if invalid_players:
            for possible_player in invalid_players.find_all('a'):
                if possible_player['href'].endswith(str(player.id)):
                    print(f"Results for {player.tag} found under alias {possible_player.text}.")
                    url = "https://smashdata.gg" + possible_player['href']
                    soup = make_soup(url)
                    tourneys = soup.find_all(class_="tournament-listing")
                    return construct_tourney_placings(tourneys)
        print(f"No tournaments were found on record for {player.tag} (ID: {player.get_player_id()}).")
        return []

if __name__ == '__main__':
    player = Player("Vantage", 1508177)
    for result in get_player_placings(player):
        print(f"At {result.name}, {player.tag} placed #{result.placement} out of {result.num_entrants} attendees.")

Exemple #5
0
 def get(self):
     userid = users.get_current_user().user_id()
     Player.from_id(userid).leave_tournament()
     self.redirect("/bye")
Exemple #6
0
 def post(self):
     userid = users.get_current_user().user_id()
     message = self.request.get("m", "")
     Player.from_id(userid).chat(message)