| @@ -70,10 +70,6 @@ namespace Discord | |||
| public int AFKTimeout { get; private set; } | |||
| /// <summary> Gets the date and time you joined this server. </summary> | |||
| public DateTime JoinedAt { get; private set; } | |||
| /// <summary> Gets the default channel for this server. </summary> | |||
| public Channel DefaultChannel { get; private set; } | |||
| /// <summary> Gets the the role representing all users in a server. </summary> | |||
| public Role EveryoneRole { get; private set; } | |||
| /// <summary> Gets all extra features added to this server. </summary> | |||
| public IEnumerable<string> Features { get; private set; } | |||
| /// <summary> Gets all custom emojis on this server. </summary> | |||
| @@ -93,6 +89,10 @@ namespace Discord | |||
| public string IconUrl => GetIconUrl(Id, IconId); | |||
| /// <summary> Gets the URL to this servers's splash image. </summary> | |||
| public string SplashUrl => GetSplashUrl(Id, SplashId); | |||
| /// <summary> Gets the default channel for this server. </summary> | |||
| public Channel DefaultChannel => GetChannel(Id); | |||
| /// <summary> Gets the the role representing all users in a server. </summary> | |||
| public Role EveryoneRole => GetRole(Id); | |||
| /// <summary> Gets a collection of all channels in this server. </summary> | |||
| public IEnumerable<Channel> AllChannels => _channels.Select(x => x.Value); | |||
| @@ -119,7 +119,7 @@ namespace Discord | |||
| Client = client; | |||
| Id = id; | |||
| } | |||
| internal void Update(Guild model) | |||
| { | |||
| if (model.Name != null) | |||
| @@ -144,7 +144,6 @@ namespace Discord | |||
| var role = AddRole(x.Id); | |||
| role.Update(x, false); | |||
| } | |||
| EveryoneRole = _roles[Id]; | |||
| } | |||
| if (model.Emojis != null) //Needs Roles | |||
| { | |||
| @@ -171,7 +170,6 @@ namespace Discord | |||
| _channels = new ConcurrentDictionary<ulong, Channel>(2, (int)(model.Channels.Length * 1.05)); | |||
| foreach (var subModel in model.Channels) | |||
| AddChannel(subModel.Id, false).Update(subModel); | |||
| DefaultChannel = _channels[Id]; | |||
| } | |||
| if (model.MemberCount != null) | |||
| { | |||
| @@ -198,7 +196,7 @@ namespace Discord | |||
| } | |||
| } | |||
| } | |||
| /// <summary> Edits this server, changing only non-null attributes. </summary> | |||
| public Task Edit(string name = null, string region = null, Stream icon = null, ImageType iconType = ImageType.Png) | |||
| { | |||
| @@ -366,7 +364,7 @@ namespace Discord | |||
| if (name == null) throw new ArgumentNullException(nameof(name)); | |||
| return _roles.Select(x => x.Value).Find(name, exactMatch); | |||
| } | |||
| /// <summary> Creates a new role. </summary> | |||
| public async Task<Role> CreateRole(string name, ServerPermissions? permissions = null, Color color = null, bool isHoisted = false) | |||
| { | |||
| @@ -405,16 +403,16 @@ namespace Discord | |||
| #region Permissions | |||
| internal ServerPermissions GetPermissions(User user) | |||
| { | |||
| Member member; | |||
| if (_users.TryGetValue(user.Id, out member)) | |||
| return member.Permissions; | |||
| else | |||
| return ServerPermissions.None; | |||
| } | |||
| internal void UpdatePermissions(User user) | |||
| { | |||
| { | |||
| Member member; | |||
| if (_users.TryGetValue(user.Id, out member)) | |||
| return member.Permissions; | |||
| else | |||
| return ServerPermissions.None; | |||
| } | |||
| internal void UpdatePermissions(User user) | |||
| { | |||
| Member member; | |||
| if (_users.TryGetValue(user.Id, out member)) | |||
| { | |||
| @@ -426,30 +424,30 @@ namespace Discord | |||
| channel.Value.UpdatePermissions(user); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| private bool UpdatePermissions(User user, ref ServerPermissions permissions) | |||
| { | |||
| uint newPermissions = 0; | |||
| if (user.Id == _ownerId) | |||
| newPermissions = ServerPermissions.All.RawValue; | |||
| else | |||
| { | |||
| foreach (var serverRole in user.Roles) | |||
| newPermissions |= serverRole.Permissions.RawValue; | |||
| } | |||
| if (newPermissions.HasBit((byte)PermissionBits.ManageRolesOrPermissions)) | |||
| newPermissions = ServerPermissions.All.RawValue; | |||
| if (newPermissions != permissions.RawValue) | |||
| { | |||
| permissions = new ServerPermissions(newPermissions); | |||
| { | |||
| uint newPermissions = 0; | |||
| if (user.Id == _ownerId) | |||
| newPermissions = ServerPermissions.All.RawValue; | |||
| else | |||
| { | |||
| foreach (var serverRole in user.Roles) | |||
| newPermissions |= serverRole.Permissions.RawValue; | |||
| } | |||
| if (newPermissions.HasBit((byte)PermissionBits.ManageRolesOrPermissions)) | |||
| newPermissions = ServerPermissions.All.RawValue; | |||
| if (newPermissions != permissions.RawValue) | |||
| { | |||
| permissions = new ServerPermissions(newPermissions); | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| } | |||
| #endregion | |||
| #region Users | |||
| @@ -540,5 +538,5 @@ namespace Discord | |||
| private Server() { } //Used for cloning | |||
| public override string ToString() => Name ?? Id.ToIdString(); | |||
| } | |||
| } | |||
| } | |||