Browse Source

Readded navigational props to interfaces

tags/1.0-rc
RogueException 8 years ago
parent
commit
c497f95d35
16 changed files with 98 additions and 22 deletions
  1. +2
    -0
      src/Discord.Net.Core/Entities/Channels/IGuildChannel.cs
  2. +1
    -0
      src/Discord.Net.Core/Entities/Guilds/IGuildIntegration.cs
  3. +5
    -1
      src/Discord.Net.Core/Entities/Invites/IInvite.cs
  4. +1
    -1
      src/Discord.Net.Core/Entities/Messages/IMessage.cs
  5. +2
    -0
      src/Discord.Net.Core/Entities/Users/IGuildUser.cs
  6. +1
    -1
      src/Discord.Net.Rest/ClientHelper.cs
  7. +2
    -2
      src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs
  8. +10
    -0
      src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs
  9. +3
    -3
      src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
  10. +14
    -3
      src/Discord.Net.Rest/Entities/Guilds/RestGuildIntegration.cs
  11. +31
    -6
      src/Discord.Net.Rest/Entities/Invites/RestInvite.cs
  12. +4
    -5
      src/Discord.Net.Rest/Entities/Invites/RestInviteMetadata.cs
  13. +11
    -0
      src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
  14. +9
    -0
      src/Discord.Net.Rpc/Entities/Channels/RpcGuildChannel.cs
  15. +1
    -0
      src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs
  16. +1
    -0
      src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs

+ 2
- 0
src/Discord.Net.Core/Entities/Channels/IGuildChannel.cs View File

@@ -10,6 +10,8 @@ namespace Discord
/// <summary> Gets the position of this channel in the guild's channel list, relative to others of the same type. </summary> /// <summary> Gets the position of this channel in the guild's channel list, relative to others of the same type. </summary>
int Position { get; } int Position { get; }


/// <summary> Gets the guild this channel is a member of. </summary>
IGuild Guild { get; }
/// <summary> Gets the id of the guild this channel is a member of. </summary> /// <summary> Gets the id of the guild this channel is a member of. </summary>
ulong GuildId { get; } ulong GuildId { get; }
/// <summary> Gets a collection of permission overwrites for this channel. </summary> /// <summary> Gets a collection of permission overwrites for this channel. </summary>


+ 1
- 0
src/Discord.Net.Core/Entities/Guilds/IGuildIntegration.cs View File

@@ -14,6 +14,7 @@ namespace Discord
DateTimeOffset SyncedAt { get; } DateTimeOffset SyncedAt { get; }
IntegrationAccount Account { get; } IntegrationAccount Account { get; }


IGuild Guild { get; }
ulong GuildId { get; } ulong GuildId { get; }
ulong RoleId { get; } ulong RoleId { get; }
IUser User { get; } IUser User { get; }


+ 5
- 1
src/Discord.Net.Core/Entities/Invites/IInvite.cs View File

@@ -9,8 +9,12 @@ namespace Discord
/// <summary> Gets the url used to accept this invite, using Code. </summary> /// <summary> Gets the url used to accept this invite, using Code. </summary>
string Url { get; } string Url { get; }


/// <summary> Gets the id of the the channel this invite is linked to. </summary>
/// <summary> Gets the channel this invite is linked to. </summary>
IChannel Channel { get; }
/// <summary> Gets the id of the channel this invite is linked to. </summary>
ulong ChannelId { get; } ulong ChannelId { get; }
/// <summary> Gets the guild this invite is linked to. </summary>
IGuild Guild { get; }
/// <summary> Gets the id of the guild this invite is linked to. </summary> /// <summary> Gets the id of the guild this invite is linked to. </summary>
ulong GuildId { get; } ulong GuildId { get; }




+ 1
- 1
src/Discord.Net.Core/Entities/Messages/IMessage.cs View File

@@ -20,7 +20,7 @@ namespace Discord
/// <summary> Gets the time of this message's last edit, if any. </summary> /// <summary> Gets the time of this message's last edit, if any. </summary>
DateTimeOffset? EditedTimestamp { get; } DateTimeOffset? EditedTimestamp { get; }
/// <summary> Gets the id of the channel this message was sent to. </summary>
/// <summary> Gets the channel this message was sent to. </summary>
IMessageChannel Channel { get; } IMessageChannel Channel { get; }
/// <summary> Gets the author of this message. </summary> /// <summary> Gets the author of this message. </summary>
IUser Author { get; } IUser Author { get; }


+ 2
- 0
src/Discord.Net.Core/Entities/Users/IGuildUser.cs View File

