From 1b5d0546a70da4ef88dedd0badc7800781fe17a6 Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 19 Jun 2016 19:01:43 -0300 Subject: [PATCH] Redirected SocketClient's GetGuildEmbed, GetGuilds and GetVoiceRegions to the cache. --- src/Discord.Net/DiscordSocketClient.cs | 19 ++++++++++++++++++- .../Entities/WebSocket/CachedGuild.cs | 7 +++++-- .../Entities/WebSocket/CachedPublicUser.cs | 1 + 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net/DiscordSocketClient.cs b/src/Discord.Net/DiscordSocketClient.cs index 78439acc9..a4789c1bc 100644 --- a/src/Discord.Net/DiscordSocketClient.cs +++ b/src/Discord.Net/DiscordSocketClient.cs @@ -279,6 +279,18 @@ namespace Discord { return Task.FromResult(DataStore.GetGuild(id)); } + public override Task GetGuildEmbedAsync(ulong id) + { + var guild = DataStore.GetGuild(id); + if (guild != null) + return Task.FromResult(new GuildEmbed(guild.IsEmbeddable, guild.EmbedChannelId)); + else + return Task.FromResult(null); + } + public override Task> GetGuildsAsync() + { + return Task.FromResult>(Guilds); + } internal CachedGuild AddGuild(API.Gateway.ExtendedGuild model, DataStore dataStore) { var guild = new CachedGuild(this, model, dataStore); @@ -296,7 +308,7 @@ namespace Discord guild.RemoveUser(user.Id); return guild; } - + /// public override Task GetChannelAsync(ulong id) { @@ -385,6 +397,11 @@ namespace Discord } } + public override Task> GetVoiceRegionsAsync() + { + return Task.FromResult>(_voiceRegions.ToReadOnlyCollection()); + } + private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload) { #if BENCHMARK diff --git a/src/Discord.Net/Entities/WebSocket/CachedGuild.cs b/src/Discord.Net/Entities/WebSocket/CachedGuild.cs index 1c096630f..5bd9ae06b 100644 --- a/src/Discord.Net/Entities/WebSocket/CachedGuild.cs +++ b/src/Discord.Net/Entities/WebSocket/CachedGuild.cs @@ -16,7 +16,7 @@ using VoiceStateModel = Discord.API.VoiceState; namespace Discord { - internal class CachedGuild : Guild, ICachedEntity + internal class CachedGuild : Guild, IUserGuild, ICachedEntity { private TaskCompletionSource _downloaderPromise; private ConcurrentHashSet _channels; @@ -42,7 +42,7 @@ namespace Discord } } public IReadOnlyCollection Members => _members.ToReadOnlyCollection(); - + public CachedGuild(DiscordSocketClient discord, ExtendedModel model, DataStore dataStore) : base(discord, model) { _downloaderPromise = new TaskCompletionSource(); @@ -257,5 +257,8 @@ namespace Discord throw new InvalidOperationException($"Unknown channel type: {model.Type.Value}"); } } + + bool IUserGuild.IsOwner => OwnerId == Discord.CurrentUser.Id; + GuildPermissions IUserGuild.Permissions => CurrentUser.GuildPermissions; } } diff --git a/src/Discord.Net/Entities/WebSocket/CachedPublicUser.cs b/src/Discord.Net/Entities/WebSocket/CachedPublicUser.cs index 17c05d315..915c897a4 100644 --- a/src/Discord.Net/Entities/WebSocket/CachedPublicUser.cs +++ b/src/Discord.Net/Entities/WebSocket/CachedPublicUser.cs @@ -6,6 +6,7 @@ namespace Discord { internal class CachedPublicUser : User, ICachedUser { + //TODO: Fix removed game/status (add CachedDMUser?) private int _references; //private Game? _game; //private UserStatus _status;