# Path: bot/bot.py
# class Bot(Player):
#     BOT_NAME: ClassVar[str] = 'Base Bot'
#     def __init__(self,
#                  gameObj: 'game.Game',
#                  position: int,
#                  name: str, *,
#                  debug: bool=False, **kwargs) -> None:
#     def create_player(self, position: int, name: str) -> Player:
#     def create_player_card(self,
#                            player: int,
#                            deckPosition: int,
#                            color: Optional[Color],
#                            value: Optional[Value]) -> Card:
#     def create_own_card(self, deckPosition) -> Card:
#     def decide_move(self, can_clue: bool, can_discard: bool) -> None: ...
#     def next_turn(self, player: int) -> None: ...
#     def striked(self, player: int) -> None: ...
#     def game_ended(self) -> None: ...
#     def someone_drew(self, player: int, deckIdx: int) -> None: ...
#     def someone_played(self,
#                        player: int,
#                        deckIdx: int,
#                        position: int) -> None: ...
#     def someone_discard(self,
#                         player: int,
#                         deckIdx: int,
#                         position: int) -> None: ...
#     def someone_did_played(self,
#                            player: int,
#                            deckIdx: int,
#                            position: int,
#                            striked: bool) -> None: ...
#     def someone_did_discard(self,
#                             player: int,
#                             deckIdx: int,
#                             position: int) -> None: ...
#     def someone_got_color(self,
#                           from_: int,
#                           to: int,
#                           color: Color,
#                           positions: List[int]) -> None: ...
#     def someone_got_value(self,
#                           from_: int,
#                           to: int,
#                           value: Value,
#                           positions: List[int]) -> None: ...
#     def got_color_clue(self,
#                        player: int,
#                        color: Color,
#                        positions: List[int]) -> None: ...
#     def got_value_clue(self,
#                        player: int,
#                        value: Value,
#                        positions: List[int]) -> None: ...
#     def card_played(self, deckIdx: int, position: int) -> None: ...
#     def card_discarded(self, deckIdx: int, position: int) -> None: ...
#     def card_did_played(self,
#                         deckIdx: int,
#                         position: int,
#                         striked: bool) -> None: ...
#     def card_did_discarded(self,
#                            deckIdx: int,
#                            position: int) -> None: ...
#     def card_revealed(self, deckIdx: int) -> None: ...
#     def can_color_clue(self, who: int, color: Color) -> bool:
#     def can_value_clue(self, who: int, value: Value) -> bool:
#     def give_color_clue(self, who: int, color: Color) -> None:
#     def give_value_clue(self, who: int, value: Value) -> None:
#     def play_card(self, position: int) -> None:
#     def discard_card(self, position: int) -> None:
# 
# Path: enums.py
# class Value(IntEnum):
#     '''
#     Only for internal usage
#     '''
#     V1 = 1
#     V2 = 2
#     V3 = 3
#     V4 = 4
#     V5 = 5
# 
#     @property
#     def num_copies(self):
#         if self is Value.V1:
#             return 3
#         if self is Value.V2:
#             return 2
#         if self is Value.V3:
#             return 2
#         if self is Value.V4:
#             return 2
#         if self is Value.V5:
#             return 1
#         raise ValueError
# 
#     def rank(self):
#         if self is Value.V1:
#             return Rank.R1
#         if self is Value.V2:
#             return Rank.R2
#         if self is Value.V3:
#             return Rank.R3
#         if self is Value.V4:
#             return Rank.R4
#         if self is Value.V5:
#             return Rank.R5
#         raise ValueError


import random
from bot import bot
from enums import Value

    def decide_move(self, can_clue, can_discard):
        actions = [PLAY]
        if can_clue:
            actions.append(CLUE_COLOR)
            actions.append(CLUE_VALUE)
        if can_discard:
            actions.append(DISCARD)

        while True:
            action = random.choice(actions)
            if action == PLAY:
                self.play_card(random.randrange(len(self.hand)))
                break
            elif action == DISCARD:
                self.discard_card(random.randrange(len(self.hand)))
                break
            elif action == CLUE_COLOR:
                options = []
                for p in range(self.game.numPlayers):
                    for c in self.game.variant.clue_colors:
                        if self.can_color_clue(p, c):
                            options.append((p, c))
                if options:
                    player, color = random.choice(options)
                    self.give_color_clue(player, color)
                    break
            elif action == CLUE_VALUE:
                options = []
                for p in range(self.game.numPlayers):

