public ChannelMember WithRole(ChannelMemberRole newRole) { if (newRole == role) { return(this); } return(new ChannelMember(character, newRole)); }
public void CheckRoleAndThrowIfFailed(Character member, ChannelMemberRole role) { if (member == Character.None) { return; } GetMember(member).ThrowIfNull(ErrorCodes.NotMemberOfChannel).HasRole(role).ThrowIfFalse(ErrorCodes.InsufficientPrivileges); }
public void JoinChannel(string channelName, Character member, ChannelMemberRole role, string password) { ChannelMember newMember = null; var channel = UpdateChannel(channelName, c => { if (c.IsOnline(member)) { return(c); } if (_memberRepository.Get(c, member) != null) { return(c); } if (member.AccessLevel.IsAdminOrGm()) { role |= PresetChannelRoles.ROLE_GOD; } else { _banRepository.IsBanned(c, member).ThrowIfTrue(ErrorCodes.CharacterIsBanned); c.CheckPasswordAndThrowIfMismatch(password); } newMember = new ChannelMember(member, role); _memberRepository.Insert(c, newMember); if (_sessionManager.IsOnline(member)) { return(c.SetMember(newMember)); } return(c); }); if (channel == null) { return; } channel.SendAddMemberToAll(_sessionManager, newMember); channel.SendJoinedToMember(_sessionManager, newMember); channel.Logger.MemberJoin(member); }
public bool HasRole(ChannelMemberRole r) { return(role.HasFlag(r)); }
public ChannelMember(Character character, ChannelMemberRole role) { this.character = character; this.role = role; }
public void SetMemberRole(string channelName, Character issuer, Character character, ChannelMemberRole role) { // adminokra / gm-ekre nem lehet if (character.AccessLevel.IsAdminOrGm() && role == ChannelMemberRole.Undefined) { return; } ChannelMember m = null; var channel = UpdateChannel(channelName, c => { c.CheckRoleAndThrowIfFailed(issuer, PresetChannelRoles.ROLE_CAN_MODIFY_MEMBER_ROLE); m = c.GetMember(character); if (m == null) { return(c); } m = m.WithRole(role); _memberRepository.Update(c, m); return(c.SetMember(m)); }); if (channel == null || m == null) { return; } var data = new Dictionary <string, object> { { k.issuerID, issuer.Id }, { k.member, m.ToDictionary() } }; var n = channel.CreateNotificationMessage(ChannelNotify.ChangeMemberRole, data); channel.SendToAll(_sessionManager, n); }
public static void SetMemberRole(this IChannelManager channelManager, string name, Character member, ChannelMemberRole newRole) { channelManager.SetMemberRole(name, Character.None, member, newRole); }