Browse Source

Changed Guild#DefaultChannel to resolve the first accessible channel (#777)

* 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
Christopher F GitHub 7 years ago
parent
commit
1ffcd4bfa7
4 changed files with 15 additions and 6 deletions
  1. +8
    -2
      src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs
  2. +5
    -2
      src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs
  3. +1
    -1
      test/Discord.Net.Tests/Tests.Channels.cs
  4. +1
    -1
      test/Discord.Net.Tests/Tests.Migrations.cs

+ 8
- 2
src/Discord.Net.Rest/Entities/Guilds/RestGuild.cs View File

@@ -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)
{ {


+ 5
- 2
src/Discord.Net.WebSocket/Entities/Guilds/SocketGuild.cs View File

@@ -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;


+ 1
- 1
test/Discord.Net.Tests/Tests.Channels.cs View File

@@ -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");




+ 1
- 1
test/Discord.Net.Tests/Tests.Migrations.cs View File

@@ -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)


Loading…
Cancel
Save