Create methods to find guilds and channels in cache

This commit is contained in:
acw0 2020-07-22 04:07:18 -04:00
parent 94076dc9be
commit 56e4f1c00c

View File

@ -256,6 +256,28 @@ namespace PluralKit.Bot
public static Task<DiscordMessage> GetMessage(this DiscordRestClient client, ulong channel, ulong message) => public static Task<DiscordMessage> GetMessage(this DiscordRestClient client, ulong channel, ulong message) =>
WrapDiscordCall(client.GetMessageAsync(channel, message)); WrapDiscordCall(client.GetMessageAsync(channel, message));
public static DiscordGuild GetGuild(this DiscordShardedClient client, ulong id)
{
DiscordGuild guild;
foreach (DiscordClient shard in client.ShardClients.Values)
{
shard.Guilds.TryGetValue(id, out guild);
if (guild != null) return guild;
}
return null;
}
public static async Task<DiscordChannel> GetChannel(this DiscordShardedClient client, ulong id, ulong? guildId = null)
{
// we need to know the channel's guild ID to get the cached guild object, so we grab it from the API
if (guildId == null) {
var guild = await WrapDiscordCall(client.ShardClients.Values.FirstOrDefault().GetChannelAsync(id));
if (guild != null) guildId = guild.Id;
else return null; // we probably don't have the guild in cache if the API doesn't give it to us
}
return client.GetGuild(guildId.Value).GetChannel(id);
}
private static async Task<T> WrapDiscordCall<T>(Task<T> t) private static async Task<T> WrapDiscordCall<T>(Task<T> t)
where T: class where T: class
{ {