* Changed Guild#DefaultChannel to resolve the first accessible channel Resolves #776 This change is inline with hammerandchisel/discord-api-docs#329 RestGuild#DefaultChannelId is now obsolete and will throw a NotSupportedException. * RestGuild#DefaultChannelId will fall back to the guild ID Adding an exception here would be a breaking change, so this was agreed to fall back to the previous behavior, which would just return the guild ID.pull/794/merge
@@ -33,6 +33,8 @@ namespace Discord.Rest | |||||
internal bool Available { get; private set; } | internal bool Available { get; private set; } | ||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | ||||
[Obsolete("DefaultChannelId is deprecated, use GetDefaultChannelAsync")] | |||||
public ulong DefaultChannelId => Id; | public ulong DefaultChannelId => Id; | ||||
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId); | public string IconUrl => CDN.GetGuildIconUrl(Id, IconId); | ||||
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); | public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); | ||||
@@ -185,8 +187,12 @@ namespace Discord.Rest | |||||
} | } | ||||
public async Task<RestTextChannel> GetDefaultChannelAsync(RequestOptions options = null) | public async Task<RestTextChannel> GetDefaultChannelAsync(RequestOptions options = null) | ||||
{ | { | ||||
var channel = await GuildHelper.GetChannelAsync(this, Discord, DefaultChannelId, options).ConfigureAwait(false); | |||||
return channel as RestTextChannel; | |||||
var channels = await GetTextChannelsAsync(options).ConfigureAwait(false); | |||||
var user = await GetCurrentUserAsync(options).ConfigureAwait(false); | |||||
return channels | |||||
.Where(c => user.GetPermissions(c).ReadMessages) | |||||
.OrderBy(c => c.Position) | |||||
.FirstOrDefault(); | |||||
} | } | ||||
public async Task<RestGuildChannel> GetEmbedChannelAsync(RequestOptions options = null) | public async Task<RestGuildChannel> GetEmbedChannelAsync(RequestOptions options = null) | ||||
{ | { | ||||
@@ -54,7 +54,6 @@ namespace Discord.WebSocket | |||||
public string SplashId { get; private set; } | public string SplashId { get; private set; } | ||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | ||||
public SocketTextChannel DefaultChannel => GetTextChannel(Id); | |||||
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId); | public string IconUrl => CDN.GetGuildIconUrl(Id, IconId); | ||||
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); | public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId); | ||||
public bool HasAllMembers => MemberCount == DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted; | public bool HasAllMembers => MemberCount == DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted; | ||||
@@ -62,6 +61,10 @@ namespace Discord.WebSocket | |||||
public Task SyncPromise => _syncPromise.Task; | public Task SyncPromise => _syncPromise.Task; | ||||
public Task DownloaderPromise => _downloaderPromise.Task; | public Task DownloaderPromise => _downloaderPromise.Task; | ||||
public IAudioClient AudioClient => _audioClient; | public IAudioClient AudioClient => _audioClient; | ||||
public SocketTextChannel DefaultChannel => TextChannels | |||||
.Where(c => CurrentUser.GetPermissions(c).ReadMessages) | |||||
.OrderBy(c => c.Position) | |||||
.FirstOrDefault(); | |||||
public SocketVoiceChannel AFKChannel | public SocketVoiceChannel AFKChannel | ||||
{ | { | ||||
get | get | ||||
@@ -606,7 +609,7 @@ namespace Discord.WebSocket | |||||
ulong? IGuild.AFKChannelId => AFKChannelId; | ulong? IGuild.AFKChannelId => AFKChannelId; | ||||
IAudioClient IGuild.AudioClient => null; | IAudioClient IGuild.AudioClient => null; | ||||
bool IGuild.Available => true; | bool IGuild.Available => true; | ||||
ulong IGuild.DefaultChannelId => Id; | |||||
ulong IGuild.DefaultChannelId => DefaultChannel?.Id ?? 0; | |||||
ulong? IGuild.EmbedChannelId => EmbedChannelId; | ulong? IGuild.EmbedChannelId => EmbedChannelId; | ||||
IRole IGuild.EveryoneRole => EveryoneRole; | IRole IGuild.EveryoneRole => EveryoneRole; | ||||
IReadOnlyCollection<IRole> IGuild.Roles => Roles; | IReadOnlyCollection<IRole> IGuild.Roles => Roles; | ||||
@@ -64,7 +64,7 @@ namespace Discord | |||||
var text5 = textChannels.Where(x => x.Name == "text5").FirstOrDefault(); | var text5 = textChannels.Where(x => x.Name == "text5").FirstOrDefault(); | ||||
Assert.NotNull(text1); | Assert.NotNull(text1); | ||||
Assert.True(text1.Id == guild.DefaultChannelId); | |||||
//Assert.True(text1.Id == guild.DefaultChannelId); | |||||
Assert.Equal(text1.Position, 1); | Assert.Equal(text1.Position, 1); | ||||
Assert.Equal(text1.Topic, "Topic1"); | Assert.Equal(text1.Topic, "Topic1"); | ||||
@@ -57,7 +57,7 @@ namespace Discord | |||||
foreach (var channel in textChannels) | foreach (var channel in textChannels) | ||||
{ | { | ||||
if (channel.Id != guild.DefaultChannelId) | |||||
//if (channel.Id != guild.DefaultChannelId) | |||||
await channel.DeleteAsync(); | await channel.DeleteAsync(); | ||||
} | } | ||||
foreach (var channel in voiceChannels) | foreach (var channel in voiceChannels) | ||||