예제 #1
0
    def can_can(self, message: discord.message):
        player = self.get(message.author)
        tier_number = Shared.get_tier_number(message.channel)
        if player == None:  #They are joining as a new player
            if self.isFull():
                if len(self.mogi_list) >= DEFAULT_MOGI_SIZE + MAX_SUBS:
                    return 4
                else:
                    if Shared.can_run_in_tier(message.author, tier_number):
                        return 0
                    else:
                        return 2
            elif self.countRunners() == DEFAULT_RUNNER_SIZE:
                return 3
            else:
                if Shared.can_run_in_tier(message.author, tier_number):
                    return 0
                else:
                    return 2

        elif player.is_runner():
            return 1
        else:
            if self.countRunners() == DEFAULT_RUNNER_SIZE:
                return 3
            elif Shared.can_run_in_tier(message.author, tier_number):
                return 5
            else:
                return 2
예제 #2
0
    def movePlayersTo(self, otherMogi):
        if self.start_time != None:
            return ALREADY_STARTED, None
        if otherMogi.start_time != None:
            return OTHER_ALREADY_STARTED, None
        if self.channel.category_id != otherMogi.channel.category_id:
            return OUTSIDE_OF_CATEGORY, None
        if Shared.get_tier_number(otherMogi.channel) == None:
            return NO_TIER_NUMBER, None

        hypothetical_new_mogi_list = [player for player in otherMogi.mogi_list]
        for player in self.mogi_list:
            if player not in otherMogi:
                hypothetical_new_mogi_list.append(player)
            elif player.is_runner() != otherMogi.get(player).is_runner():
                return BAGGER_RUNNER_TYPE_MISMATCH, None

        hypothetical_new_mogi_list.sort(key=lambda p: p.get_join_time())
        if len(hypothetical_new_mogi_list) > (DEFAULT_MOGI_SIZE + MAX_SUBS):
            return COMBINED_MOGI_TOO_LARGE, None

        bagger_count = sum(1 for p in hypothetical_new_mogi_list[:11]
                           if p.is_bagger())
        runner_count = sum(1 for p in hypothetical_new_mogi_list[:11]
                           if p.is_runner())

        if bagger_count > DEFAULT_BAGGER_SIZE:
            return TOO_MANY_BAGGERS, None
        if runner_count > DEFAULT_RUNNER_SIZE:
            return TOO_MANY_RUNNERS, None

        #check if each person could play in the new tier
        tier_num = Shared.get_tier_number(otherMogi.channel)
        for p in hypothetical_new_mogi_list:
            if p.is_runner():
                if not Shared.can_run_in_tier(p.member, tier_num):
                    return COULD_NOT_PLAY_IN_TIER, None
            else:
                if not Shared.can_bag_in_tier(p.member, tier_num):
                    return COULD_NOT_PLAY_IN_TIER, None

        moved_players = [p for p in self.mogi_list]
        self.mogi_list.clear()
        otherMogi.mogi_list = hypothetical_new_mogi_list
        otherMogi.recalculate()
        return SUCCESSFUL_APPEND, moved_players