@@ -14,6 +14,8 @@ namespace Discord
string Nickname { get; } string Nickname { get; }
GuildPermissions GuildPermissions { get; } GuildPermissions GuildPermissions { get; }


/// <summary> Gets the guild for this user. </summary>
IGuild Guild { get; }
/// <summary> Gets the id of the guild for this user. </summary> /// <summary> Gets the id of the guild for this user. </summary>
ulong GuildId { get; } ulong GuildId { get; }
/// <summary> Returns a collection of the ids of the roles this user is a member of in this guild, including the guild's @everyone role. </summary> /// <summary> Returns a collection of the ids of the roles this user is a member of in this guild, including the guild's @everyone role. </summary>


+ 1
- 1
src/Discord.Net.Rest/ClientHelper.cs View File

@@ -41,7 +41,7 @@ namespace Discord.Rest
{ {
var model = await client.ApiClient.GetInviteAsync(inviteId).ConfigureAwait(false); var model = await client.ApiClient.GetInviteAsync(inviteId).ConfigureAwait(false);
if (model != null) if (model != null)
return RestInvite.Create(client, model);
return RestInvite.Create(client, null, null, model);
return null; return null;
} }


+ 2
- 2
src/Discord.Net.Rest/Entities/Channels/ChannelHelper.cs View File

@@ -47,7 +47,7 @@ namespace Discord.Rest
RequestOptions options) RequestOptions options)
{ {
var models = await client.ApiClient.GetChannelInvitesAsync(channel.Id, options).ConfigureAwait(false); var models = await client.ApiClient.GetChannelInvitesAsync(channel.Id, options).ConfigureAwait(false);
return models.Select(x => RestInviteMetadata.Create(client, x)).ToImmutableArray();
return models.Select(x => RestInviteMetadata.Create(client, null, channel, x)).ToImmutableArray();
} }
public static async Task<RestInviteMetadata> CreateInviteAsync(IChannel channel, BaseDiscordClient client, public static async Task<RestInviteMetadata> CreateInviteAsync(IChannel channel, BaseDiscordClient client,
int? maxAge, int? maxUses, bool isTemporary, RequestOptions options) int? maxAge, int? maxUses, bool isTemporary, RequestOptions options)
@@ -58,7 +58,7 @@ namespace Discord.Rest
if (maxUses.HasValue) if (maxUses.HasValue)
args.MaxUses = maxUses.Value; args.MaxUses = maxUses.Value;
var model = await client.ApiClient.CreateChannelInviteAsync(channel.Id, args, options).ConfigureAwait(false); var model = await client.ApiClient.CreateChannelInviteAsync(channel.Id, args, options).ConfigureAwait(false);
return RestInviteMetadata.Create(client, model);
return RestInviteMetadata.Create(client, null, channel, model);
} }


//Messages //Messages


+ 10
- 0
src/Discord.Net.Rest/Entities/Channels/RestGuildChannel.cs View File

@@ -125,6 +125,16 @@ namespace Discord.Rest
public override string ToString() => Name; public override string ToString() => Name;


//IGuildChannel //IGuildChannel
IGuild IGuildChannel.Guild
{
get
{
if (Guild != null)
return Guild;
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}

async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options)
=> await GetInvitesAsync(options).ConfigureAwait(false); => await GetInvitesAsync(options).ConfigureAwait(false);
async Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, RequestOptions options) async Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, RequestOptions options)


+ 3
- 3
src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs View File

@@ -117,14 +117,14 @@ namespace Discord.Rest
RequestOptions options) RequestOptions options)
{ {
var models = await client.ApiClient.GetGuildIntegrationsAsync(guild.Id, options).ConfigureAwait(false); var models = await client.ApiClient.GetGuildIntegrationsAsync(guild.Id, options).ConfigureAwait(false);
return models.Select(x => RestGuildIntegration.Create(client, x)).ToImmutableArray();
return models.Select(x => RestGuildIntegration.Create(client, guild, x)).ToImmutableArray();
} }
public static async Task<RestGuildIntegration> CreateIntegrationAsync(IGuild guild, BaseDiscordClient client, public static async Task<RestGuildIntegration> CreateIntegrationAsync(IGuild guild, BaseDiscordClient client,
ulong id, string type, RequestOptions options) ulong id, string type, RequestOptions options)
{ {
var args = new CreateGuildIntegrationParams(id, type); var args = new CreateGuildIntegrationParams(id, type);
var model = await client.ApiClient.CreateGuildIntegrationAsync(guild.Id, args, options).ConfigureAwait(false); var model = await client.ApiClient.CreateGuildIntegrationAsync(guild.Id, args, options).ConfigureAwait(false);
return RestGuildIntegration.Create(client, model);
return RestGuildIntegration.Create(client, guild, model);
} }


