|
|
@@ -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(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |