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]]
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))
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]])
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])
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"))
async def get_used_maps_command(self, ctx): await ctx.send(embed=ListUtils.get_embed( self.client.global_variables.used_maps, 'Used Maps'))
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])