def __init__(self, leader): leader.group = self self.leader = leader self.members = [] self.invites = set() self.instance = None self.channel = Channel('gchat', 'next', aliases=('g', 'gc', 'gt', 'gtell', 'gsay', 'gs')) ev.register('player_connect', self._player_connect)
class Group(ActionProvider, Attachable): target_keys = TargetKeys('group') def __init__(self, leader): leader.group = self self.leader = leader self.members = [] self.invites = set() self.instance = None self.channel = Channel('gchat', 'next', aliases=('g', 'gc', 'gt', 'gtell', 'gsay', 'gs')) ev.register('player_connect', self._player_connect) def join(self, member): if not self.members: self._add_member(self.leader) self.msg("{} has joined the group".format(member.name)) self._add_member(member) self.invites.remove(member) def _add_member(self, member): member.group = self self.channel.add_sub(member) self.members.append(member) member.enhance_soul(self) def decline(self, member): self.leader.display_line("{} has declined your group invitation.".format(member.name)) self.invites.remove(member) self._check_empty() @obj_action() def leave(self, source, **_): self._remove_member(source) if len(self.members) > 1 and source == self.leader: self.leader = self.members[0] self.msg("{} is now the leader of the group.".format(self.leader.name)) else: self._check_empty() def _remove_member(self, member): self.msg("{} has left the group.".format(member.name)) member.group = None member.diminish_soul(self) self.channel.remove_sub(member) self.members.remove(member) def msg(self, msg): self.channel.send_msg(msg) def _check_empty(self): if self.invites: return if len(self.members) == 1: self._remove_member(self.members[0]) self.channel.disband() self.detach() def _player_connect(self, player, *_): if player in self.members: self.msg("{} has reconnected.".format(player.name)) def detach_shared(self, member): self.leave(member)