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
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