Пример #1
0
    async def giveaway_command(self, ctx):
        winners = self.client.global_variables.giveaway_winners
        log.info("Previous giveaway winners are: " + UserUtils.print_names(winners))
        channel = self.client.get_channel(Config.GIVEAWAY_VOICE_CHANNEL_ID)
        channel_members = channel.members
        log.info("Giveaway channel members are: " + UserUtils.print_names(channel_members))

        # channel_members = TestUtils.generate_players_list(14)
        # spectators = TestUtils.generate_players_list(3, UserUtils.IDLE)
        # channel_members.extend(spectators)

        prev_winners_msg = self.generate_prev_winners_msg(winners)
        contenders = ListUtils.remove_sub_list(channel_members, winners)
        log.info("Giveaway contenders are: " + UserUtils.print_names(contenders))
        if not contenders:
            log.info("No contenders for giveaway")
            await ctx.send(embed=discord.Embed(title=giveaway_title,
                                               description=prev_winners_msg + '\n' + "No contenders!",
                                               color=discord.Color.blue()))
            return

        player_lottery_msg = self.generate_players_lottery_msg(self, contenders)

        random_index = ListUtils.get_rand_index(contenders)
        new_winner = contenders[random_index]
        log.info("The new winner is: " + UserUtils.get_nick_or_name(new_winner))
        winners.append(new_winner)
        await ctx.send(embed=discord.Embed(title=giveaway_title,
                                           description=giveaway_desc.format(prev_winners_msg, player_lottery_msg,
                                                                            new_winner.mention),
                                           color=discord.Color.blue()))
    def test_generate_teams_from_bench(self):
        Config.ALLOWED_TEXT_CHANNEL_IDS = ["Community Games"]

        voice_channel_mock = MagicMock()
        voice_channel_mock.id = Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID
        voice_channel_mock.members = TestUtils.generate_mock_players_list(22)

        ctx_mock.message.channel.id = "Community Games"
        ctx_mock.author.mention = "@Kane"

        client_mock = MagicMock()
        client_mock.get_channel.return_value = voice_channel_mock
        benched_players = TestUtils.generate_mock_players_list(5)
        client_mock.global_variables.bench = benched_players.copy()

        comm_games_team_generator = community_games_team_generator.CommunityGamesTeamGenerator(
            client_mock)
        loop = asyncio.get_event_loop()
        loop.run_until_complete(
            comm_games_team_generator.generate_teams_command(
                comm_games_team_generator, ctx_mock))
        team0 = client_mock.global_variables.teams[0]
        team1 = client_mock.global_variables.teams[1]
        bench = client_mock.global_variables.bench
        self.assertEqual(6, len(team0))
        self.assertEqual(6, len(team1))
        self.assertEqual(10, len(bench))
        self.assertTrue(
            verify_benched_players_play(benched_players, team0, team1))
        self.assertTrue(
            verify_bench_does_not_contain_players(bench, team0, team1))
        self.assertFalse(ListUtils.contains_duplicates(team0))
        self.assertFalse(ListUtils.contains_duplicates(team1))
        self.assertFalse(ListUtils.contains_duplicates(bench))
        self.assertEqual(0, len(voice_channel_mock.members))
    def test_generate_teams_exactly_12_players(self):
        Config.ALLOWED_TEXT_CHANNEL_IDS = ["Community Games"]

        voice_channel_mock = MagicMock()
        voice_channel_mock.id = Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID
        voice_channel_mock.members = TestUtils.generate_mock_players_list(12)

        ctx_mock.message.channel.id = "Community Games"
        ctx_mock.author.mention = "@Kane"

        client_mock = MagicMock()
        client_mock.global_variables.bench = list()
        client_mock.get_channel.return_value = voice_channel_mock

        comm_games_team_generator = community_games_team_generator.CommunityGamesTeamGenerator(
            client_mock)
        loop = asyncio.get_event_loop()
        loop.run_until_complete(
            comm_games_team_generator.generate_teams_command(
                comm_games_team_generator, ctx_mock))
        self.assertEqual(6, len(client_mock.global_variables.teams[0]))
        self.assertEqual(6, len(client_mock.global_variables.teams[1]))
        self.assertFalse(
            ListUtils.contains_duplicates(
                client_mock.global_variables.teams[0]))
        self.assertFalse(
            ListUtils.contains_duplicates(
                client_mock.global_variables.teams[1]))
        self.assertEqual(0, len(voice_channel_mock.members))