//Invites //Invites
@@ -132,7 +132,7 @@ namespace Discord.Rest
RequestOptions options) RequestOptions options)
{ {
var models = await client.ApiClient.GetGuildInvitesAsync(guild.Id, options).ConfigureAwait(false); var models = await client.ApiClient.GetGuildInvitesAsync(guild.Id, options).ConfigureAwait(false);
return models.Select(x => RestInviteMetadata.Create(client, x)).ToImmutableArray();
return models.Select(x => RestInviteMetadata.Create(client, guild, null, x)).ToImmutableArray();
} }


//Roles //Roles


+ 14
- 3
src/Discord.Net.Rest/Entities/Guilds/RestGuildIntegration.cs View File

@@ -21,16 +21,18 @@ namespace Discord.Rest
public ulong RoleId { get; private set; } public ulong RoleId { get; private set; }
public RestUser User { get; private set; } public RestUser User { get; private set; }
public IntegrationAccount Account { get; private set; } public IntegrationAccount Account { get; private set; }
internal IGuild Guild { get; private set; }


public DateTimeOffset SyncedAt => DateTimeUtils.FromTicks(_syncedAtTicks); public DateTimeOffset SyncedAt => DateTimeUtils.FromTicks(_syncedAtTicks);


internal RestGuildIntegration(BaseDiscordClient discord, ulong id)
internal RestGuildIntegration(BaseDiscordClient discord, IGuild guild, ulong id)
: base(discord, id) : base(discord, id)
{ {
Guild = guild;
} }
internal static RestGuildIntegration Create(BaseDiscordClient discord, Model model)
internal static RestGuildIntegration Create(BaseDiscordClient discord, IGuild guild, Model model)
{ {
var entity = new RestGuildIntegration(discord, model.Id);
var entity = new RestGuildIntegration(discord, guild, model.Id);
entity.Update(model); entity.Update(model);
return entity; return entity;
} }
@@ -71,6 +73,15 @@ namespace Discord.Rest
public override string ToString() => Name; public override string ToString() => Name;
private string DebuggerDisplay => $"{Name} ({Id}{(IsEnabled ? ", Enabled" : "")})"; private string DebuggerDisplay => $"{Name} ({Id}{(IsEnabled ? ", Enabled" : "")})";


IGuild IGuildIntegration.Guild
{
get
{
if (Guild != null)
return Guild;
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}
IUser IGuildIntegration.User => User; IUser IGuildIntegration.User => User;
} }
} }

+ 31
- 6
src/Discord.Net.Rest/Entities/Invites/RestInvite.cs View File

@@ -1,4 +1,5 @@
using System.Diagnostics;
using System;
using System.Diagnostics;
using System.Threading.Tasks; using System.Threading.Tasks;
using Model = Discord.API.Invite; using Model = Discord.API.Invite;


@@ -11,17 +12,21 @@ namespace Discord.Rest
public string GuildName { get; private set; } public string GuildName { get; private set; }
public ulong ChannelId { get; private set; } public ulong ChannelId { get; private set; }
public ulong GuildId { get; private set; } public ulong GuildId { get; private set; }
internal IChannel Channel { get; private set; }
internal IGuild Guild { get; private set; }


public string Code => Id; public string Code => Id;
public string Url => $"{DiscordConfig.InviteUrl}/{Code}"; public string Url => $"{DiscordConfig.InviteUrl}/{Code}";


internal RestInvite(BaseDiscordClient discord, string id)
internal RestInvite(BaseDiscordClient discord, IGuild guild, IChannel channel, string id)
: base(discord, id) : base(discord, id)
{ {
Guild = guild;
Channel = channel;
} }
internal static RestInvite Create(BaseDiscordClient discord, Model model)
internal static RestInvite Create(BaseDiscordClient discord, IGuild guild, IChannel channel, Model model)
{ {
var entity = new RestInvite(discord, model.Code);
var entity = new RestInvite(discord, guild, channel, model.Code);
entity.Update(model); entity.Update(model);
return entity; return entity;
} }
@@ -46,7 +51,27 @@ namespace Discord.Rest


public override string ToString() => Url; public override string ToString() => Url;
private string DebuggerDisplay => $"{Url} ({GuildName} / {ChannelName})"; private string DebuggerDisplay => $"{Url} ({GuildName} / {ChannelName})";