# Path: bot/bot.py
# class Bot(Player):
#     BOT_NAME: ClassVar[str] = 'Base Bot'
#     def __init__(self,
#                  gameObj: 'game.Game',
#                  position: int,
#                  name: str, *,
#                  debug: bool=False, **kwargs) -> None:
#     def create_player(self, position: int, name: str) -> Player:
#     def create_player_card(self,
#                            player: int,
#                            deckPosition: int,
#                            color: Optional[Color],
#                            value: Optional[Value]) -> Card:
#     def create_own_card(self, deckPosition) -> Card:
#     def decide_move(self, can_clue: bool, can_discard: bool) -> None: ...
#     def next_turn(self, player: int) -> None: ...
#     def striked(self, player: int) -> None: ...
#     def game_ended(self) -> None: ...
#     def someone_drew(self, player: int, deckIdx: int) -> None: ...
#     def someone_played(self,
#                        player: int,
#                        deckIdx: int,
#                        position: int) -> None: ...
#     def someone_discard(self,
#                         player: int,
#                         deckIdx: int,
#                         position: int) -> None: ...
#     def someone_did_played(self,
#                            player: int,
#                            deckIdx: int,
#                            position: int,
#                            striked: bool) -> None: ...
#     def someone_did_discard(self,
#                             player: int,
#                             deckIdx: int,
#                             position: int) -> None: ...
#     def someone_got_color(self,
#                           from_: int,
#                           to: int,
#                           color: Color,
#                           positions: List[int]) -> None: ...
#     def someone_got_value(self,
#                           from_: int,
#                           to: int,
#                           value: Value,
#                           positions: List[int]) -> None: ...
#     def got_color_clue(self,
#                        player: int,
#                        color: Color,
#                        positions: List[int]) -> None: ...
#     def got_value_clue(self,
#                        player: int,
#                        value: Value,
#                        positions: List[int]) -> None: ...
#     def card_played(self, deckIdx: int, position: int) -> None: ...
#     def card_discarded(self, deckIdx: int, position: int) -> None: ...
#     def card_did_played(self,
#                         deckIdx: int,
#                         position: int,
#                         striked: bool) -> None: ...
#     def card_did_discarded(self,
#                            deckIdx: int,
#                            position: int) -> None: ...
#     def card_revealed(self, deckIdx: int) -> None: ...
#     def can_color_clue(self, who: int, color: Color) -> bool:
#     def can_value_clue(self, who: int, value: Value) -> bool:
#     def give_color_clue(self, who: int, color: Color) -> None:
#     def give_value_clue(self, who: int, value: Value) -> None:
#     def play_card(self, position: int) -> None:
#     def discard_card(self, position: int) -> None:
# 
# Path: enums.py
# class Value(IntEnum):
#     '''
#     Only for internal usage
#     '''
#     V1 = 1
#     V2 = 2
#     V3 = 3
#     V4 = 4
#     V5 = 5
# 
#     @property
#     def num_copies(self):
#         if self is Value.V1:
#             return 3
#         if self is Value.V2:
#             return 2
#         if self is Value.V3:
#             return 2
#         if self is Value.V4:
#             return 2
#         if self is Value.V5:
#             return 1
#         raise ValueError
# 
#     def rank(self):
#         if self is Value.V1:
#             return Rank.R1
#         if self is Value.V2:
#             return Rank.R2
#         if self is Value.V3:
#             return Rank.R3
#         if self is Value.V4:
#             return Rank.R4
#         if self is Value.V5:
#             return Rank.R5
#         raise ValueError


# Path: randombot/bot.py
import random
from bot import bot
from enums import Value


    def decide_move(self, can_clue, can_discard):
        actions = [PLAY]
        if can_clue:
            actions.append(CLUE_COLOR)
            actions.append(CLUE_VALUE)
        if can_discard:
            actions.append(DISCARD)

        while True:
            action = random.choice(actions)
            if action == PLAY:
                self.play_card(random.randrange(len(self.hand)))
                break
            elif action == DISCARD:
                self.discard_card(random.randrange(len(self.hand)))
                break
            elif action == CLUE_COLOR:
                options = []
                for p in range(self.game.numPlayers):
                    for c in self.game.variant.clue_colors:
                        if self.can_color_clue(p, c):
                            options.append((p, c))
                if options:
                    player, color = random.choice(options)
                    self.give_color_clue(player, color)
                    break
            elif action == CLUE_VALUE:
                options = []
                for p in range(self.game.numPlayers):

                    for v in Value: