コード例 #1
0
ファイル: player.py プロジェクト: NezzarClp/Tosurnament
 async def give_player_role(self, guild, tournament):  # TODO: better
     player_role = tosurnament.get_role(guild.roles,
                                        tournament.player_role_id, "Player")
     if not player_role:
         return
     for bracket in tournament.brackets:
         players_spreadsheet = bracket.players_spreadsheet
         if not players_spreadsheet:
             continue
         bracket_role = tosurnament.get_role(guild.roles, bracket.role_id,
                                             bracket.name)
         await players_spreadsheet.get_spreadsheet()
         if players_spreadsheet.range_team_name:
             team_name_cells = players_spreadsheet.spreadsheet.get_cells_with_value_in_range(
                 players_spreadsheet.range_team_name)
             for team_name_cell in team_name_cells:
                 team_info = TeamInfo.from_team_name(
                     players_spreadsheet, team_name_cell.value)
                 team_name = team_info.team_name.value
                 team_role = tosurnament.get_role(guild.roles, None,
                                                  team_name)
                 if not team_role:
                     team_role = await guild.create_role(name=team_name,
                                                         mentionable=False)
                 for i, player_cell in enumerate(team_info.players):
                     player_name = player_cell.value
                     if not player_name:
                         continue
                     discord_tag = None
                     if len(team_info.discord
                            ) > i and team_info.discord[i].value:
                         discord_tag = team_info.discord[i].value
                     user = tosurnament.UserAbstraction.get_from_osu_name(
                         self.bot, player_name, discord_tag)
                     member = user.get_member(guild)
                     if not member:
                         member = guild.get_member_named(user.name)
                     if member:
                         await member.add_roles(*filter(
                             None, [player_role, bracket_role, team_role]))
         else:
             team_cells = players_spreadsheet.spreadsheet.get_cells_with_value_in_range(
                 players_spreadsheet.range_team)
             for cell in team_cells:
                 try:
                     team_info = TeamInfo.from_player_name(
                         players_spreadsheet, cell.value)
                     if team_info.discord[0].value:
                         user = guild.get_member_named(
                             team_info.discord[0].value)
                     else:
                         user = guild.get_member_named(
                             team_info.team_name.value)
                     if user:
                         await user.add_roles(
                             *filter(None, [player_role, bracket_role]))
                 except Exception:
                     continue
コード例 #2
0
    async def clear_player_role(self, ctx, *, number: int = None):
        """Removes the player role of users not present in the challonge."""
        # TODO improve to handle teams, bracket roles, team captain role
        # TODO and remove special code for nik's tournament and handle challonge error
        tournament = self.get_tournament(ctx.guild.id)
        player_role = tosurnament.get_role(ctx.guild.roles, tournament.player_role_id, "Player")
        if not player_role:
            return
        for bracket in tournament.brackets:
            players_spreadsheet = bracket.players_spreadsheet
            if not bracket.challonge or not players_spreadsheet:
                continue
            challonge_tournament = challonge.get_tournament(tournament.current_bracket.challonge)
            participants = [participant.name for participant in challonge_tournament.participants]
            team_cells = players_spreadsheet.worksheet.get_cells_with_value_in_range(players_spreadsheet.range_team)
            teams_info = []
            for cell in team_cells:
                try:
                    team_info = TeamInfo.from_player_name(players_spreadsheet, cell.value)
                    teams_info.append(team_info)
                except Exception:
                    continue

            players_found = []
            users_role_not_removed = []
            n_roles_removed = 0
            for member in ctx.guild.members:
                member_id = str(member)
                if player_name := self.is_player_in_challonge(member_id, teams_info, participants):
                    players_found.append(player_name)
                else:
                    try:
                        user = ctx.guild.get_member_named(member_id)
                        if user and tosurnament.get_role(user.roles, player_role.id, "Player"):
                            await user.remove_roles(player_role)
                            n_roles_removed += 1
                    except Exception:
                        users_role_not_removed.append(member_id)
                        continue
            success_extra = ""
            players_not_found = "\n".join(list(set(participants) - set(players_found)))
            if players_not_found:
                success_extra += self.get_string(ctx.command.name, "players_not_found", players_not_found)
            if users_role_not_removed:
                success_extra += self.get_string(
                    ctx.command.name, "users_role_not_removed", "\n".join(users_role_not_removed)
                )
            await self.send_reply(
                ctx, ctx.command.name, "success", bracket.name, n_roles_removed, len(players_found), success_extra,
            )
コード例 #3
0
 async def give_player_role(self, guild):
     tournament = self.get_tournament(guild.id)
     player_role = tosurnament.get_role(guild.roles,
                                        tournament.player_role_id, "Player")
     if not player_role:
         return
     for bracket in tournament.brackets:
         players_spreadsheet = bracket.players_spreadsheet
         if not players_spreadsheet:
             continue
         if players_spreadsheet.range_team_name:
             team_name_cells = players_spreadsheet.worksheet.get_cells_with_value_in_range(
                 players_spreadsheet.range_team_name)
             team_info = None
             for team_name_cell in team_name_cells:
                 team_info = TeamInfo.from_team_name(
                     players_spreadsheet, team_name_cell.value)
             if not team_info:
                 continue
             for player_cell in team_info.players:
                 user = guild.get_member_named(player_cell.value)
                 if user:
                     await user.add_roles(player_role)
         else:
             team_cells = players_spreadsheet.worksheet.get_cells_with_value_in_range(
                 players_spreadsheet.range_team)
             for cell in team_cells:
                 try:
                     team_info = TeamInfo.from_player_name(
                         players_spreadsheet, cell.value)
                     if team_info.discord[0]:
                         user = guild.get_member_named(team_info.discord[0])
                     else:
                         user = guild.get_member_named(
                             team_info.team_name.value)
                     if user:
                         await user.add_roles(player_role)
                 except Exception:
                     continue