string IEntity<string>.Id => Code;
IGuild IInvite.Guild
{
get
{
if (Guild != null)
return Guild;
var guildChannel = Channel as IGuildChannel;
if (guildChannel != null)
return guildChannel.Guild; //If it fails, it'll still return this exception
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}
IChannel IInvite.Channel
{
get
{
if (Channel != null)
return Channel;
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}
} }
} }

+ 4
- 5
src/Discord.Net.Rest/Entities/Invites/RestInviteMetadata.cs View File

@@ -1,5 +1,4 @@
using System; using System;
using System.Diagnostics;
using Model = Discord.API.InviteMetadata; using Model = Discord.API.InviteMetadata;


namespace Discord.Rest namespace Discord.Rest
@@ -17,13 +16,13 @@ namespace Discord.Rest


public DateTimeOffset CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks); public DateTimeOffset CreatedAt => DateTimeUtils.FromTicks(_createdAtTicks);


internal RestInviteMetadata(BaseDiscordClient discord, string id)
: base(discord, id)
internal RestInviteMetadata(BaseDiscordClient discord, IGuild guild, IChannel channel, string id)
: base(discord, guild, channel, id)
{ {
} }
internal static RestInviteMetadata Create(BaseDiscordClient discord, Model model)
internal static RestInviteMetadata Create(BaseDiscordClient discord, IGuild guild, IChannel channel, Model model)
{ {
var entity = new RestInviteMetadata(discord, model.Code);
var entity = new RestInviteMetadata(discord, guild, channel, model.Code);
entity.Update(model); entity.Update(model);
return entity; return entity;
} }


+ 11
- 0
src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs View File

@@ -86,6 +86,17 @@ namespace Discord.Rest
return new ChannelPermissions(Permissions.ResolveChannel(Guild, this, channel, guildPerms.RawValue)); return new ChannelPermissions(Permissions.ResolveChannel(Guild, this, channel, guildPerms.RawValue));
} }


//IGuildUser
IGuild IGuildUser.Guild
{
get
{
if (Guild != null)
return Guild;
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}

//IVoiceState //IVoiceState
bool IVoiceState.IsSelfDeafened => false; bool IVoiceState.IsSelfDeafened => false;
bool IVoiceState.IsSelfMuted => false; bool IVoiceState.IsSelfMuted => false;


+ 9
- 0
src/Discord.Net.Rpc/Entities/Channels/RpcGuildChannel.cs View File

@@ -58,6 +58,15 @@ namespace Discord.Rpc
public override string ToString() => Name; public override string ToString() => Name;


//IGuildChannel //IGuildChannel
IGuild IGuildChannel.Guild
{
get
{
//Always fails
throw new InvalidOperationException("Unable to return this entity's parent unless it was fetched through that object.");
}
}

async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options)
=> await GetInvitesAsync(options).ConfigureAwait(false); => await GetInvitesAsync(options).ConfigureAwait(false);
async Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, RequestOptions options) async Task<IInviteMetadata> IGuildChannel.CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, RequestOptions options)


+ 1
- 0
src/Discord.Net.WebSocket/Entities/Channels/SocketGuildChannel.cs View File

@@ -126,6 +126,7 @@ namespace Discord.WebSocket
internal override SocketUser GetUserInternal(ulong id) => GetUser(id); internal override SocketUser GetUserInternal(ulong id) => GetUser(id);


//IGuildChannel //IGuildChannel
IGuild IGuildChannel.Guild => Guild;
ulong IGuildChannel.GuildId => Guild.Id; ulong IGuildChannel.GuildId => Guild.Id;


async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options) async Task<IReadOnlyCollection<IInviteMetadata>> IGuildChannel.GetInvitesAsync(RequestOptions options)


+ 1
- 0
src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs View File

@@ -93,6 +93,7 @@ namespace Discord.WebSocket
internal new SocketGuildUser Clone() => MemberwiseClone() as SocketGuildUser; internal new SocketGuildUser Clone() => MemberwiseClone() as SocketGuildUser;


//IGuildUser //IGuildUser
IGuild IGuildUser.Guild => Guild;
ulong IGuildUser.GuildId => Guild.Id; ulong IGuildUser.GuildId => Guild.Id;
IReadOnlyCollection<ulong> IGuildUser.RoleIds => RoleIds; IReadOnlyCollection<ulong> IGuildUser.RoleIds => RoleIds;




Loading…
Cancel
Save