@@ -279,6 +279,18 @@ namespace Discord | |||||
{ | { | ||||
return Task.FromResult<IGuild>(DataStore.GetGuild(id)); | return Task.FromResult<IGuild>(DataStore.GetGuild(id)); | ||||
} | } | ||||
public override Task<GuildEmbed?> GetGuildEmbedAsync(ulong id) | |||||
{ | |||||
var guild = DataStore.GetGuild(id); | |||||
if (guild != null) | |||||
return Task.FromResult<GuildEmbed?>(new GuildEmbed(guild.IsEmbeddable, guild.EmbedChannelId)); | |||||
else | |||||
return Task.FromResult<GuildEmbed?>(null); | |||||
} | |||||
public override Task<IReadOnlyCollection<IUserGuild>> GetGuildsAsync() | |||||
{ | |||||
return Task.FromResult<IReadOnlyCollection<IUserGuild>>(Guilds); | |||||
} | |||||
internal CachedGuild AddGuild(API.Gateway.ExtendedGuild model, DataStore dataStore) | internal CachedGuild AddGuild(API.Gateway.ExtendedGuild model, DataStore dataStore) | ||||
{ | { | ||||
var guild = new CachedGuild(this, model, dataStore); | var guild = new CachedGuild(this, model, dataStore); | ||||
@@ -296,7 +308,7 @@ namespace Discord | |||||
guild.RemoveUser(user.Id); | guild.RemoveUser(user.Id); | ||||
return guild; | return guild; | ||||
} | } | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public override Task<IChannel> GetChannelAsync(ulong id) | public override Task<IChannel> GetChannelAsync(ulong id) | ||||
{ | { | ||||
@@ -385,6 +397,11 @@ namespace Discord | |||||
} | } | ||||
} | } | ||||
public override Task<IReadOnlyCollection<IVoiceRegion>> GetVoiceRegionsAsync() | |||||
{ | |||||
return Task.FromResult<IReadOnlyCollection<IVoiceRegion>>(_voiceRegions.ToReadOnlyCollection()); | |||||
} | |||||
private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload) | private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload) | ||||
{ | { | ||||
#if BENCHMARK | #if BENCHMARK | ||||
@@ -16,7 +16,7 @@ using VoiceStateModel = Discord.API.VoiceState; | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
internal class CachedGuild : Guild, ICachedEntity<ulong> | |||||
internal class CachedGuild : Guild, IUserGuild, ICachedEntity<ulong> | |||||
{ | { | ||||
private TaskCompletionSource<bool> _downloaderPromise; | private TaskCompletionSource<bool> _downloaderPromise; | ||||
private ConcurrentHashSet<ulong> _channels; | private ConcurrentHashSet<ulong> _channels; | ||||
@@ -42,7 +42,7 @@ namespace Discord | |||||
} | } | ||||
} | } | ||||
public IReadOnlyCollection<CachedGuildUser> Members => _members.ToReadOnlyCollection(); | public IReadOnlyCollection<CachedGuildUser> Members => _members.ToReadOnlyCollection(); | ||||
public CachedGuild(DiscordSocketClient discord, ExtendedModel model, DataStore dataStore) : base(discord, model) | public CachedGuild(DiscordSocketClient discord, ExtendedModel model, DataStore dataStore) : base(discord, model) | ||||
{ | { | ||||
_downloaderPromise = new TaskCompletionSource<bool>(); | _downloaderPromise = new TaskCompletionSource<bool>(); | ||||
@@ -257,5 +257,8 @@ namespace Discord | |||||
throw new InvalidOperationException($"Unknown channel type: {model.Type.Value}"); | throw new InvalidOperationException($"Unknown channel type: {model.Type.Value}"); | ||||
} | } | ||||
} | } | ||||
bool IUserGuild.IsOwner => OwnerId == Discord.CurrentUser.Id; | |||||
GuildPermissions IUserGuild.Permissions => CurrentUser.GuildPermissions; | |||||
} | } | ||||
} | } |
@@ -6,6 +6,7 @@ namespace Discord | |||||
{ | { | ||||
internal class CachedPublicUser : User, ICachedUser | internal class CachedPublicUser : User, ICachedUser | ||||
{ | { | ||||
//TODO: Fix removed game/status (add CachedDMUser?) | |||||
private int _references; | private int _references; | ||||
//private Game? _game; | //private Game? _game; | ||||
//private UserStatus _status; | //private UserStatus _status; | ||||