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

public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);

[Obsolete("DefaultChannelId is deprecated, use GetDefaultChannelAsync")]
public ulong DefaultChannelId => Id;
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId);
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId);
@@ -185,8 +187,12 @@ namespace Discord.Rest
}
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)
{


+ 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 DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id);
public SocketTextChannel DefaultChannel => GetTextChannel(Id);
public string IconUrl => CDN.GetGuildIconUrl(Id, IconId);
public string SplashUrl => CDN.GetGuildSplashUrl(Id, SplashId);
public bool HasAllMembers => MemberCount == DownloadedMemberCount;// _downloaderPromise.Task.IsCompleted;
@@ -62,6 +61,10 @@ namespace Discord.WebSocket
public Task SyncPromise => _syncPromise.Task;
public Task DownloaderPromise => _downloaderPromise.Task;
public IAudioClient AudioClient => _audioClient;
public SocketTextChannel DefaultChannel => TextChannels
.Where(c => CurrentUser.GetPermissions(c).ReadMessages)
.OrderBy(c => c.Position)
.FirstOrDefault();
public SocketVoiceChannel AFKChannel
{
get
@@ -606,7 +609,7 @@ namespace Discord.WebSocket
ulong? IGuild.AFKChannelId => AFKChannelId;
IAudioClient IGuild.AudioClient => null;
bool IGuild.Available => true;
ulong IGuild.DefaultChannelId => Id;
ulong IGuild.DefaultChannelId => DefaultChannel?.Id ?? 0;
ulong? IGuild.EmbedChannelId => EmbedChannelId;
IRole IGuild.EveryoneRole => EveryoneRole;
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();

Assert.NotNull(text1);
Assert.True(text1.Id == guild.DefaultChannelId);
//Assert.True(text1.Id == guild.DefaultChannelId);
Assert.Equal(text1.Position, 1);
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)
{
if (channel.Id != guild.DefaultChannelId)
//if (channel.Id != guild.DefaultChannelId)
await channel.DeleteAsync();
}
foreach (var channel in voiceChannels)


Loading…
Cancel
Save