Ejemplo n.º 1
0
 def can_bag(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_bag_in_tier(message.author, tier_number):
                     return 0
                 else:
                     return 2
         elif self.countBaggers() >= DEFAULT_BAGGER_SIZE:
             return 3
         else:
             if Shared.can_bag_in_tier(message.author, tier_number):
                 return 0
             else:
                 return 2
     elif player.is_bagger():
         return 1
     else:
         if self.countBaggers() >= DEFAULT_BAGGER_SIZE:
             return 3
         elif Shared.can_bag_in_tier(message.author, tier_number):
             return 5
         else:
             return 2
Ejemplo n.º 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