def verify_bench_does_not_contain_players(bench, team0, team1):
    for benched_player in bench:
        player_id = benched_player.id
        if ListUtils.find_by_id(player_id, team0) or ListUtils.find_by_id(
                player_id, team1):
            return False
    return True
def verify_benched_players_play(benched_players, team0, team1):
    for benched_player in benched_players:
        player_id = benched_player.id
        if not ListUtils.find_by_id(player_id,
                                    team0) and not ListUtils.find_by_id(
                                        player_id, team1):
            return False
    return True
 def __init__(self, data):
     quartiles = data[:]
     quartiles.sort()
     
     middle = Stats.median(quartiles)
     split = ListUtils.middleSplit(quartiles)
     
     leftBound = Stats.median(split[0])
     rightBound = Stats.median(split[1])
     self.__quartileBounds = [leftBound, middle, rightBound]
     
     leftSplit = ListUtils.middleSplit(split[0])
     rightSplit = ListUtils.middleSplit(split[1])
     self.__quartiles = [leftSplit[0], leftSplit[1], rightSplit[0], rightSplit[1]]
Пример #7
0
def from_json():
    maps = list()
    for i in range(len(maps_json)):
        maps_name = string.capwords(maps_json[i]['name']['en_US'])
        icon_url = maps_json[i]['icon']
        if maps_name.upper() not in filtered_maps:
            maps.append(Map(maps_name, icon_url))
    return ListUtils.remove_duplicates(maps)
    def test_generate_teams_with_spectators(self):
        Config.ALLOWED_TEXT_CHANNEL_IDS = ["Community Games"]

        voice_channel_mock = MagicMock()
        voice_channel_mock.id = Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID
        online_players = TestUtils.generate_mock_players_list(15)
        idle_players = TestUtils.generate_mock_players_list(10, UserUtils.IDLE)
        all_players = list()
        all_players.extend(online_players)
        all_players.extend(idle_players)
        voice_channel_mock.members = all_players

        ctx_mock.message.channel.id = "Community Games"
        ctx_mock.author.mention = "@Kane"

        print(voice_channel_mock)

        client_mock = MagicMock()
        client_mock.get_channel.return_value = voice_channel_mock
        client_mock.global_variables.bench = list()

        print(client_mock.get_channel.return_value)

        comm_games_team_generator = community_games_team_generator.CommunityGamesTeamGenerator(
            client_mock)
        loop = asyncio.get_event_loop()
        loop.run_until_complete(
            comm_games_team_generator.generate_teams_command(
                comm_games_team_generator, ctx_mock))
        team0 = client_mock.global_variables.teams[0]
        team1 = client_mock.global_variables.teams[1]

        bench = client_mock.global_variables.bench
        spectators = client_mock.global_variables.spectators
        self.assertEqual(6, len(team0))
        self.assertEqual(6, len(team1))
        self.assertEqual(3, len(bench))
        self.assertEqual(10, len(spectators))
        self.assertTrue(
            verify_bench_does_not_contain_players(bench, team0, team1))
        self.assertFalse(ListUtils.contains_duplicates(team0))
        self.assertFalse(ListUtils.contains_duplicates(team1))
        self.assertFalse(ListUtils.contains_duplicates(bench))
        self.assertEqual(0, len(voice_channel_mock.members))
def median(data):
    copy = data[:]
    copy.sort()
    
    midIndices = ListUtils.middleIndices(data)
    contributor = []
    for i in midIndices:
        contributor.append(copy[i])
    
    return sum(contributor) / float(len(contributor))
Пример #10
0
    async def remove_map_command(self, ctx, map_name):
        used_maps = self.client.global_variables.used_maps
        map_to_remove = Map.from_name(map_name)
        if map_to_remove not in used_maps:
            await ctx.send(ctx.author.mention + " The map `" + map_name +
                           "` is not in the used maps list")
            return

        used_maps.remove(map_to_remove)
        await ctx.send(ctx.author.mention + " The map `" + map_name +
                       "` was removed from the used maps list")
        await ctx.send(embed=ListUtils.get_embed(used_maps, "Used Maps"))
 def testMiddleIndices_singleItem(self):
     self.assertEqual(ListUtils.middleIndices([1]), [0])
 def testMiddleSplit_evenNumberOfItems(self):
     self.assertEqual(ListUtils.middleSplit([1, 2, 3, 4]),  [[1, 2], [3, 4]])
 def testMiddleIndices_empty(self):
     self.assertEqual(ListUtils.middleIndices([]), [])
 def testMiddleSplit_oldNumberOfItems(self):
     self.assertEqual(ListUtils.middleSplit([1, 2, 3]),  [[1], [3]])
