* 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.tags/2.0.0-beta
| @@ -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) | ||||