예제 #1
0
        public ChannelMember WithRole(ChannelMemberRole newRole)
        {
            if (newRole == role)
            {
                return(this);
            }

            return(new ChannelMember(character, newRole));
        }
예제 #2
0
        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);
        }
예제 #4
0
 public bool HasRole(ChannelMemberRole r)
 {
     return(role.HasFlag(r));
 }
예제 #5
0
 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);
 }