Пример #15
0
 def get_rand_declare_msg():
     index = ListUtils.get_rand_index(funny_declare_msgs)
     return funny_declare_msgs[index]
 def testMiddleSplit_empty(self):
     self.assertEqual(ListUtils.middleSplit([]),  [[]])
 def testMiddleSplit_singleItem(self):
     self.assertEqual(ListUtils.middleSplit([1]),  [[1]])
 def testMiddleIndices_evenNumberOfItems(self):
     self.assertEqual(ListUtils.middleIndices([1, 2, 3, 4]),  [1, 2])
Пример #19
0
    async def generate_teams_command(self, ctx):
        self.client.global_variables.teams = list()
        self.client.global_variables.spectators = list()
        teams = self.client.global_variables.teams
        teams.append(list())
        teams.append(list())

        bench = self.client.global_variables.bench

        log.info("Generating teams...")
        voice_channel = self.client.get_channel(
            Config.COMMUNITY_GAMES_VOICE_CHANNEL_ID)
        members = voice_channel.members

        # members = TestUtils.generate_players_list(14)
        # spectators = TestUtils.generate_players_list(3, UserUtils.IDLE)
        # members.extend(spectators)

        self.client.global_variables.spectators = UserUtils.filter_spectators(
            members)
        spectators = self.client.global_variables.spectators
        log.info("Spectator players:%s", UserUtils.print_players(spectators))

        log.debug("Removing spectators: %s from player pool: %s",
                  UserUtils.print_players(spectators),
                  UserUtils.print_players(members))
        UserUtils.remove_players_from_list(spectators, members)
        log.debug("Player pool after removing spectators: %s",
                  UserUtils.print_players(members))

        log.debug("Removing spectators: %s from player bench: %s",
                  UserUtils.print_players(spectators),
                  UserUtils.print_players(bench))
        UserUtils.remove_players_from_list(spectators, bench)
        log.debug("Bench pool after removing spectators: %s",
                  UserUtils.print_players(bench))

        num_of_players = len(members)

        await ctx.send(embed=(
            UserUtils.generate_player_list_embed(members, voice_channel.name)))
        if spectators:
            await ctx.send(embed=UserUtils.generate_player_list_embed(
                spectators, "Spectators"))

        log.info("Current number of players: " + str(num_of_players))

        if num_of_players < 12:
            error_msg = self.get_not_enough_players_msg(num_of_players)
            log.error(error_msg)
            await ctx.send(ctx.author.mention + error_msg)
            return

        UserUtils.remove_players_from_list(bench, members)
        log.info("Adding previously benched players to teams:%s",
                 UserUtils.print_players(bench))
        self.generate_teams(bench)
        log.info("Adding players from players pool to teams:%s",
                 UserUtils.print_players(members))
        self.generate_teams(members)

        log.info("Adding unselected players to bench:%s",
                 UserUtils.print_players(members))
        bench.extend(members)
        bench = ListUtils.remove_duplicates(bench)
        members.clear()

        team0 = teams[0]
        team1 = teams[1]

        log.info("Teams generated are: "
                 "\n Team 1: %s "
                 "\n Team 2: %s", UserUtils.print_players(team0),
                 UserUtils.print_players(team1))

        await ctx.send(embed=self.generate_team_embed_message(1, team0))
        await ctx.send(embed=self.generate_team_embed_message(2, team1))
        await ctx.send(
            embed=UserUtils.generate_player_list_embed(bench, "Bench"))
Пример #20
0
 async def get_used_maps_command(self, ctx):
     await ctx.send(embed=ListUtils.get_embed(
         self.client.global_variables.used_maps, 'Used Maps'))
Пример #21
0
 def get_random_map(maps):
     rand_index = ListUtils.get_rand_index(maps)
     return maps[rand_index]
 def testMiddleIndices_distinctMedian(self):
     self.assertEqual(ListUtils.middleIndices([1, 2, 3]),  [1])