using Discord.Net.Queue;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Threading.Tasks;
namespace Discord.Rest
{
public class DiscordRestClient : BaseDiscordClient, IDiscordClient
{
public new RestSelfUser CurrentUser => base.CurrentUser as RestSelfUser;
public DiscordRestClient() : this(new DiscordRestConfig()) { }
public DiscordRestClient(DiscordRestConfig config) : base(config, CreateApiClient(config)) { }
private static API.DiscordRestApiClient CreateApiClient(DiscordRestConfig config)
=> new API.DiscordRestApiClient(config.RestClientProvider, DiscordRestConfig.UserAgent, requestQueue: new RequestQueue());
protected override Task OnLoginAsync(TokenType tokenType, string token)
{
base.CurrentUser = RestSelfUser.Create(this, ApiClient.CurrentUser);
return Task.CompletedTask;
}
///
public Task GetApplicationInfoAsync()
=> ClientHelper.GetApplicationInfoAsync(this);
///
public Task GetChannelAsync(ulong id)
=> ClientHelper.GetChannelAsync(this, id);
///
public Task> GetPrivateChannelsAsync()
=> ClientHelper.GetPrivateChannelsAsync(this);
///
public Task> GetConnectionsAsync()
=> ClientHelper.GetConnectionsAsync(this);
///
public Task GetInviteAsync(string inviteId)
=> ClientHelper.GetInviteAsync(this, inviteId);
///
public Task GetGuildAsync(ulong id)
=> ClientHelper.GetGuildAsync(this, id);
///
public Task GetGuildEmbedAsync(ulong id)
=> ClientHelper.GetGuildEmbedAsync(this, id);
///
public Task> GetGuildSummariesAsync()
=> ClientHelper.GetGuildSummariesAsync(this);
///
public Task> GetGuildsAsync()
=> ClientHelper.GetGuildsAsync(this);
///
public Task CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null)
=> ClientHelper.CreateGuildAsync(this, name, region, jpegIcon);
///
public Task GetUserAsync(ulong id)
=> ClientHelper.GetUserAsync(this, id);
///
public Task GetGuildUserAsync(ulong guildId, ulong id)
=> ClientHelper.GetGuildUserAsync(this, guildId, id);
///
public Task> GetVoiceRegionsAsync()
=> ClientHelper.GetVoiceRegionsAsync(this);
///
public Task GetVoiceRegionAsync(string id)
=> ClientHelper.GetVoiceRegionAsync(this, id);
//IDiscordClient
async Task IDiscordClient.GetApplicationInfoAsync()
=> await GetApplicationInfoAsync().ConfigureAwait(false);
async Task IDiscordClient.GetChannelAsync(ulong id, CacheMode mode)
{
if (mode == CacheMode.AllowDownload)
return await GetChannelAsync(id).ConfigureAwait(false);
else
return null;
}
async Task> IDiscordClient.GetPrivateChannelsAsync(CacheMode mode)
{
if (mode == CacheMode.AllowDownload)
return await GetPrivateChannelsAsync().ConfigureAwait(false);
else
return ImmutableArray.Create();
}
async Task> IDiscordClient.GetConnectionsAsync()
=> await GetConnectionsAsync().ConfigureAwait(false);
async Task IDiscordClient.GetInviteAsync(string inviteId)
=> await GetInviteAsync(inviteId).ConfigureAwait(false);
async Task IDiscordClient.GetGuildAsync(ulong id, CacheMode mode)
{
if (mode == CacheMode.AllowDownload)
return await GetGuildAsync(id).ConfigureAwait(false);
else
return null;
}
async Task> IDiscordClient.GetGuildsAsync(CacheMode mode)
{
if (mode == CacheMode.AllowDownload)
return await GetGuildsAsync().ConfigureAwait(false);
else
return ImmutableArray.Create();
}
async Task IDiscordClient.CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon)
=> await CreateGuildAsync(name, region, jpegIcon).ConfigureAwait(false);
async Task IDiscordClient.GetUserAsync(ulong id, CacheMode mode)
{
if (mode == CacheMode.AllowDownload)
return await GetUserAsync(id).ConfigureAwait(false);
else
return null;
}
async Task> IDiscordClient.GetVoiceRegionsAsync()
=> await GetVoiceRegionsAsync().ConfigureAwait(false);
async Task IDiscordClient.GetVoiceRegionAsync(string id)
=> await GetVoiceRegionAsync(id).ConfigureAwait(false);
}
}