| @@ -35,7 +35,7 @@ namespace Discord | |||||
| public DiscordClient(DiscordConfig config) | public DiscordClient(DiscordConfig config) | ||||
| { | { | ||||
| _log = new LogManager(config.LogLevel); | _log = new LogManager(config.LogLevel); | ||||
| _log.Message += async msg => await Log.Raise(msg).ConfigureAwait(false); | |||||
| _log.Message += async msg => await Log.RaiseAsync(msg).ConfigureAwait(false); | |||||
| _discordLogger = _log.CreateLogger("Discord"); | _discordLogger = _log.CreateLogger("Discord"); | ||||
| _restLogger = _log.CreateLogger("Rest"); | _restLogger = _log.CreateLogger("Rest"); | ||||
| @@ -44,34 +44,34 @@ namespace Discord | |||||
| //TODO: Is there any better way to do this WebSocketProvider access? | //TODO: Is there any better way to do this WebSocketProvider access? | ||||
| ApiClient = new API.DiscordApiClient(config.RestClientProvider, (config as DiscordSocketConfig)?.WebSocketProvider, requestQueue: _requestQueue); | ApiClient = new API.DiscordApiClient(config.RestClientProvider, (config as DiscordSocketConfig)?.WebSocketProvider, requestQueue: _requestQueue); | ||||
| ApiClient.SentRequest += async (method, endpoint, millis) => await _log.Verbose("Rest", $"{method} {endpoint}: {millis} ms").ConfigureAwait(false); | |||||
| ApiClient.SentRequest += async (method, endpoint, millis) => await _log.VerboseAsync("Rest", $"{method} {endpoint}: {millis} ms").ConfigureAwait(false); | |||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public async Task Login(TokenType tokenType, string token, bool validateToken = true) | |||||
| public async Task LoginAsync(TokenType tokenType, string token, bool validateToken = true) | |||||
| { | { | ||||
| await _connectionLock.WaitAsync().ConfigureAwait(false); | await _connectionLock.WaitAsync().ConfigureAwait(false); | ||||
| try | try | ||||
| { | { | ||||
| await LoginInternal(tokenType, token, validateToken).ConfigureAwait(false); | |||||
| await LoginInternalAsync(tokenType, token, validateToken).ConfigureAwait(false); | |||||
| } | } | ||||
| finally { _connectionLock.Release(); } | finally { _connectionLock.Release(); } | ||||
| } | } | ||||
| private async Task LoginInternal(TokenType tokenType, string token, bool validateToken) | |||||
| private async Task LoginInternalAsync(TokenType tokenType, string token, bool validateToken) | |||||
| { | { | ||||
| if (LoginState != LoginState.LoggedOut) | if (LoginState != LoginState.LoggedOut) | ||||
| await LogoutInternal().ConfigureAwait(false); | |||||
| await LogoutInternalAsync().ConfigureAwait(false); | |||||
| LoginState = LoginState.LoggingIn; | LoginState = LoginState.LoggingIn; | ||||
| try | try | ||||
| { | { | ||||
| await ApiClient.Login(tokenType, token).ConfigureAwait(false); | |||||
| await ApiClient.LoginAsync(tokenType, token).ConfigureAwait(false); | |||||
| if (validateToken) | if (validateToken) | ||||
| { | { | ||||
| try | try | ||||
| { | { | ||||
| await ApiClient.ValidateToken().ConfigureAwait(false); | |||||
| await ApiClient.ValidateTokenAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| catch (HttpException ex) | catch (HttpException ex) | ||||
| { | { | ||||
| @@ -79,63 +79,63 @@ namespace Discord | |||||
| } | } | ||||
| } | } | ||||
| await OnLogin().ConfigureAwait(false); | |||||
| await OnLoginAsync().ConfigureAwait(false); | |||||
| LoginState = LoginState.LoggedIn; | LoginState = LoginState.LoggedIn; | ||||
| } | } | ||||
| catch (Exception) | catch (Exception) | ||||
| { | { | ||||
| await LogoutInternal().ConfigureAwait(false); | |||||
| await LogoutInternalAsync().ConfigureAwait(false); | |||||
| throw; | throw; | ||||
| } | } | ||||
| await LoggedIn.Raise().ConfigureAwait(false); | |||||
| await LoggedIn.RaiseAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| protected virtual Task OnLogin() => Task.CompletedTask; | |||||
| protected virtual Task OnLoginAsync() => Task.CompletedTask; | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public async Task Logout() | |||||
| public async Task LogoutAsync() | |||||
| { | { | ||||
| await _connectionLock.WaitAsync().ConfigureAwait(false); | await _connectionLock.WaitAsync().ConfigureAwait(false); | ||||
| try | try | ||||
| { | { | ||||
| await LogoutInternal().ConfigureAwait(false); | |||||
| await LogoutInternalAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| finally { _connectionLock.Release(); } | finally { _connectionLock.Release(); } | ||||
| } | } | ||||
| private async Task LogoutInternal() | |||||
| private async Task LogoutInternalAsync() | |||||
| { | { | ||||
| if (LoginState == LoginState.LoggedOut) return; | if (LoginState == LoginState.LoggedOut) return; | ||||
| LoginState = LoginState.LoggingOut; | LoginState = LoginState.LoggingOut; | ||||
| await ApiClient.Logout().ConfigureAwait(false); | |||||
| await ApiClient.LogoutAsync().ConfigureAwait(false); | |||||
| await OnLogout().ConfigureAwait(false); | |||||
| await OnLogoutAsync().ConfigureAwait(false); | |||||
| _currentUser = null; | _currentUser = null; | ||||
| LoginState = LoginState.LoggedOut; | LoginState = LoginState.LoggedOut; | ||||
| await LoggedOut.Raise().ConfigureAwait(false); | |||||
| await LoggedOut.RaiseAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| protected virtual Task OnLogout() => Task.CompletedTask; | |||||
| protected virtual Task OnLogoutAsync() => Task.CompletedTask; | |||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public async Task<IReadOnlyCollection<IConnection>> GetConnections() | |||||
| public async Task<IReadOnlyCollection<IConnection>> GetConnectionsAsync() | |||||
| { | { | ||||
| var models = await ApiClient.GetCurrentUserConnections().ConfigureAwait(false); | |||||
| var models = await ApiClient.GetMyConnectionsAsync().ConfigureAwait(false); | |||||
| return models.Select(x => new Connection(x)).ToImmutableArray(); | return models.Select(x => new Connection(x)).ToImmutableArray(); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IChannel> GetChannel(ulong id) | |||||
| public virtual async Task<IChannel> GetChannelAsync(ulong id) | |||||
| { | { | ||||
| var model = await ApiClient.GetChannel(id).ConfigureAwait(false); | |||||
| var model = await ApiClient.GetChannelAsync(id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| { | { | ||||
| if (model.GuildId != null) | if (model.GuildId != null) | ||||
| { | { | ||||
| var guildModel = await ApiClient.GetGuild(model.GuildId.Value).ConfigureAwait(false); | |||||
| var guildModel = await ApiClient.GetGuildAsync(model.GuildId.Value).ConfigureAwait(false); | |||||
| if (guildModel != null) | if (guildModel != null) | ||||
| { | { | ||||
| var guild = new Guild(this, guildModel); | var guild = new Guild(this, guildModel); | ||||
| @@ -148,97 +148,97 @@ namespace Discord | |||||
| return null; | return null; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IReadOnlyCollection<IDMChannel>> GetDMChannels() | |||||
| public virtual async Task<IReadOnlyCollection<IDMChannel>> GetDMChannelsAsync() | |||||
| { | { | ||||
| var models = await ApiClient.GetCurrentUserDMs().ConfigureAwait(false); | |||||
| var models = await ApiClient.GetMyDMsAsync().ConfigureAwait(false); | |||||
| return models.Select(x => new DMChannel(this, new User(this, x.Recipient), x)).ToImmutableArray(); | return models.Select(x => new DMChannel(this, new User(this, x.Recipient), x)).ToImmutableArray(); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IInvite> GetInvite(string inviteIdOrXkcd) | |||||
| public virtual async Task<IInvite> GetInviteAsync(string inviteIdOrXkcd) | |||||
| { | { | ||||
| var model = await ApiClient.GetInvite(inviteIdOrXkcd).ConfigureAwait(false); | |||||
| var model = await ApiClient.GetInviteAsync(inviteIdOrXkcd).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new Invite(this, model); | return new Invite(this, model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IGuild> GetGuild(ulong id) | |||||
| public virtual async Task<IGuild> GetGuildAsync(ulong id) | |||||
| { | { | ||||
| var model = await ApiClient.GetGuild(id).ConfigureAwait(false); | |||||
| var model = await ApiClient.GetGuildAsync(id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new Guild(this, model); | return new Guild(this, model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<GuildEmbed?> GetGuildEmbed(ulong id) | |||||
| public virtual async Task<GuildEmbed?> GetGuildEmbedAsync(ulong id) | |||||
| { | { | ||||
| var model = await ApiClient.GetGuildEmbed(id).ConfigureAwait(false); | |||||
| var model = await ApiClient.GetGuildEmbedAsync(id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new GuildEmbed(model); | return new GuildEmbed(model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IReadOnlyCollection<IUserGuild>> GetGuilds() | |||||
| public virtual async Task<IReadOnlyCollection<IUserGuild>> GetGuildsAsync() | |||||
| { | { | ||||
| var models = await ApiClient.GetCurrentUserGuilds().ConfigureAwait(false); | |||||
| var models = await ApiClient.GetMyGuildsAsync().ConfigureAwait(false); | |||||
| return models.Select(x => new UserGuild(this, x)).ToImmutableArray(); | return models.Select(x => new UserGuild(this, x)).ToImmutableArray(); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IGuild> CreateGuild(string name, IVoiceRegion region, Stream jpegIcon = null) | |||||
| public virtual async Task<IGuild> CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null) | |||||
| { | { | ||||
| var args = new CreateGuildParams(); | var args = new CreateGuildParams(); | ||||
| var model = await ApiClient.CreateGuild(args).ConfigureAwait(false); | |||||
| var model = await ApiClient.CreateGuildAsync(args).ConfigureAwait(false); | |||||
| return new Guild(this, model); | return new Guild(this, model); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IUser> GetUser(ulong id) | |||||
| public virtual async Task<IUser> GetUserAsync(ulong id) | |||||
| { | { | ||||
| var model = await ApiClient.GetUser(id).ConfigureAwait(false); | |||||
| var model = await ApiClient.GetUserAsync(id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new User(this, model); | return new User(this, model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IUser> GetUser(string username, string discriminator) | |||||
| public virtual async Task<IUser> GetUserAsync(string username, string discriminator) | |||||
| { | { | ||||
| var model = await ApiClient.GetUser(username, discriminator).ConfigureAwait(false); | |||||
| var model = await ApiClient.GetUserAsync(username, discriminator).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new User(this, model); | return new User(this, model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<ISelfUser> GetCurrentUser() | |||||
| public virtual async Task<ISelfUser> GetCurrentUserAsync() | |||||
| { | { | ||||
| var user = _currentUser; | var user = _currentUser; | ||||
| if (user == null) | if (user == null) | ||||
| { | { | ||||
| var model = await ApiClient.GetCurrentUser().ConfigureAwait(false); | |||||
| var model = await ApiClient.GetSelfAsync().ConfigureAwait(false); | |||||
| user = new SelfUser(this, model); | user = new SelfUser(this, model); | ||||
| _currentUser = user; | _currentUser = user; | ||||
| } | } | ||||
| return user; | return user; | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IReadOnlyCollection<IUser>> QueryUsers(string query, int limit) | |||||
| public virtual async Task<IReadOnlyCollection<IUser>> QueryUsersAsync(string query, int limit) | |||||
| { | { | ||||
| var models = await ApiClient.QueryUsers(query, limit).ConfigureAwait(false); | |||||
| var models = await ApiClient.QueryUsersAsync(query, limit).ConfigureAwait(false); | |||||
| return models.Select(x => new User(this, x)).ToImmutableArray(); | return models.Select(x => new User(this, x)).ToImmutableArray(); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IReadOnlyCollection<IVoiceRegion>> GetVoiceRegions() | |||||
| public virtual async Task<IReadOnlyCollection<IVoiceRegion>> GetVoiceRegionsAsync() | |||||
| { | { | ||||
| var models = await ApiClient.GetVoiceRegions().ConfigureAwait(false); | |||||
| var models = await ApiClient.GetVoiceRegionsAsync().ConfigureAwait(false); | |||||
| return models.Select(x => new VoiceRegion(x)).ToImmutableArray(); | return models.Select(x => new VoiceRegion(x)).ToImmutableArray(); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public virtual async Task<IVoiceRegion> GetVoiceRegion(string id) | |||||
| public virtual async Task<IVoiceRegion> GetVoiceRegionAsync(string id) | |||||
| { | { | ||||
| var models = await ApiClient.GetVoiceRegions().ConfigureAwait(false); | |||||
| var models = await ApiClient.GetVoiceRegionsAsync().ConfigureAwait(false); | |||||
| return models.Select(x => new VoiceRegion(x)).Where(x => x.Id == id).FirstOrDefault(); | return models.Select(x => new VoiceRegion(x)).Where(x => x.Id == id).FirstOrDefault(); | ||||
| } | } | ||||
| @@ -251,7 +251,7 @@ namespace Discord | |||||
| public void Dispose() => Dispose(true); | public void Dispose() => Dispose(true); | ||||
| ConnectionState IDiscordClient.ConnectionState => ConnectionState.Disconnected; | ConnectionState IDiscordClient.ConnectionState => ConnectionState.Disconnected; | ||||
| Task IDiscordClient.Connect() { throw new NotSupportedException(); } | |||||
| Task IDiscordClient.Disconnect() { throw new NotSupportedException(); } | |||||
| Task IDiscordClient.ConnectAsync() { throw new NotSupportedException(); } | |||||
| Task IDiscordClient.DisconnectAsync() { throw new NotSupportedException(); } | |||||
| } | } | ||||
| } | } | ||||
| @@ -115,38 +115,38 @@ namespace Discord | |||||
| _serializer = new JsonSerializer { ContractResolver = new DiscordContractResolver() }; | _serializer = new JsonSerializer { ContractResolver = new DiscordContractResolver() }; | ||||
| ApiClient.SentGatewayMessage += async opCode => await _gatewayLogger.Debug($"Sent {(GatewayOpCode)opCode}"); | |||||
| ApiClient.ReceivedGatewayEvent += ProcessMessage; | |||||
| ApiClient.SentGatewayMessage += async opCode => await _gatewayLogger.DebugAsync($"Sent {(GatewayOpCode)opCode}"); | |||||
| ApiClient.ReceivedGatewayEvent += ProcessMessageAsync; | |||||
| GatewaySocket = config.WebSocketProvider(); | GatewaySocket = config.WebSocketProvider(); | ||||
| _voiceRegions = ImmutableDictionary.Create<string, VoiceRegion>(); | _voiceRegions = ImmutableDictionary.Create<string, VoiceRegion>(); | ||||
| _largeGuilds = new ConcurrentQueue<ulong>(); | _largeGuilds = new ConcurrentQueue<ulong>(); | ||||
| } | } | ||||
| protected override async Task OnLogin() | |||||
| protected override async Task OnLoginAsync() | |||||
| { | { | ||||
| var voiceRegions = await ApiClient.GetVoiceRegions().ConfigureAwait(false); | |||||
| var voiceRegions = await ApiClient.GetVoiceRegionsAsync().ConfigureAwait(false); | |||||
| _voiceRegions = voiceRegions.Select(x => new VoiceRegion(x)).ToImmutableDictionary(x => x.Id); | _voiceRegions = voiceRegions.Select(x => new VoiceRegion(x)).ToImmutableDictionary(x => x.Id); | ||||
| } | } | ||||
| protected override async Task OnLogout() | |||||
| protected override async Task OnLogoutAsync() | |||||
| { | { | ||||
| if (ConnectionState != ConnectionState.Disconnected) | if (ConnectionState != ConnectionState.Disconnected) | ||||
| await DisconnectInternal().ConfigureAwait(false); | |||||
| await DisconnectInternalAsync().ConfigureAwait(false); | |||||
| _voiceRegions = ImmutableDictionary.Create<string, VoiceRegion>(); | _voiceRegions = ImmutableDictionary.Create<string, VoiceRegion>(); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public async Task Connect() | |||||
| public async Task ConnectAsync() | |||||
| { | { | ||||
| await _connectionLock.WaitAsync().ConfigureAwait(false); | await _connectionLock.WaitAsync().ConfigureAwait(false); | ||||
| try | try | ||||
| { | { | ||||
| await ConnectInternal().ConfigureAwait(false); | |||||
| await ConnectInternalAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| finally { _connectionLock.Release(); } | finally { _connectionLock.Release(); } | ||||
| } | } | ||||
| private async Task ConnectInternal() | |||||
| private async Task ConnectInternalAsync() | |||||
| { | { | ||||
| if (LoginState != LoginState.LoggedIn) | if (LoginState != LoginState.LoggedIn) | ||||
| throw new InvalidOperationException("You must log in before connecting."); | throw new InvalidOperationException("You must log in before connecting."); | ||||
| @@ -156,47 +156,47 @@ namespace Discord | |||||
| { | { | ||||
| _connectTask = new TaskCompletionSource<bool>(); | _connectTask = new TaskCompletionSource<bool>(); | ||||
| _heartbeatCancelToken = new CancellationTokenSource(); | _heartbeatCancelToken = new CancellationTokenSource(); | ||||
| await ApiClient.Connect().ConfigureAwait(false); | |||||
| await ApiClient.ConnectAsync().ConfigureAwait(false); | |||||
| await _connectTask.Task.ConfigureAwait(false); | await _connectTask.Task.ConfigureAwait(false); | ||||
| ConnectionState = ConnectionState.Connected; | ConnectionState = ConnectionState.Connected; | ||||
| } | } | ||||
| catch (Exception) | catch (Exception) | ||||
| { | { | ||||
| await DisconnectInternal().ConfigureAwait(false); | |||||
| await DisconnectInternalAsync().ConfigureAwait(false); | |||||
| throw; | throw; | ||||
| } | } | ||||
| await Connected.Raise().ConfigureAwait(false); | |||||
| await Connected.RaiseAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public async Task Disconnect() | |||||
| public async Task DisconnectAsync() | |||||
| { | { | ||||
| await _connectionLock.WaitAsync().ConfigureAwait(false); | await _connectionLock.WaitAsync().ConfigureAwait(false); | ||||
| try | try | ||||
| { | { | ||||
| await DisconnectInternal().ConfigureAwait(false); | |||||
| await DisconnectInternalAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| finally { _connectionLock.Release(); } | finally { _connectionLock.Release(); } | ||||
| } | } | ||||
| private async Task DisconnectInternal() | |||||
| private async Task DisconnectInternalAsync() | |||||
| { | { | ||||
| ulong guildId; | ulong guildId; | ||||
| if (ConnectionState == ConnectionState.Disconnected) return; | if (ConnectionState == ConnectionState.Disconnected) return; | ||||
| ConnectionState = ConnectionState.Disconnecting; | ConnectionState = ConnectionState.Disconnecting; | ||||
| await ApiClient.Disconnect().ConfigureAwait(false); | |||||
| await ApiClient.DisconnectAsync().ConfigureAwait(false); | |||||
| await _heartbeatTask.ConfigureAwait(false); | await _heartbeatTask.ConfigureAwait(false); | ||||
| while (_largeGuilds.TryDequeue(out guildId)) { } | while (_largeGuilds.TryDequeue(out guildId)) { } | ||||
| ConnectionState = ConnectionState.Disconnected; | ConnectionState = ConnectionState.Disconnected; | ||||
| await Disconnected.Raise().ConfigureAwait(false); | |||||
| await Disconnected.RaiseAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public override Task<IVoiceRegion> GetVoiceRegion(string id) | |||||
| public override Task<IVoiceRegion> GetVoiceRegionAsync(string id) | |||||
| { | { | ||||
| VoiceRegion region; | VoiceRegion region; | ||||
| if (_voiceRegions.TryGetValue(id, out region)) | if (_voiceRegions.TryGetValue(id, out region)) | ||||
| @@ -205,7 +205,7 @@ namespace Discord | |||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public override Task<IGuild> GetGuild(ulong id) | |||||
| public override Task<IGuild> GetGuildAsync(ulong id) | |||||
| { | { | ||||
| return Task.FromResult<IGuild>(DataStore.GetGuild(id)); | return Task.FromResult<IGuild>(DataStore.GetGuild(id)); | ||||
| } | } | ||||
| @@ -237,7 +237,7 @@ namespace Discord | |||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public override Task<IChannel> GetChannel(ulong id) | |||||
| public override Task<IChannel> GetChannelAsync(ulong id) | |||||
| { | { | ||||
| return Task.FromResult<IChannel>(DataStore.GetChannel(id)); | return Task.FromResult<IChannel>(DataStore.GetChannel(id)); | ||||
| } | } | ||||
| @@ -284,12 +284,12 @@ namespace Discord | |||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public override Task<IUser> GetUser(ulong id) | |||||
| public override Task<IUser> GetUserAsync(ulong id) | |||||
| { | { | ||||
| return Task.FromResult<IUser>(DataStore.GetUser(id)); | return Task.FromResult<IUser>(DataStore.GetUser(id)); | ||||
| } | } | ||||
| /// <inheritdoc /> | /// <inheritdoc /> | ||||
| public override Task<IUser> GetUser(string username, string discriminator) | |||||
| public override Task<IUser> GetUserAsync(string username, string discriminator) | |||||
| { | { | ||||
| return Task.FromResult<IUser>(DataStore.Users.Where(x => x.Discriminator == discriminator && x.Username == username).FirstOrDefault()); | return Task.FromResult<IUser>(DataStore.Users.Where(x => x.Discriminator == discriminator && x.Username == username).FirstOrDefault()); | ||||
| } | } | ||||
| @@ -310,10 +310,10 @@ namespace Discord | |||||
| } | } | ||||
| /// <summary> Downloads the members list for all large guilds. </summary> | /// <summary> Downloads the members list for all large guilds. </summary> | ||||
| public Task DownloadAllMembers() | |||||
| => DownloadMembers(DataStore.Guilds.Where(x => !x.HasAllMembers)); | |||||
| public Task DownloadAllMembersAsync() | |||||
| => DownloadMembersAsync(DataStore.Guilds.Where(x => !x.HasAllMembers)); | |||||
| /// <summary> Downloads the members list for the provided guilds, if they don't have a complete list. </summary> | /// <summary> Downloads the members list for the provided guilds, if they don't have a complete list. </summary> | ||||
| public async Task DownloadMembers(IEnumerable<IGuild> guilds) | |||||
| public async Task DownloadMembersAsync(IEnumerable<IGuild> guilds) | |||||
| { | { | ||||
| const short batchSize = 50; | const short batchSize = 50; | ||||
| var cachedGuilds = guilds.Select(x => x as CachedGuild).ToArray(); | var cachedGuilds = guilds.Select(x => x as CachedGuild).ToArray(); | ||||
| @@ -321,7 +321,7 @@ namespace Discord | |||||
| return; | return; | ||||
| else if (cachedGuilds.Length == 1) | else if (cachedGuilds.Length == 1) | ||||
| { | { | ||||
| await cachedGuilds[0].DownloadMembers().ConfigureAwait(false); | |||||
| await cachedGuilds[0].DownloadMembersAsync().ConfigureAwait(false); | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -341,7 +341,7 @@ namespace Discord | |||||
| batchTasks[j] = guild.DownloaderPromise; | batchTasks[j] = guild.DownloaderPromise; | ||||
| } | } | ||||
| await ApiClient.SendRequestMembers(batchIds).ConfigureAwait(false); | |||||
| await ApiClient.SendRequestMembersAsync(batchIds).ConfigureAwait(false); | |||||
| if (isLast && batchCount > 1) | if (isLast && batchCount > 1) | ||||
| await Task.WhenAll(batchTasks.Take(count)).ConfigureAwait(false); | await Task.WhenAll(batchTasks.Take(count)).ConfigureAwait(false); | ||||
| @@ -350,7 +350,7 @@ namespace Discord | |||||
| } | } | ||||
| } | } | ||||
| private async Task ProcessMessage(GatewayOpCode opCode, int? seq, string type, object payload) | |||||
| private async Task ProcessMessageAsync(GatewayOpCode opCode, int? seq, string type, object payload) | |||||
| { | { | ||||
| #if BENCHMARK | #if BENCHMARK | ||||
| Stopwatch stopwatch = Stopwatch.StartNew(); | Stopwatch stopwatch = Stopwatch.StartNew(); | ||||
| @@ -365,22 +365,22 @@ namespace Discord | |||||
| { | { | ||||
| case GatewayOpCode.Hello: | case GatewayOpCode.Hello: | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Hello").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Hello").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<HelloEvent>(_serializer); | var data = (payload as JToken).ToObject<HelloEvent>(_serializer); | ||||
| await ApiClient.SendIdentify().ConfigureAwait(false); | |||||
| _heartbeatTask = RunHeartbeat(data.HeartbeatInterval, _heartbeatCancelToken.Token); | |||||
| await ApiClient.SendIdentifyAsync().ConfigureAwait(false); | |||||
| _heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _heartbeatCancelToken.Token); | |||||
| } | } | ||||
| break; | break; | ||||
| case GatewayOpCode.HeartbeatAck: | case GatewayOpCode.HeartbeatAck: | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received HeartbeatAck").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received HeartbeatAck").ConfigureAwait(false); | |||||
| var latency = (int)(Environment.TickCount - _heartbeatTime); | var latency = (int)(Environment.TickCount - _heartbeatTime); | ||||
| await _gatewayLogger.Debug($"Latency = {latency} ms").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Latency = {latency} ms").ConfigureAwait(false); | |||||
| Latency = latency; | Latency = latency; | ||||
| await LatencyUpdated.Raise(latency).ConfigureAwait(false); | |||||
| await LatencyUpdated.RaiseAsync(latency).ConfigureAwait(false); | |||||
| } | } | ||||
| break; | break; | ||||
| case GatewayOpCode.Dispatch: | case GatewayOpCode.Dispatch: | ||||
| @@ -389,7 +389,7 @@ namespace Discord | |||||
| //Global | //Global | ||||
| case "READY": | case "READY": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (READY)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (READY)").ConfigureAwait(false); | |||||
| //TODO: Make downloading large guilds optional | //TODO: Make downloading large guilds optional | ||||
| var data = (payload as JToken).ToObject<ReadyEvent>(_serializer); | var data = (payload as JToken).ToObject<ReadyEvent>(_serializer); | ||||
| @@ -405,7 +405,7 @@ namespace Discord | |||||
| _sessionId = data.SessionId; | _sessionId = data.SessionId; | ||||
| DataStore = dataStore; | DataStore = dataStore; | ||||
| await Ready.Raise().ConfigureAwait(false); | |||||
| await Ready.RaiseAsync().ConfigureAwait(false); | |||||
| _connectTask.TrySetResult(true); //Signal the .Connect() call to complete | _connectTask.TrySetResult(true); //Signal the .Connect() call to complete | ||||
| } | } | ||||
| @@ -420,17 +420,17 @@ namespace Discord | |||||
| if (data.Unavailable == false) | if (data.Unavailable == false) | ||||
| type = "GUILD_AVAILABLE"; | type = "GUILD_AVAILABLE"; | ||||
| await _gatewayLogger.Debug($"Received Dispatch ({type})").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false); | |||||
| if (data.Unavailable != false) | if (data.Unavailable != false) | ||||
| await JoinedGuild.Raise(guild).ConfigureAwait(false); | |||||
| await JoinedGuild.RaiseAsync(guild).ConfigureAwait(false); | |||||
| await GuildAvailable.Raise(guild).ConfigureAwait(false); | |||||
| await GuildAvailable.RaiseAsync(guild).ConfigureAwait(false); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_UPDATE": | case "GUILD_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Guild>(_serializer); | var data = (payload as JToken).ToObject<API.Guild>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.Id); | var guild = DataStore.GetGuild(data.Id); | ||||
| @@ -438,10 +438,10 @@ namespace Discord | |||||
| { | { | ||||
| var before = _enablePreUpdateEvents ? guild.Clone() : null; | var before = _enablePreUpdateEvents ? guild.Clone() : null; | ||||
| guild.Update(data, UpdateSource.WebSocket); | guild.Update(data, UpdateSource.WebSocket); | ||||
| await GuildUpdated.Raise(before, guild).ConfigureAwait(false); | |||||
| await GuildUpdated.RaiseAsync(before, guild).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_UPDATE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_UPDATE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_DELETE": | case "GUILD_DELETE": | ||||
| @@ -449,26 +449,26 @@ namespace Discord | |||||
| var data = (payload as JToken).ToObject<ExtendedGuild>(_serializer); | var data = (payload as JToken).ToObject<ExtendedGuild>(_serializer); | ||||
| if (data.Unavailable == true) | if (data.Unavailable == true) | ||||
| type = "GUILD_UNAVAILABLE"; | type = "GUILD_UNAVAILABLE"; | ||||
| await _gatewayLogger.Debug($"Received Dispatch ({type})").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false); | |||||
| var guild = DataStore.RemoveGuild(data.Id); | var guild = DataStore.RemoveGuild(data.Id); | ||||
| if (guild != null) | if (guild != null) | ||||
| { | { | ||||
| await GuildUnavailable.Raise(guild).ConfigureAwait(false); | |||||
| await GuildUnavailable.RaiseAsync(guild).ConfigureAwait(false); | |||||
| if (data.Unavailable != true) | if (data.Unavailable != true) | ||||
| await LeftGuild.Raise(guild).ConfigureAwait(false); | |||||
| await LeftGuild.RaiseAsync(guild).ConfigureAwait(false); | |||||
| foreach (var member in guild.Members) | foreach (var member in guild.Members) | ||||
| member.User.RemoveRef(); | member.User.RemoveRef(); | ||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning($"{type} referenced an unknown guild.").ConfigureAwait(false); | |||||
| await _gatewayLogger.WarningAsync($"{type} referenced an unknown guild.").ConfigureAwait(false); | |||||
| } | } | ||||
| break; | break; | ||||
| //Channels | //Channels | ||||
| case "CHANNEL_CREATE": | case "CHANNEL_CREATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (CHANNEL_CREATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (CHANNEL_CREATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Channel>(_serializer); | var data = (payload as JToken).ToObject<API.Channel>(_serializer); | ||||
| ICachedChannel channel = null; | ICachedChannel channel = null; | ||||
| @@ -481,17 +481,17 @@ namespace Discord | |||||
| DataStore.AddChannel(channel); | DataStore.AddChannel(channel); | ||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("CHANNEL_CREATE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("CHANNEL_CREATE referenced an unknown guild."); | |||||
| } | } | ||||
| else | else | ||||
| channel = AddCachedDMChannel(data); | channel = AddCachedDMChannel(data); | ||||
| if (channel != null) | if (channel != null) | ||||
| await ChannelCreated.Raise(channel); | |||||
| await ChannelCreated.RaiseAsync(channel); | |||||
| } | } | ||||
| break; | break; | ||||
| case "CHANNEL_UPDATE": | case "CHANNEL_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (CHANNEL_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (CHANNEL_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Channel>(_serializer); | var data = (payload as JToken).ToObject<API.Channel>(_serializer); | ||||
| var channel = DataStore.GetChannel(data.Id); | var channel = DataStore.GetChannel(data.Id); | ||||
| @@ -499,44 +499,44 @@ namespace Discord | |||||
| { | { | ||||
| var before = _enablePreUpdateEvents ? channel.Clone() : null; | var before = _enablePreUpdateEvents ? channel.Clone() : null; | ||||
| channel.Update(data, UpdateSource.WebSocket); | channel.Update(data, UpdateSource.WebSocket); | ||||
| await ChannelUpdated.Raise(before, channel); | |||||
| await ChannelUpdated.RaiseAsync(before, channel); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("CHANNEL_UPDATE referenced an unknown channel."); | |||||
| await _gatewayLogger.WarningAsync("CHANNEL_UPDATE referenced an unknown channel."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "CHANNEL_DELETE": | case "CHANNEL_DELETE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (CHANNEL_DELETE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (CHANNEL_DELETE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Channel>(_serializer); | var data = (payload as JToken).ToObject<API.Channel>(_serializer); | ||||
| var channel = RemoveCachedChannel(data.Id); | var channel = RemoveCachedChannel(data.Id); | ||||
| if (channel != null) | if (channel != null) | ||||
| await ChannelDestroyed.Raise(channel); | |||||
| await ChannelDestroyed.RaiseAsync(channel); | |||||
| else | else | ||||
| await _gatewayLogger.Warning("CHANNEL_DELETE referenced an unknown channel."); | |||||
| await _gatewayLogger.WarningAsync("CHANNEL_DELETE referenced an unknown channel."); | |||||
| } | } | ||||
| break; | break; | ||||
| //Members | //Members | ||||
| case "GUILD_MEMBER_ADD": | case "GUILD_MEMBER_ADD": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_MEMBER_ADD)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBER_ADD)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildMemberAddEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildMemberAddEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| if (guild != null) | if (guild != null) | ||||
| { | { | ||||
| var user = guild.AddCachedUser(data); | var user = guild.AddCachedUser(data); | ||||
| await UserJoined.Raise(user).ConfigureAwait(false); | |||||
| await UserJoined.RaiseAsync(user).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_MEMBER_ADD referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_MEMBER_ADD referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_MEMBER_UPDATE": | case "GUILD_MEMBER_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_MEMBER_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBER_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildMemberUpdateEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildMemberUpdateEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| @@ -547,18 +547,18 @@ namespace Discord | |||||
| { | { | ||||
| var before = _enablePreUpdateEvents ? user.Clone() : null; | var before = _enablePreUpdateEvents ? user.Clone() : null; | ||||
| user.Update(data, UpdateSource.WebSocket); | user.Update(data, UpdateSource.WebSocket); | ||||
| await UserUpdated.Raise(before, user); | |||||
| await UserUpdated.RaiseAsync(before, user); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_MEMBER_UPDATE referenced an unknown user."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_MEMBER_UPDATE referenced an unknown user."); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_MEMBER_UPDATE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_MEMBER_UPDATE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_MEMBER_REMOVE": | case "GUILD_MEMBER_REMOVE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_MEMBER_REMOVE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBER_REMOVE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildMemberRemoveEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildMemberRemoveEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| @@ -568,18 +568,18 @@ namespace Discord | |||||
| if (user != null) | if (user != null) | ||||
| { | { | ||||
| user.User.RemoveRef(); | user.User.RemoveRef(); | ||||
| await UserLeft.Raise(user); | |||||
| await UserLeft.RaiseAsync(user); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_MEMBER_REMOVE referenced an unknown user."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_MEMBER_REMOVE referenced an unknown user."); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_MEMBER_REMOVE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_MEMBER_REMOVE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_MEMBERS_CHUNK": | case "GUILD_MEMBERS_CHUNK": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_MEMBERS_CHUNK)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_MEMBERS_CHUNK)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildMembersChunkEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildMembersChunkEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| @@ -591,33 +591,33 @@ namespace Discord | |||||
| if (guild.DownloadedMemberCount >= guild.MemberCount) //Finished downloading for there | if (guild.DownloadedMemberCount >= guild.MemberCount) //Finished downloading for there | ||||
| { | { | ||||
| guild.CompleteDownloadMembers(); | guild.CompleteDownloadMembers(); | ||||
| await GuildDownloadedMembers.Raise(guild).ConfigureAwait(false); | |||||
| await GuildDownloadedMembers.RaiseAsync(guild).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_MEMBERS_CHUNK referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_MEMBERS_CHUNK referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| //Roles | //Roles | ||||
| case "GUILD_ROLE_CREATE": | case "GUILD_ROLE_CREATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_ROLE_CREATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_ROLE_CREATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildRoleCreateEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildRoleCreateEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| if (guild != null) | if (guild != null) | ||||
| { | { | ||||
| var role = guild.AddCachedRole(data.Role); | var role = guild.AddCachedRole(data.Role); | ||||
| await RoleCreated.Raise(role).ConfigureAwait(false); | |||||
| await RoleCreated.RaiseAsync(role).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_ROLE_CREATE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_ROLE_CREATE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_ROLE_UPDATE": | case "GUILD_ROLE_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_ROLE_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_ROLE_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildRoleUpdateEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildRoleUpdateEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| @@ -628,18 +628,18 @@ namespace Discord | |||||
| { | { | ||||
| var before = _enablePreUpdateEvents ? role.Clone() : null; | var before = _enablePreUpdateEvents ? role.Clone() : null; | ||||
| role.Update(data.Role, UpdateSource.WebSocket); | role.Update(data.Role, UpdateSource.WebSocket); | ||||
| await RoleUpdated.Raise(before, role).ConfigureAwait(false); | |||||
| await RoleUpdated.RaiseAsync(before, role).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_ROLE_UPDATE referenced an unknown role."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_ROLE_UPDATE referenced an unknown role."); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_ROLE_UPDATE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_ROLE_UPDATE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_ROLE_DELETE": | case "GUILD_ROLE_DELETE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_ROLE_DELETE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_ROLE_DELETE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildRoleDeleteEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildRoleDeleteEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| @@ -647,45 +647,45 @@ namespace Discord | |||||
| { | { | ||||
| var role = guild.RemoveCachedRole(data.RoleId); | var role = guild.RemoveCachedRole(data.RoleId); | ||||
| if (role != null) | if (role != null) | ||||
| await RoleDeleted.Raise(role).ConfigureAwait(false); | |||||
| await RoleDeleted.RaiseAsync(role).ConfigureAwait(false); | |||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_ROLE_DELETE referenced an unknown role."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_ROLE_DELETE referenced an unknown role."); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_ROLE_DELETE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_ROLE_DELETE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| //Bans | //Bans | ||||
| case "GUILD_BAN_ADD": | case "GUILD_BAN_ADD": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_BAN_ADD)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_BAN_ADD)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildBanEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildBanEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| if (guild != null) | if (guild != null) | ||||
| await UserBanned.Raise(new User(this, data)); | |||||
| await UserBanned.RaiseAsync(new User(this, data)); | |||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_BAN_ADD referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_BAN_ADD referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "GUILD_BAN_REMOVE": | case "GUILD_BAN_REMOVE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (GUILD_BAN_REMOVE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (GUILD_BAN_REMOVE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<GuildBanEvent>(_serializer); | var data = (payload as JToken).ToObject<GuildBanEvent>(_serializer); | ||||
| var guild = DataStore.GetGuild(data.GuildId); | var guild = DataStore.GetGuild(data.GuildId); | ||||
| if (guild != null) | if (guild != null) | ||||
| await UserUnbanned.Raise(new User(this, data)); | |||||
| await UserUnbanned.RaiseAsync(new User(this, data)); | |||||
| else | else | ||||
| await _gatewayLogger.Warning("GUILD_BAN_REMOVE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("GUILD_BAN_REMOVE referenced an unknown guild."); | |||||
| } | } | ||||
| break; | break; | ||||
| //Messages | //Messages | ||||
| case "MESSAGE_CREATE": | case "MESSAGE_CREATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Message>(_serializer); | var data = (payload as JToken).ToObject<API.Message>(_serializer); | ||||
| var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | ||||
| @@ -696,18 +696,18 @@ namespace Discord | |||||
| if (author != null) | if (author != null) | ||||
| { | { | ||||
| var msg = channel.AddCachedMessage(author, data); | var msg = channel.AddCachedMessage(author, data); | ||||
| await MessageReceived.Raise(msg).ConfigureAwait(false); | |||||
| await MessageReceived.RaiseAsync(msg).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("MESSAGE_CREATE referenced an unknown user."); | |||||
| await _gatewayLogger.WarningAsync("MESSAGE_CREATE referenced an unknown user."); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("MESSAGE_CREATE referenced an unknown channel."); | |||||
| await _gatewayLogger.WarningAsync("MESSAGE_CREATE referenced an unknown channel."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "MESSAGE_UPDATE": | case "MESSAGE_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Message>(_serializer); | var data = (payload as JToken).ToObject<API.Message>(_serializer); | ||||
| var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | ||||
| @@ -716,32 +716,32 @@ namespace Discord | |||||
| var msg = channel.GetCachedMessage(data.Id); | var msg = channel.GetCachedMessage(data.Id); | ||||
| var before = _enablePreUpdateEvents ? msg.Clone() : null; | var before = _enablePreUpdateEvents ? msg.Clone() : null; | ||||
| msg.Update(data, UpdateSource.WebSocket); | msg.Update(data, UpdateSource.WebSocket); | ||||
| await MessageUpdated.Raise(before, msg).ConfigureAwait(false); | |||||
| await MessageUpdated.RaiseAsync(before, msg).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("MESSAGE_UPDATE referenced an unknown channel."); | |||||
| await _gatewayLogger.WarningAsync("MESSAGE_UPDATE referenced an unknown channel."); | |||||
| } | } | ||||
| break; | break; | ||||
| case "MESSAGE_DELETE": | case "MESSAGE_DELETE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (MESSAGE_DELETE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (MESSAGE_DELETE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Message>(_serializer); | var data = (payload as JToken).ToObject<API.Message>(_serializer); | ||||
| var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | ||||
| if (channel != null) | if (channel != null) | ||||
| { | { | ||||
| var msg = channel.RemoveCachedMessage(data.Id); | var msg = channel.RemoveCachedMessage(data.Id); | ||||
| await MessageDeleted.Raise(msg).ConfigureAwait(false); | |||||
| await MessageDeleted.RaiseAsync(msg).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("MESSAGE_DELETE referenced an unknown channel."); | |||||
| await _gatewayLogger.WarningAsync("MESSAGE_DELETE referenced an unknown channel."); | |||||
| } | } | ||||
| break; | break; | ||||
| //Statuses | //Statuses | ||||
| case "PRESENCE_UPDATE": | case "PRESENCE_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (PRESENCE_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.Presence>(_serializer); | var data = (payload as JToken).ToObject<API.Presence>(_serializer); | ||||
| if (data.GuildId == null) | if (data.GuildId == null) | ||||
| @@ -755,7 +755,7 @@ namespace Discord | |||||
| var guild = DataStore.GetGuild(data.GuildId.Value); | var guild = DataStore.GetGuild(data.GuildId.Value); | ||||
| if (guild == null) | if (guild == null) | ||||
| { | { | ||||
| await _gatewayLogger.Warning("PRESENCE_UPDATE referenced an unknown guild."); | |||||
| await _gatewayLogger.WarningAsync("PRESENCE_UPDATE referenced an unknown guild."); | |||||
| break; | break; | ||||
| } | } | ||||
| if (data.Status == UserStatus.Offline) | if (data.Status == UserStatus.Offline) | ||||
| @@ -767,7 +767,7 @@ namespace Discord | |||||
| break; | break; | ||||
| case "TYPING_START": | case "TYPING_START": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (TYPING_START)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (TYPING_START)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<TypingStartEvent>(_serializer); | var data = (payload as JToken).ToObject<TypingStartEvent>(_serializer); | ||||
| var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | var channel = DataStore.GetChannel(data.ChannelId) as ICachedMessageChannel; | ||||
| @@ -775,17 +775,17 @@ namespace Discord | |||||
| { | { | ||||
| var user = channel.GetCachedUser(data.UserId); | var user = channel.GetCachedUser(data.UserId); | ||||
| if (user != null) | if (user != null) | ||||
| await UserIsTyping.Raise(channel, user).ConfigureAwait(false); | |||||
| await UserIsTyping.RaiseAsync(channel, user).ConfigureAwait(false); | |||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("TYPING_START referenced an unknown channel.").ConfigureAwait(false); | |||||
| await _gatewayLogger.WarningAsync("TYPING_START referenced an unknown channel.").ConfigureAwait(false); | |||||
| } | } | ||||
| break; | break; | ||||
| //Voice | //Voice | ||||
| case "VOICE_STATE_UPDATE": | case "VOICE_STATE_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (VOICE_STATE_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (VOICE_STATE_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.VoiceState>(_serializer); | var data = (payload as JToken).ToObject<API.VoiceState>(_serializer); | ||||
| if (data.GuildId.HasValue) | if (data.GuildId.HasValue) | ||||
| @@ -802,7 +802,7 @@ namespace Discord | |||||
| user.Update(data, UpdateSource.WebSocket); | user.Update(data, UpdateSource.WebSocket); | ||||
| } | } | ||||
| else | else | ||||
| await _gatewayLogger.Warning("VOICE_STATE_UPDATE referenced an unknown guild.").ConfigureAwait(false); | |||||
| await _gatewayLogger.WarningAsync("VOICE_STATE_UPDATE referenced an unknown guild.").ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -810,14 +810,14 @@ namespace Discord | |||||
| //Settings | //Settings | ||||
| case "USER_UPDATE": | case "USER_UPDATE": | ||||
| { | { | ||||
| await _gatewayLogger.Debug($"Received Dispatch (USER_UPDATE)").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Received Dispatch (USER_UPDATE)").ConfigureAwait(false); | |||||
| var data = (payload as JToken).ToObject<API.User>(_serializer); | var data = (payload as JToken).ToObject<API.User>(_serializer); | ||||
| if (data.Id == CurrentUser.Id) | if (data.Id == CurrentUser.Id) | ||||
| { | { | ||||
| var before = _enablePreUpdateEvents ? CurrentUser.Clone() : null; | var before = _enablePreUpdateEvents ? CurrentUser.Clone() : null; | ||||
| CurrentUser.Update(data, UpdateSource.WebSocket); | CurrentUser.Update(data, UpdateSource.WebSocket); | ||||
| await CurrentUserUpdated.Raise(before, CurrentUser).ConfigureAwait(false); | |||||
| await CurrentUserUpdated.RaiseAsync(before, CurrentUser).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -829,23 +829,23 @@ namespace Discord | |||||
| case "GUILD_INTEGRATIONS_UPDATE": //TODO: Add | case "GUILD_INTEGRATIONS_UPDATE": //TODO: Add | ||||
| case "VOICE_SERVER_UPDATE": //TODO: Add | case "VOICE_SERVER_UPDATE": //TODO: Add | ||||
| case "RESUMED": //TODO: Add | case "RESUMED": //TODO: Add | ||||
| await _gatewayLogger.Debug($"Ignored Dispatch ({type})").ConfigureAwait(false); | |||||
| await _gatewayLogger.DebugAsync($"Ignored Dispatch ({type})").ConfigureAwait(false); | |||||
| return; | return; | ||||
| //Others | //Others | ||||
| default: | default: | ||||
| await _gatewayLogger.Warning($"Unknown Dispatch ({type})").ConfigureAwait(false); | |||||
| await _gatewayLogger.WarningAsync($"Unknown Dispatch ({type})").ConfigureAwait(false); | |||||
| return; | return; | ||||
| } | } | ||||
| break; | break; | ||||
| default: | default: | ||||
| await _gatewayLogger.Warning($"Unknown OpCode ({opCode})").ConfigureAwait(false); | |||||
| await _gatewayLogger.WarningAsync($"Unknown OpCode ({opCode})").ConfigureAwait(false); | |||||
| return; | return; | ||||
| } | } | ||||
| } | } | ||||
| catch (Exception ex) | catch (Exception ex) | ||||
| { | { | ||||
| await _gatewayLogger.Error($"Error handling {opCode}{(type != null ? $" ({type})" : "")}", ex).ConfigureAwait(false); | |||||
| await _gatewayLogger.ErrorAsync($"Error handling {opCode}{(type != null ? $" ({type})" : "")}", ex).ConfigureAwait(false); | |||||
| return; | return; | ||||
| } | } | ||||
| #if BENCHMARK | #if BENCHMARK | ||||
| @@ -854,11 +854,11 @@ namespace Discord | |||||
| { | { | ||||
| stopwatch.Stop(); | stopwatch.Stop(); | ||||
| double millis = Math.Round(stopwatch.ElapsedTicks / (double)Stopwatch.Frequency * 1000.0, 2); | double millis = Math.Round(stopwatch.ElapsedTicks / (double)Stopwatch.Frequency * 1000.0, 2); | ||||
| await _benchmarkLogger.Debug($"{millis} ms").ConfigureAwait(false); | |||||
| await _benchmarkLogger.DebugAsync($"{millis} ms").ConfigureAwait(false); | |||||
| } | } | ||||
| #endif | #endif | ||||
| } | } | ||||
| private async Task RunHeartbeat(int intervalMillis, CancellationToken cancelToken) | |||||
| private async Task RunHeartbeatAsync(int intervalMillis, CancellationToken cancelToken) | |||||
| { | { | ||||
| try | try | ||||
| { | { | ||||
| @@ -868,7 +868,7 @@ namespace Discord | |||||
| //if (_heartbeatTime != 0) //TODO: Connection lost, reconnect | //if (_heartbeatTime != 0) //TODO: Connection lost, reconnect | ||||
| _heartbeatTime = Environment.TickCount; | _heartbeatTime = Environment.TickCount; | ||||
| await ApiClient.SendHeartbeat(_lastSeq).ConfigureAwait(false); | |||||
| await ApiClient.SendHeartbeatAsync(_lastSeq).ConfigureAwait(false); | |||||
| await Task.Delay(intervalMillis, cancelToken).ConfigureAwait(false); | await Task.Delay(intervalMillis, cancelToken).ConfigureAwait(false); | ||||
| } | } | ||||
| } | } | ||||
| @@ -33,21 +33,21 @@ namespace Discord | |||||
| Recipient.Update(model.Recipient, UpdateSource.Rest); | Recipient.Update(model.Recipient, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Update() | |||||
| public async Task UpdateAsync() | |||||
| { | { | ||||
| if (IsAttached) throw new NotSupportedException(); | if (IsAttached) throw new NotSupportedException(); | ||||
| var model = await Discord.ApiClient.GetChannel(Id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetChannelAsync(Id).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Close() | |||||
| public async Task CloseAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteChannel(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteChannelAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public virtual async Task<IUser> GetUser(ulong id) | |||||
| public virtual async Task<IUser> GetUserAsync(ulong id) | |||||
| { | { | ||||
| var currentUser = await Discord.GetCurrentUser().ConfigureAwait(false); | |||||
| var currentUser = await Discord.GetCurrentUserAsync().ConfigureAwait(false); | |||||
| if (id == Recipient.Id) | if (id == Recipient.Id) | ||||
| return Recipient; | return Recipient; | ||||
| else if (id == currentUser.Id) | else if (id == currentUser.Id) | ||||
| @@ -55,66 +55,66 @@ namespace Discord | |||||
| else | else | ||||
| return null; | return null; | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IUser>> GetUsers() | |||||
| public virtual async Task<IReadOnlyCollection<IUser>> GetUsersAsync() | |||||
| { | { | ||||
| var currentUser = await Discord.GetCurrentUser().ConfigureAwait(false); | |||||
| var currentUser = await Discord.GetCurrentUserAsync().ConfigureAwait(false); | |||||
| return ImmutableArray.Create<IUser>(currentUser, Recipient); | return ImmutableArray.Create<IUser>(currentUser, Recipient); | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IUser>> GetUsers(int limit, int offset) | |||||
| public virtual async Task<IReadOnlyCollection<IUser>> GetUsersAsync(int limit, int offset) | |||||
| { | { | ||||
| var currentUser = await Discord.GetCurrentUser().ConfigureAwait(false); | |||||
| var currentUser = await Discord.GetCurrentUserAsync().ConfigureAwait(false); | |||||
| return new IUser[] { currentUser, Recipient }.Skip(offset).Take(limit).ToImmutableArray(); | return new IUser[] { currentUser, Recipient }.Skip(offset).Take(limit).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<IMessage> SendMessage(string text, bool isTTS) | |||||
| public async Task<IMessage> SendMessageAsync(string text, bool isTTS) | |||||
| { | { | ||||
| var args = new CreateMessageParams { Content = text, IsTTS = isTTS }; | var args = new CreateMessageParams { Content = text, IsTTS = isTTS }; | ||||
| var model = await Discord.ApiClient.CreateDMMessage(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateDMMessageAsync(Id, args).ConfigureAwait(false); | |||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| } | } | ||||
| public async Task<IMessage> SendFile(string filePath, string text, bool isTTS) | |||||
| public async Task<IMessage> SendFileAsync(string filePath, string text, bool isTTS) | |||||
| { | { | ||||
| string filename = Path.GetFileName(filePath); | string filename = Path.GetFileName(filePath); | ||||
| using (var file = File.OpenRead(filePath)) | using (var file = File.OpenRead(filePath)) | ||||
| { | { | ||||
| var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | ||||
| var model = await Discord.ApiClient.UploadDMFile(Id, file, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.UploadDMFileAsync(Id, file, args).ConfigureAwait(false); | |||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| } | } | ||||
| } | } | ||||
| public async Task<IMessage> SendFile(Stream stream, string filename, string text, bool isTTS) | |||||
| public async Task<IMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS) | |||||
| { | { | ||||
| var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | ||||
| var model = await Discord.ApiClient.UploadDMFile(Id, stream, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.UploadDMFileAsync(Id, stream, args).ConfigureAwait(false); | |||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| } | } | ||||
| public virtual async Task<IMessage> GetMessage(ulong id) | |||||
| public virtual async Task<IMessage> GetMessageAsync(ulong id) | |||||
| { | { | ||||
| var model = await Discord.ApiClient.GetChannelMessage(Id, id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetChannelMessageAsync(Id, id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessages(int limit) | |||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit) | |||||
| { | { | ||||
| var args = new GetChannelMessagesParams { Limit = limit }; | var args = new GetChannelMessagesParams { Limit = limit }; | ||||
| var models = await Discord.ApiClient.GetChannelMessages(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetChannelMessagesAsync(Id, args).ConfigureAwait(false); | |||||
| return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessages(ulong fromMessageId, Direction dir, int limit) | |||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit) | |||||
| { | { | ||||
| var args = new GetChannelMessagesParams { Limit = limit }; | var args = new GetChannelMessagesParams { Limit = limit }; | ||||
| var models = await Discord.ApiClient.GetChannelMessages(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetChannelMessagesAsync(Id, args).ConfigureAwait(false); | |||||
| return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task DeleteMessages(IEnumerable<IMessage> messages) | |||||
| public async Task DeleteMessagesAsync(IEnumerable<IMessage> messages) | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteDMMessages(Id, new DeleteMessagesParams { MessageIds = messages.Select(x => x.Id) }).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteDMMessagesAsync(Id, new DeleteMessagesParams { MessageIds = messages.Select(x => x.Id) }).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task TriggerTyping() | |||||
| public async Task TriggerTypingAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.TriggerTypingIndicator(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.TriggerTypingIndicatorAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override string ToString() => '@' + Recipient.ToString(); | public override string ToString() => '@' + Recipient.ToString(); | ||||
| @@ -46,37 +46,37 @@ namespace Discord | |||||
| _overwrites = newOverwrites; | _overwrites = newOverwrites; | ||||
| } | } | ||||
| public async Task Update() | |||||
| public async Task UpdateAsync() | |||||
| { | { | ||||
| if (IsAttached) throw new NotSupportedException(); | if (IsAttached) throw new NotSupportedException(); | ||||
| var model = await Discord.ApiClient.GetChannel(Id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetChannelAsync(Id).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyGuildChannelParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyGuildChannelParams> func) | |||||
| { | { | ||||
| if (func != null) throw new NullReferenceException(nameof(func)); | if (func != null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyGuildChannelParams(); | var args = new ModifyGuildChannelParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyGuildChannel(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifyGuildChannelAsync(Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteChannel(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteChannelAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public abstract Task<IGuildUser> GetUser(ulong id); | |||||
| public abstract Task<IReadOnlyCollection<IGuildUser>> GetUsers(); | |||||
| public abstract Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset); | |||||
| public abstract Task<IGuildUser> GetUserAsync(ulong id); | |||||
| public abstract Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(); | |||||
| public abstract Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset); | |||||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvites() | |||||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync() | |||||
| { | { | ||||
| var models = await Discord.ApiClient.GetChannelInvites(Id).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetChannelInvitesAsync(Id).ConfigureAwait(false); | |||||
| return models.Select(x => new InviteMetadata(Discord, x)).ToImmutableArray(); | return models.Select(x => new InviteMetadata(Discord, x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<IInviteMetadata> CreateInvite(int? maxAge, int? maxUses, bool isTemporary, bool withXkcd) | |||||
| public async Task<IInviteMetadata> CreateInviteAsync(int? maxAge, int? maxUses, bool isTemporary, bool withXkcd) | |||||
| { | { | ||||
| var args = new CreateChannelInviteParams | var args = new CreateChannelInviteParams | ||||
| { | { | ||||
| @@ -85,7 +85,7 @@ namespace Discord | |||||
| Temporary = isTemporary, | Temporary = isTemporary, | ||||
| XkcdPass = withXkcd | XkcdPass = withXkcd | ||||
| }; | }; | ||||
| var model = await Discord.ApiClient.CreateChannelInvite(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateChannelInviteAsync(Id, args).ConfigureAwait(false); | |||||
| return new InviteMetadata(Discord, model); | return new InviteMetadata(Discord, model); | ||||
| } | } | ||||
| @@ -104,28 +104,28 @@ namespace Discord | |||||
| return null; | return null; | ||||
| } | } | ||||
| public async Task AddPermissionOverwrite(IUser user, OverwritePermissions perms) | |||||
| public async Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions perms) | |||||
| { | { | ||||
| var args = new ModifyChannelPermissionsParams { Allow = perms.AllowValue, Deny = perms.DenyValue }; | var args = new ModifyChannelPermissionsParams { Allow = perms.AllowValue, Deny = perms.DenyValue }; | ||||
| await Discord.ApiClient.ModifyChannelPermissions(Id, user.Id, args).ConfigureAwait(false); | |||||
| await Discord.ApiClient.ModifyChannelPermissionsAsync(Id, user.Id, args).ConfigureAwait(false); | |||||
| _overwrites[user.Id] = new Overwrite(new API.Overwrite { Allow = perms.AllowValue, Deny = perms.DenyValue, TargetId = user.Id, TargetType = PermissionTarget.User }); | _overwrites[user.Id] = new Overwrite(new API.Overwrite { Allow = perms.AllowValue, Deny = perms.DenyValue, TargetId = user.Id, TargetType = PermissionTarget.User }); | ||||
| } | } | ||||
| public async Task AddPermissionOverwrite(IRole role, OverwritePermissions perms) | |||||
| public async Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions perms) | |||||
| { | { | ||||
| var args = new ModifyChannelPermissionsParams { Allow = perms.AllowValue, Deny = perms.DenyValue }; | var args = new ModifyChannelPermissionsParams { Allow = perms.AllowValue, Deny = perms.DenyValue }; | ||||
| await Discord.ApiClient.ModifyChannelPermissions(Id, role.Id, args).ConfigureAwait(false); | |||||
| await Discord.ApiClient.ModifyChannelPermissionsAsync(Id, role.Id, args).ConfigureAwait(false); | |||||
| _overwrites[role.Id] = new Overwrite(new API.Overwrite { Allow = perms.AllowValue, Deny = perms.DenyValue, TargetId = role.Id, TargetType = PermissionTarget.Role }); | _overwrites[role.Id] = new Overwrite(new API.Overwrite { Allow = perms.AllowValue, Deny = perms.DenyValue, TargetId = role.Id, TargetType = PermissionTarget.Role }); | ||||
| } | } | ||||
| public async Task RemovePermissionOverwrite(IUser user) | |||||
| public async Task RemovePermissionOverwriteAsync(IUser user) | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteChannelPermission(Id, user.Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteChannelPermissionAsync(Id, user.Id).ConfigureAwait(false); | |||||
| Overwrite value; | Overwrite value; | ||||
| _overwrites.TryRemove(user.Id, out value); | _overwrites.TryRemove(user.Id, out value); | ||||
| } | } | ||||
| public async Task RemovePermissionOverwrite(IRole role) | |||||
| public async Task RemovePermissionOverwriteAsync(IRole role) | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteChannelPermission(Id, role.Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteChannelPermissionAsync(Id, role.Id).ConfigureAwait(false); | |||||
| Overwrite value; | Overwrite value; | ||||
| _overwrites.TryRemove(role.Id, out value); | _overwrites.TryRemove(role.Id, out value); | ||||
| @@ -137,8 +137,8 @@ namespace Discord | |||||
| IGuild IGuildChannel.Guild => Guild; | IGuild IGuildChannel.Guild => Guild; | ||||
| IReadOnlyCollection<Overwrite> IGuildChannel.PermissionOverwrites => _overwrites.ToReadOnlyCollection(); | IReadOnlyCollection<Overwrite> IGuildChannel.PermissionOverwrites => _overwrites.ToReadOnlyCollection(); | ||||
| async Task<IUser> IChannel.GetUser(ulong id) => await GetUser(id).ConfigureAwait(false); | |||||
| async Task<IReadOnlyCollection<IUser>> IChannel.GetUsers() => await GetUsers().ConfigureAwait(false); | |||||
| async Task<IReadOnlyCollection<IUser>> IChannel.GetUsers(int limit, int offset) => await GetUsers(limit, offset).ConfigureAwait(false); | |||||
| async Task<IUser> IChannel.GetUserAsync(ulong id) => await GetUserAsync(id).ConfigureAwait(false); | |||||
| async Task<IReadOnlyCollection<IUser>> IChannel.GetUsersAsync() => await GetUsersAsync().ConfigureAwait(false); | |||||
| async Task<IReadOnlyCollection<IUser>> IChannel.GetUsersAsync(int limit, int offset) => await GetUsersAsync(limit, offset).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| @@ -6,10 +6,10 @@ namespace Discord | |||||
| public interface IChannel : ISnowflakeEntity | public interface IChannel : ISnowflakeEntity | ||||
| { | { | ||||
| /// <summary> Gets a collection of all users in this channel. </summary> | /// <summary> Gets a collection of all users in this channel. </summary> | ||||
| Task<IReadOnlyCollection<IUser>> GetUsers(); | |||||
| Task<IReadOnlyCollection<IUser>> GetUsersAsync(); | |||||
| /// <summary> Gets a paginated collection of all users in this channel. </summary> | /// <summary> Gets a paginated collection of all users in this channel. </summary> | ||||
| Task<IReadOnlyCollection<IUser>> GetUsers(int limit, int offset = 0); | |||||
| Task<IReadOnlyCollection<IUser>> GetUsersAsync(int limit, int offset = 0); | |||||
| /// <summary> Gets a user in this channel with the provided id.</summary> | /// <summary> Gets a user in this channel with the provided id.</summary> | ||||
| Task<IUser> GetUser(ulong id); | |||||
| Task<IUser> GetUserAsync(ulong id); | |||||
| } | } | ||||
| } | } | ||||
| @@ -8,6 +8,6 @@ namespace Discord | |||||
| IUser Recipient { get; } | IUser Recipient { get; } | ||||
| /// <summary> Closes this private channel, removing it from your channel list. </summary> | /// <summary> Closes this private channel, removing it from your channel list. </summary> | ||||
| Task Close(); | |||||
| Task CloseAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -20,32 +20,32 @@ namespace Discord | |||||
| /// <param name="maxUses"> The max amount of times this invite may be used. Set to null to have unlimited uses. </param> | /// <param name="maxUses"> The max amount of times this invite may be used. Set to null to have unlimited uses. </param> | ||||
| /// <param name="isTemporary"> If true, a user accepting this invite will be kicked from the guild after closing their client. </param> | /// <param name="isTemporary"> If true, a user accepting this invite will be kicked from the guild after closing their client. </param> | ||||
| /// <param name="withXkcd"> If true, creates a human-readable link. Not supported if maxAge is set to null. </param> | /// <param name="withXkcd"> If true, creates a human-readable link. Not supported if maxAge is set to null. </param> | ||||
| Task<IInviteMetadata> CreateInvite(int? maxAge = 1800, int? maxUses = default(int?), bool isTemporary = false, bool withXkcd = false); | |||||
| Task<IInviteMetadata> CreateInviteAsync(int? maxAge = 1800, int? maxUses = default(int?), bool isTemporary = false, bool withXkcd = false); | |||||
| /// <summary> Returns a collection of all invites to this channel. </summary> | /// <summary> Returns a collection of all invites to this channel. </summary> | ||||
| Task<IReadOnlyCollection<IInviteMetadata>> GetInvites(); | |||||
| Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(); | |||||
| /// <summary> Gets a collection of permission overwrites for this channel. </summary> | /// <summary> Gets a collection of permission overwrites for this channel. </summary> | ||||
| IReadOnlyCollection<Overwrite> PermissionOverwrites { get; } | IReadOnlyCollection<Overwrite> PermissionOverwrites { get; } | ||||
| /// <summary> Modifies this guild channel. </summary> | /// <summary> Modifies this guild channel. </summary> | ||||
| Task Modify(Action<ModifyGuildChannelParams> func); | |||||
| Task ModifyAsync(Action<ModifyGuildChannelParams> func); | |||||
| /// <summary> Gets the permission overwrite for a specific role, or null if one does not exist. </summary> | /// <summary> Gets the permission overwrite for a specific role, or null if one does not exist. </summary> | ||||
| OverwritePermissions? GetPermissionOverwrite(IRole role); | OverwritePermissions? GetPermissionOverwrite(IRole role); | ||||
| /// <summary> Gets the permission overwrite for a specific user, or null if one does not exist. </summary> | /// <summary> Gets the permission overwrite for a specific user, or null if one does not exist. </summary> | ||||
| OverwritePermissions? GetPermissionOverwrite(IUser user); | OverwritePermissions? GetPermissionOverwrite(IUser user); | ||||
| /// <summary> Removes the permission overwrite for the given role, if one exists. </summary> | /// <summary> Removes the permission overwrite for the given role, if one exists. </summary> | ||||
| Task RemovePermissionOverwrite(IRole role); | |||||
| Task RemovePermissionOverwriteAsync(IRole role); | |||||
| /// <summary> Removes the permission overwrite for the given user, if one exists. </summary> | /// <summary> Removes the permission overwrite for the given user, if one exists. </summary> | ||||
| Task RemovePermissionOverwrite(IUser user); | |||||
| Task RemovePermissionOverwriteAsync(IUser user); | |||||
| /// <summary> Adds or updates the permission overwrite for the given role. </summary> | /// <summary> Adds or updates the permission overwrite for the given role. </summary> | ||||
| Task AddPermissionOverwrite(IRole role, OverwritePermissions permissions); | |||||
| Task AddPermissionOverwriteAsync(IRole role, OverwritePermissions permissions); | |||||
| /// <summary> Adds or updates the permission overwrite for the given user. </summary> | /// <summary> Adds or updates the permission overwrite for the given user. </summary> | ||||
| Task AddPermissionOverwrite(IUser user, OverwritePermissions permissions); | |||||
| Task AddPermissionOverwriteAsync(IUser user, OverwritePermissions permissions); | |||||
| /// <summary> Gets a collection of all users in this channel. </summary> | /// <summary> Gets a collection of all users in this channel. </summary> | ||||
| new Task<IReadOnlyCollection<IGuildUser>> GetUsers(); | |||||
| new Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(); | |||||
| /// <summary> Gets a user in this channel with the provided id.</summary> | /// <summary> Gets a user in this channel with the provided id.</summary> | ||||
| new Task<IGuildUser> GetUser(ulong id); | |||||
| new Task<IGuildUser> GetUserAsync(ulong id); | |||||
| } | } | ||||
| } | } | ||||
| @@ -10,24 +10,24 @@ namespace Discord | |||||
| IReadOnlyCollection<IMessage> CachedMessages { get; } | IReadOnlyCollection<IMessage> CachedMessages { get; } | ||||
| /// <summary> Sends a message to this message channel. </summary> | /// <summary> Sends a message to this message channel. </summary> | ||||
| Task<IMessage> SendMessage(string text, bool isTTS = false); | |||||
| Task<IMessage> SendMessageAsync(string text, bool isTTS = false); | |||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| Task<IMessage> SendFile(string filePath, string text = null, bool isTTS = false); | |||||
| Task<IMessage> SendFileAsync(string filePath, string text = null, bool isTTS = false); | |||||
| /// <summary> Sends a file to this text channel, with an optional caption. </summary> | /// <summary> Sends a file to this text channel, with an optional caption. </summary> | ||||
| Task<IMessage> SendFile(Stream stream, string filename, string text = null, bool isTTS = false); | |||||
| Task<IMessage> SendFileAsync(Stream stream, string filename, string text = null, bool isTTS = false); | |||||
| /// <summary> Gets a message from this message channel with the given id, or null if not found. </summary> | /// <summary> Gets a message from this message channel with the given id, or null if not found. </summary> | ||||
| Task<IMessage> GetMessage(ulong id); | |||||
| Task<IMessage> GetMessageAsync(ulong id); | |||||
| /// <summary> Gets the message from this channel's cache with the given id, or null if not found. </summary> | /// <summary> Gets the message from this channel's cache with the given id, or null if not found. </summary> | ||||
| IMessage GetCachedMessage(ulong id); | IMessage GetCachedMessage(ulong id); | ||||
| /// <summary> Gets the last N messages from this message channel. </summary> | /// <summary> Gets the last N messages from this message channel. </summary> | ||||
| Task<IReadOnlyCollection<IMessage>> GetMessages(int limit = DiscordConfig.MaxMessagesPerBatch); | |||||
| Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch); | |||||
| /// <summary> Gets a collection of messages in this channel. </summary> | /// <summary> Gets a collection of messages in this channel. </summary> | ||||
| Task<IReadOnlyCollection<IMessage>> GetMessages(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch); | |||||
| Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch); | |||||
| /// <summary> Bulk deletes multiple messages. </summary> | /// <summary> Bulk deletes multiple messages. </summary> | ||||
| Task DeleteMessages(IEnumerable<IMessage> messages); | |||||
| Task DeleteMessagesAsync(IEnumerable<IMessage> messages); | |||||
| /// <summary> Broadcasts the "user is typing" message to all users in this channel, lasting 10 seconds.</summary> | /// <summary> Broadcasts the "user is typing" message to all users in this channel, lasting 10 seconds.</summary> | ||||
| Task TriggerTyping(); | |||||
| Task TriggerTypingAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -10,6 +10,6 @@ namespace Discord | |||||
| string Topic { get; } | string Topic { get; } | ||||
| /// <summary> Modifies this text channel. </summary> | /// <summary> Modifies this text channel. </summary> | ||||
| Task Modify(Action<ModifyTextChannelParams> func); | |||||
| Task ModifyAsync(Action<ModifyTextChannelParams> func); | |||||
| } | } | ||||
| } | } | ||||
| @@ -12,6 +12,6 @@ namespace Discord | |||||
| int UserLimit { get; } | int UserLimit { get; } | ||||
| /// <summary> Modifies this voice channel. </summary> | /// <summary> Modifies this voice channel. </summary> | ||||
| Task Modify(Action<ModifyVoiceChannelParams> func); | |||||
| Task ModifyAsync(Action<ModifyVoiceChannelParams> func); | |||||
| } | } | ||||
| } | } | ||||
| @@ -30,83 +30,83 @@ namespace Discord | |||||
| base.Update(model, UpdateSource.Rest); | base.Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyTextChannelParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyTextChannelParams> func) | |||||
| { | { | ||||
| if (func != null) throw new NullReferenceException(nameof(func)); | if (func != null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyTextChannelParams(); | var args = new ModifyTextChannelParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyGuildChannel(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifyGuildChannelAsync(Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public override async Task<IGuildUser> GetUser(ulong id) | |||||
| public override async Task<IGuildUser> GetUserAsync(ulong id) | |||||
| { | { | ||||
| var user = await Guild.GetUser(id).ConfigureAwait(false); | |||||
| var user = await Guild.GetUserAsync(id).ConfigureAwait(false); | |||||
| if (user != null && Permissions.GetValue(Permissions.ResolveChannel(user, this, user.GuildPermissions.RawValue), ChannelPermission.ReadMessages)) | if (user != null && Permissions.GetValue(Permissions.ResolveChannel(user, this, user.GuildPermissions.RawValue), ChannelPermission.ReadMessages)) | ||||
| return user; | return user; | ||||
| return null; | return null; | ||||
| } | } | ||||
| public override async Task<IReadOnlyCollection<IGuildUser>> GetUsers() | |||||
| public override async Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() | |||||
| { | { | ||||
| var users = await Guild.GetUsers().ConfigureAwait(false); | |||||
| var users = await Guild.GetUsersAsync().ConfigureAwait(false); | |||||
| return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)).ToImmutableArray(); | return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)).ToImmutableArray(); | ||||
| } | } | ||||
| public override async Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset) | |||||
| public override async Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset) | |||||
| { | { | ||||
| var users = await Guild.GetUsers(limit, offset).ConfigureAwait(false); | |||||
| var users = await Guild.GetUsersAsync(limit, offset).ConfigureAwait(false); | |||||
| return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)).ToImmutableArray(); | return users.Where(x => Permissions.GetValue(Permissions.ResolveChannel(x, this, x.GuildPermissions.RawValue), ChannelPermission.ReadMessages)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<IMessage> SendMessage(string text, bool isTTS) | |||||
| public async Task<IMessage> SendMessageAsync(string text, bool isTTS) | |||||
| { | { | ||||
| var args = new CreateMessageParams { Content = text, IsTTS = isTTS }; | var args = new CreateMessageParams { Content = text, IsTTS = isTTS }; | ||||
| var model = await Discord.ApiClient.CreateMessage(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateMessageAsync(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| } | } | ||||
| public async Task<IMessage> SendFile(string filePath, string text, bool isTTS) | |||||
| public async Task<IMessage> SendFileAsync(string filePath, string text, bool isTTS) | |||||
| { | { | ||||
| string filename = Path.GetFileName(filePath); | string filename = Path.GetFileName(filePath); | ||||
| using (var file = File.OpenRead(filePath)) | using (var file = File.OpenRead(filePath)) | ||||
| { | { | ||||
| var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | ||||
| var model = await Discord.ApiClient.UploadFile(Guild.Id, Id, file, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.UploadFileAsync(Guild.Id, Id, file, args).ConfigureAwait(false); | |||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| } | } | ||||
| } | } | ||||
| public async Task<IMessage> SendFile(Stream stream, string filename, string text, bool isTTS) | |||||
| public async Task<IMessage> SendFileAsync(Stream stream, string filename, string text, bool isTTS) | |||||
| { | { | ||||
| var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | var args = new UploadFileParams { Filename = filename, Content = text, IsTTS = isTTS }; | ||||
| var model = await Discord.ApiClient.UploadFile(Guild.Id, Id, stream, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.UploadFileAsync(Guild.Id, Id, stream, args).ConfigureAwait(false); | |||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| } | } | ||||
| public virtual async Task<IMessage> GetMessage(ulong id) | |||||
| public virtual async Task<IMessage> GetMessageAsync(ulong id) | |||||
| { | { | ||||
| var model = await Discord.ApiClient.GetChannelMessage(Id, id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetChannelMessageAsync(Id, id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new Message(this, new User(Discord, model.Author), model); | return new Message(this, new User(Discord, model.Author), model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessages(int limit) | |||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit) | |||||
| { | { | ||||
| var args = new GetChannelMessagesParams { Limit = limit }; | var args = new GetChannelMessagesParams { Limit = limit }; | ||||
| var models = await Discord.ApiClient.GetChannelMessages(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetChannelMessagesAsync(Id, args).ConfigureAwait(false); | |||||
| return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessages(ulong fromMessageId, Direction dir, int limit) | |||||
| public virtual async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit) | |||||
| { | { | ||||
| var args = new GetChannelMessagesParams { Limit = limit }; | var args = new GetChannelMessagesParams { Limit = limit }; | ||||
| var models = await Discord.ApiClient.GetChannelMessages(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetChannelMessagesAsync(Id, args).ConfigureAwait(false); | |||||
| return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | return models.Select(x => new Message(this, new User(Discord, x.Author), x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task DeleteMessages(IEnumerable<IMessage> messages) | |||||
| public async Task DeleteMessagesAsync(IEnumerable<IMessage> messages) | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteMessages(Guild.Id, Id, new DeleteMessagesParams { MessageIds = messages.Select(x => x.Id) }).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteMessagesAsync(Guild.Id, Id, new DeleteMessagesParams { MessageIds = messages.Select(x => x.Id) }).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task TriggerTyping() | |||||
| public async Task TriggerTypingAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.TriggerTypingIndicator(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.TriggerTypingIndicatorAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | private string DebuggerDisplay => $"{Name} ({Id}, Text)"; | ||||
| @@ -26,25 +26,25 @@ namespace Discord | |||||
| UserLimit = model.UserLimit; | UserLimit = model.UserLimit; | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyVoiceChannelParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyVoiceChannelParams> func) | |||||
| { | { | ||||
| if (func != null) throw new NullReferenceException(nameof(func)); | if (func != null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyVoiceChannelParams(); | var args = new ModifyVoiceChannelParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyGuildChannel(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifyGuildChannelAsync(Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public override Task<IGuildUser> GetUser(ulong id) | |||||
| public override Task<IGuildUser> GetUserAsync(ulong id) | |||||
| { | { | ||||
| throw new NotSupportedException(); | throw new NotSupportedException(); | ||||
| } | } | ||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers() | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() | |||||
| { | { | ||||
| throw new NotSupportedException(); | throw new NotSupportedException(); | ||||
| } | } | ||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset) | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset) | |||||
| { | { | ||||
| throw new NotSupportedException(); | throw new NotSupportedException(); | ||||
| } | } | ||||
| @@ -103,114 +103,114 @@ namespace Discord | |||||
| } | } | ||||
| } | } | ||||
| public async Task Update() | |||||
| public async Task UpdateAsync() | |||||
| { | { | ||||
| if (IsAttached) throw new NotSupportedException(); | if (IsAttached) throw new NotSupportedException(); | ||||
| var response = await Discord.ApiClient.GetGuild(Id).ConfigureAwait(false); | |||||
| var response = await Discord.ApiClient.GetGuildAsync(Id).ConfigureAwait(false); | |||||
| Update(response, UpdateSource.Rest); | Update(response, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyGuildParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyGuildParams> func) | |||||
| { | { | ||||
| if (func == null) throw new NullReferenceException(nameof(func)); | if (func == null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyGuildParams(); | var args = new ModifyGuildParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyGuild(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifyGuildAsync(Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task ModifyEmbed(Action<ModifyGuildEmbedParams> func) | |||||
| public async Task ModifyEmbedAsync(Action<ModifyGuildEmbedParams> func) | |||||
| { | { | ||||
| if (func == null) throw new NullReferenceException(nameof(func)); | if (func == null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyGuildEmbedParams(); | var args = new ModifyGuildEmbedParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyGuildEmbed(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifyGuildEmbedAsync(Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task ModifyChannels(IEnumerable<ModifyGuildChannelsParams> args) | |||||
| public async Task ModifyChannelsAsync(IEnumerable<ModifyGuildChannelsParams> args) | |||||
| { | { | ||||
| //TODO: Update channels | //TODO: Update channels | ||||
| await Discord.ApiClient.ModifyGuildChannels(Id, args).ConfigureAwait(false); | |||||
| await Discord.ApiClient.ModifyGuildChannelsAsync(Id, args).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task ModifyRoles(IEnumerable<ModifyGuildRolesParams> args) | |||||
| public async Task ModifyRolesAsync(IEnumerable<ModifyGuildRolesParams> args) | |||||
| { | { | ||||
| var models = await Discord.ApiClient.ModifyGuildRoles(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.ModifyGuildRolesAsync(Id, args).ConfigureAwait(false); | |||||
| Update(models, UpdateSource.Rest); | Update(models, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Leave() | |||||
| public async Task LeaveAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.LeaveGuild(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.LeaveGuildAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteGuild(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteGuildAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task<IReadOnlyCollection<IUser>> GetBans() | |||||
| public async Task<IReadOnlyCollection<IUser>> GetBansAsync() | |||||
| { | { | ||||
| var models = await Discord.ApiClient.GetGuildBans(Id).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetGuildBansAsync(Id).ConfigureAwait(false); | |||||
| return models.Select(x => new User(Discord, x)).ToImmutableArray(); | return models.Select(x => new User(Discord, x)).ToImmutableArray(); | ||||
| } | } | ||||
| public Task AddBan(IUser user, int pruneDays = 0) => AddBan(user, pruneDays); | |||||
| public async Task AddBan(ulong userId, int pruneDays = 0) | |||||
| public Task AddBanAsync(IUser user, int pruneDays = 0) => AddBanAsync(user, pruneDays); | |||||
| public async Task AddBanAsync(ulong userId, int pruneDays = 0) | |||||
| { | { | ||||
| var args = new CreateGuildBanParams() { PruneDays = pruneDays }; | var args = new CreateGuildBanParams() { PruneDays = pruneDays }; | ||||
| await Discord.ApiClient.CreateGuildBan(Id, userId, args).ConfigureAwait(false); | |||||
| await Discord.ApiClient.CreateGuildBanAsync(Id, userId, args).ConfigureAwait(false); | |||||
| } | } | ||||
| public Task RemoveBan(IUser user) => RemoveBan(user.Id); | |||||
| public async Task RemoveBan(ulong userId) | |||||
| public Task RemoveBanAsync(IUser user) => RemoveBanAsync(user.Id); | |||||
| public async Task RemoveBanAsync(ulong userId) | |||||
| { | { | ||||
| await Discord.ApiClient.RemoveGuildBan(Id, userId).ConfigureAwait(false); | |||||
| await Discord.ApiClient.RemoveGuildBanAsync(Id, userId).ConfigureAwait(false); | |||||
| } | } | ||||
| public virtual async Task<IGuildChannel> GetChannel(ulong id) | |||||
| public virtual async Task<IGuildChannel> GetChannelAsync(ulong id) | |||||
| { | { | ||||
| var model = await Discord.ApiClient.GetChannel(Id, id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetChannelAsync(Id, id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return ToChannel(model); | return ToChannel(model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IGuildChannel>> GetChannels() | |||||
| public virtual async Task<IReadOnlyCollection<IGuildChannel>> GetChannelsAsync() | |||||
| { | { | ||||
| var models = await Discord.ApiClient.GetGuildChannels(Id).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetGuildChannelsAsync(Id).ConfigureAwait(false); | |||||
| return models.Select(x => ToChannel(x)).ToImmutableArray(); | return models.Select(x => ToChannel(x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<ITextChannel> CreateTextChannel(string name) | |||||
| public async Task<ITextChannel> CreateTextChannelAsync(string name) | |||||
| { | { | ||||
| if (name == null) throw new ArgumentNullException(nameof(name)); | if (name == null) throw new ArgumentNullException(nameof(name)); | ||||
| var args = new CreateGuildChannelParams() { Name = name, Type = ChannelType.Text }; | var args = new CreateGuildChannelParams() { Name = name, Type = ChannelType.Text }; | ||||
| var model = await Discord.ApiClient.CreateGuildChannel(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateGuildChannelAsync(Id, args).ConfigureAwait(false); | |||||
| return new TextChannel(this, model); | return new TextChannel(this, model); | ||||
| } | } | ||||
| public async Task<IVoiceChannel> CreateVoiceChannel(string name) | |||||
| public async Task<IVoiceChannel> CreateVoiceChannelAsync(string name) | |||||
| { | { | ||||
| if (name == null) throw new ArgumentNullException(nameof(name)); | if (name == null) throw new ArgumentNullException(nameof(name)); | ||||
| var args = new CreateGuildChannelParams { Name = name, Type = ChannelType.Voice }; | var args = new CreateGuildChannelParams { Name = name, Type = ChannelType.Voice }; | ||||
| var model = await Discord.ApiClient.CreateGuildChannel(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateGuildChannelAsync(Id, args).ConfigureAwait(false); | |||||
| return new VoiceChannel(this, model); | return new VoiceChannel(this, model); | ||||
| } | } | ||||
| public async Task<IReadOnlyCollection<IGuildIntegration>> GetIntegrations() | |||||
| public async Task<IReadOnlyCollection<IGuildIntegration>> GetIntegrationsAsync() | |||||
| { | { | ||||
| var models = await Discord.ApiClient.GetGuildIntegrations(Id).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetGuildIntegrationsAsync(Id).ConfigureAwait(false); | |||||
| return models.Select(x => new GuildIntegration(this, x)).ToImmutableArray(); | return models.Select(x => new GuildIntegration(this, x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<IGuildIntegration> CreateIntegration(ulong id, string type) | |||||
| public async Task<IGuildIntegration> CreateIntegrationAsync(ulong id, string type) | |||||
| { | { | ||||
| var args = new CreateGuildIntegrationParams { Id = id, Type = type }; | var args = new CreateGuildIntegrationParams { Id = id, Type = type }; | ||||
| var model = await Discord.ApiClient.CreateGuildIntegration(Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateGuildIntegrationAsync(Id, args).ConfigureAwait(false); | |||||
| return new GuildIntegration(this, model); | return new GuildIntegration(this, model); | ||||
| } | } | ||||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvites() | |||||
| public async Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync() | |||||
| { | { | ||||
| var models = await Discord.ApiClient.GetGuildInvites(Id).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetGuildInvitesAsync(Id).ConfigureAwait(false); | |||||
| return models.Select(x => new InviteMetadata(Discord, x)).ToImmutableArray(); | return models.Select(x => new InviteMetadata(Discord, x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<IInviteMetadata> CreateInvite(int? maxAge = 1800, int? maxUses = null, bool isTemporary = false, bool withXkcd = false) | |||||
| public async Task<IInviteMetadata> CreateInviteAsync(int? maxAge = 1800, int? maxUses = null, bool isTemporary = false, bool withXkcd = false) | |||||
| { | { | ||||
| if (maxAge <= 0) throw new ArgumentOutOfRangeException(nameof(maxAge)); | if (maxAge <= 0) throw new ArgumentOutOfRangeException(nameof(maxAge)); | ||||
| if (maxUses <= 0) throw new ArgumentOutOfRangeException(nameof(maxUses)); | if (maxUses <= 0) throw new ArgumentOutOfRangeException(nameof(maxUses)); | ||||
| @@ -222,7 +222,7 @@ namespace Discord | |||||
| Temporary = isTemporary, | Temporary = isTemporary, | ||||
| XkcdPass = withXkcd | XkcdPass = withXkcd | ||||
| }; | }; | ||||
| var model = await Discord.ApiClient.CreateChannelInvite(DefaultChannelId, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateChannelInviteAsync(DefaultChannelId, args).ConfigureAwait(false); | |||||
| return new InviteMetadata(Discord, model); | return new InviteMetadata(Discord, model); | ||||
| } | } | ||||
| @@ -233,14 +233,14 @@ namespace Discord | |||||
| return result; | return result; | ||||
| return null; | return null; | ||||
| } | } | ||||
| public async Task<IRole> CreateRole(string name, GuildPermissions? permissions = null, Color? color = null, bool isHoisted = false) | |||||
| public async Task<IRole> CreateRoleAsync(string name, GuildPermissions? permissions = null, Color? color = null, bool isHoisted = false) | |||||
| { | { | ||||
| if (name == null) throw new ArgumentNullException(nameof(name)); | if (name == null) throw new ArgumentNullException(nameof(name)); | ||||
| var model = await Discord.ApiClient.CreateGuildRole(Id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateGuildRoleAsync(Id).ConfigureAwait(false); | |||||
| var role = new Role(this, model); | var role = new Role(this, model); | ||||
| await role.Modify(x => | |||||
| await role.ModifyAsync(x => | |||||
| { | { | ||||
| x.Name = name; | x.Name = name; | ||||
| x.Permissions = (permissions ?? role.Permissions).RawValue; | x.Permissions = (permissions ?? role.Permissions).RawValue; | ||||
| @@ -251,38 +251,38 @@ namespace Discord | |||||
| return role; | return role; | ||||
| } | } | ||||
| public virtual async Task<IGuildUser> GetUser(ulong id) | |||||
| public virtual async Task<IGuildUser> GetUserAsync(ulong id) | |||||
| { | { | ||||
| var model = await Discord.ApiClient.GetGuildMember(Id, id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetGuildMemberAsync(Id, id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new GuildUser(this, new User(Discord, model.User), model); | return new GuildUser(this, new User(Discord, model.User), model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| public virtual async Task<IGuildUser> GetCurrentUser() | |||||
| public virtual async Task<IGuildUser> GetCurrentUserAsync() | |||||
| { | { | ||||
| var currentUser = await Discord.GetCurrentUser().ConfigureAwait(false); | |||||
| return await GetUser(currentUser.Id).ConfigureAwait(false); | |||||
| var currentUser = await Discord.GetCurrentUserAsync().ConfigureAwait(false); | |||||
| return await GetUserAsync(currentUser.Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IGuildUser>> GetUsers() | |||||
| public virtual async Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() | |||||
| { | { | ||||
| var args = new GetGuildMembersParams(); | var args = new GetGuildMembersParams(); | ||||
| var models = await Discord.ApiClient.GetGuildMembers(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetGuildMembersAsync(Id, args).ConfigureAwait(false); | |||||
| return models.Select(x => new GuildUser(this, new User(Discord, x.User), x)).ToImmutableArray(); | return models.Select(x => new GuildUser(this, new User(Discord, x.User), x)).ToImmutableArray(); | ||||
| } | } | ||||
| public virtual async Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset) | |||||
| public virtual async Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset) | |||||
| { | { | ||||
| var args = new GetGuildMembersParams { Limit = limit, Offset = offset }; | var args = new GetGuildMembersParams { Limit = limit, Offset = offset }; | ||||
| var models = await Discord.ApiClient.GetGuildMembers(Id, args).ConfigureAwait(false); | |||||
| var models = await Discord.ApiClient.GetGuildMembersAsync(Id, args).ConfigureAwait(false); | |||||
| return models.Select(x => new GuildUser(this, new User(Discord, x.User), x)).ToImmutableArray(); | return models.Select(x => new GuildUser(this, new User(Discord, x.User), x)).ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<int> PruneUsers(int days = 30, bool simulate = false) | |||||
| public async Task<int> PruneUsersAsync(int days = 30, bool simulate = false) | |||||
| { | { | ||||
| var args = new GuildPruneParams() { Days = days }; | var args = new GuildPruneParams() { Days = days }; | ||||
| GetGuildPruneCountResponse model; | GetGuildPruneCountResponse model; | ||||
| if (simulate) | if (simulate) | ||||
| model = await Discord.ApiClient.GetGuildPruneCount(Id, args).ConfigureAwait(false); | |||||
| model = await Discord.ApiClient.GetGuildPruneCountAsync(Id, args).ConfigureAwait(false); | |||||
| else | else | ||||
| model = await Discord.ApiClient.BeginGuildPrune(Id, args).ConfigureAwait(false); | |||||
| model = await Discord.ApiClient.BeginGuildPruneAsync(Id, args).ConfigureAwait(false); | |||||
| return model.Pruned; | return model.Pruned; | ||||
| } | } | ||||
| @@ -306,7 +306,7 @@ namespace Discord | |||||
| IRole IGuild.EveryoneRole => EveryoneRole; | IRole IGuild.EveryoneRole => EveryoneRole; | ||||
| IReadOnlyCollection<Emoji> IGuild.Emojis => Emojis; | IReadOnlyCollection<Emoji> IGuild.Emojis => Emojis; | ||||
| IReadOnlyCollection<string> IGuild.Features => Features; | IReadOnlyCollection<string> IGuild.Features => Features; | ||||
| Task IGuild.DownloadUsers() { throw new NotSupportedException(); } | |||||
| Task IGuild.DownloadUsersAsync() { throw new NotSupportedException(); } | |||||
| IRole IGuild.GetRole(ulong id) => GetRole(id); | IRole IGuild.GetRole(ulong id) => GetRole(id); | ||||
| } | } | ||||
| @@ -47,23 +47,23 @@ namespace Discord | |||||
| User = new User(Discord, model.User); | User = new User(Discord, model.User); | ||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteGuildIntegration(Guild.Id, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteGuildIntegrationAsync(Guild.Id, Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task Modify(Action<ModifyGuildIntegrationParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyGuildIntegrationParams> func) | |||||
| { | { | ||||
| if (func == null) throw new NullReferenceException(nameof(func)); | if (func == null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyGuildIntegrationParams(); | var args = new ModifyGuildIntegrationParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyGuildIntegration(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifyGuildIntegrationAsync(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Sync() | |||||
| public async Task SyncAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.SyncGuildIntegration(Guild.Id, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.SyncGuildIntegrationAsync(Guild.Id, Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override string ToString() => Name; | public override string ToString() => Name; | ||||
| @@ -40,59 +40,59 @@ namespace Discord | |||||
| IReadOnlyCollection<IRole> Roles { get; } | IReadOnlyCollection<IRole> Roles { get; } | ||||
| /// <summary> Modifies this guild. </summary> | /// <summary> Modifies this guild. </summary> | ||||
| Task Modify(Action<ModifyGuildParams> func); | |||||
| Task ModifyAsync(Action<ModifyGuildParams> func); | |||||
| /// <summary> Modifies this guild's embed. </summary> | /// <summary> Modifies this guild's embed. </summary> | ||||
| Task ModifyEmbed(Action<ModifyGuildEmbedParams> func); | |||||
| Task ModifyEmbedAsync(Action<ModifyGuildEmbedParams> func); | |||||
| /// <summary> Bulk modifies the channels of this guild. </summary> | /// <summary> Bulk modifies the channels of this guild. </summary> | ||||
| Task ModifyChannels(IEnumerable<ModifyGuildChannelsParams> args); | |||||
| Task ModifyChannelsAsync(IEnumerable<ModifyGuildChannelsParams> args); | |||||
| /// <summary> Bulk modifies the roles of this guild. </summary> | /// <summary> Bulk modifies the roles of this guild. </summary> | ||||
| Task ModifyRoles(IEnumerable<ModifyGuildRolesParams> args); | |||||
| Task ModifyRolesAsync(IEnumerable<ModifyGuildRolesParams> args); | |||||
| /// <summary> Leaves this guild. If you are the owner, use Delete instead. </summary> | /// <summary> Leaves this guild. If you are the owner, use Delete instead. </summary> | ||||
| Task Leave(); | |||||
| Task LeaveAsync(); | |||||
| /// <summary> Gets a collection of all users banned on this guild. </summary> | /// <summary> Gets a collection of all users banned on this guild. </summary> | ||||
| Task<IReadOnlyCollection<IUser>> GetBans(); | |||||
| Task<IReadOnlyCollection<IUser>> GetBansAsync(); | |||||
| /// <summary> Bans the provided user from this guild and optionally prunes their recent messages. </summary> | /// <summary> Bans the provided user from this guild and optionally prunes their recent messages. </summary> | ||||
| Task AddBan(IUser user, int pruneDays = 0); | |||||
| Task AddBanAsync(IUser user, int pruneDays = 0); | |||||
| /// <summary> Bans the provided user id from this guild and optionally prunes their recent messages. </summary> | /// <summary> Bans the provided user id from this guild and optionally prunes their recent messages. </summary> | ||||
| Task AddBan(ulong userId, int pruneDays = 0); | |||||
| Task AddBanAsync(ulong userId, int pruneDays = 0); | |||||
| /// <summary> Unbans the provided user if it is currently banned. </summary> | /// <summary> Unbans the provided user if it is currently banned. </summary> | ||||
| Task RemoveBan(IUser user); | |||||
| Task RemoveBanAsync(IUser user); | |||||
| /// <summary> Unbans the provided user id if it is currently banned. </summary> | /// <summary> Unbans the provided user id if it is currently banned. </summary> | ||||
| Task RemoveBan(ulong userId); | |||||
| Task RemoveBanAsync(ulong userId); | |||||
| /// <summary> Gets a collection of all channels in this guild. </summary> | /// <summary> Gets a collection of all channels in this guild. </summary> | ||||
| Task<IReadOnlyCollection<IGuildChannel>> GetChannels(); | |||||
| Task<IReadOnlyCollection<IGuildChannel>> GetChannelsAsync(); | |||||
| /// <summary> Gets the channel in this guild with the provided id, or null if not found. </summary> | /// <summary> Gets the channel in this guild with the provided id, or null if not found. </summary> | ||||
| Task<IGuildChannel> GetChannel(ulong id); | |||||
| Task<IGuildChannel> GetChannelAsync(ulong id); | |||||
| /// <summary> Creates a new text channel. </summary> | /// <summary> Creates a new text channel. </summary> | ||||
| Task<ITextChannel> CreateTextChannel(string name); | |||||
| Task<ITextChannel> CreateTextChannelAsync(string name); | |||||
| /// <summary> Creates a new voice channel. </summary> | /// <summary> Creates a new voice channel. </summary> | ||||
| Task<IVoiceChannel> CreateVoiceChannel(string name); | |||||
| Task<IVoiceChannel> CreateVoiceChannelAsync(string name); | |||||
| /// <summary> Gets a collection of all invites to this guild. </summary> | /// <summary> Gets a collection of all invites to this guild. </summary> | ||||
| Task<IReadOnlyCollection<IInviteMetadata>> GetInvites(); | |||||
| Task<IReadOnlyCollection<IInviteMetadata>> GetInvitesAsync(); | |||||
| /// <summary> Creates a new invite to this guild. </summary> | /// <summary> Creates a new invite to this guild. </summary> | ||||
| /// <param name="maxAge"> The time (in seconds) until the invite expires. Set to null to never expire. </param> | /// <param name="maxAge"> The time (in seconds) until the invite expires. Set to null to never expire. </param> | ||||
| /// <param name="maxUses"> The max amount of times this invite may be used. Set to null to have unlimited uses. </param> | /// <param name="maxUses"> The max amount of times this invite may be used. Set to null to have unlimited uses. </param> | ||||
| /// <param name="isTemporary"> If true, a user accepting this invite will be kicked from the guild after closing their client. </param> | /// <param name="isTemporary"> If true, a user accepting this invite will be kicked from the guild after closing their client. </param> | ||||
| /// <param name="withXkcd"> If true, creates a human-readable link. Not supported if maxAge is set to null. </param> | /// <param name="withXkcd"> If true, creates a human-readable link. Not supported if maxAge is set to null. </param> | ||||
| Task<IInviteMetadata> CreateInvite(int? maxAge = 1800, int? maxUses = default(int?), bool isTemporary = false, bool withXkcd = false); | |||||
| Task<IInviteMetadata> CreateInviteAsync(int? maxAge = 1800, int? maxUses = default(int?), bool isTemporary = false, bool withXkcd = false); | |||||
| /// <summary> Gets the role in this guild with the provided id, or null if not found. </summary> | /// <summary> Gets the role in this guild with the provided id, or null if not found. </summary> | ||||
| IRole GetRole(ulong id); | IRole GetRole(ulong id); | ||||
| /// <summary> Creates a new role. </summary> | /// <summary> Creates a new role. </summary> | ||||
| Task<IRole> CreateRole(string name, GuildPermissions? permissions = null, Color? color = null, bool isHoisted = false); | |||||
| Task<IRole> CreateRoleAsync(string name, GuildPermissions? permissions = null, Color? color = null, bool isHoisted = false); | |||||
| /// <summary> Gets a collection of all users in this guild. </summary> | /// <summary> Gets a collection of all users in this guild. </summary> | ||||
| Task<IReadOnlyCollection<IGuildUser>> GetUsers(); | |||||
| Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(); | |||||
| /// <summary> Gets the user in this guild with the provided id, or null if not found. </summary> | /// <summary> Gets the user in this guild with the provided id, or null if not found. </summary> | ||||
| Task<IGuildUser> GetUser(ulong id); | |||||
| Task<IGuildUser> GetUserAsync(ulong id); | |||||
| /// <summary> Gets the current user for this guild. </summary> | /// <summary> Gets the current user for this guild. </summary> | ||||
| Task<IGuildUser> GetCurrentUser(); | |||||
| Task<IGuildUser> GetCurrentUserAsync(); | |||||
| /// <summary> Downloads all users for this guild if the current list is incomplete. </summary> | /// <summary> Downloads all users for this guild if the current list is incomplete. </summary> | ||||
| Task DownloadUsers(); | |||||
| Task DownloadUsersAsync(); | |||||
| /// <summary> Removes all users from this guild if they have not logged on in a provided number of days or, if simulate is true, returns the number of users that would be removed. </summary> | /// <summary> Removes all users from this guild if they have not logged on in a provided number of days or, if simulate is true, returns the number of users that would be removed. </summary> | ||||
| Task<int> PruneUsers(int days = 30, bool simulate = false); | |||||
| Task<int> PruneUsersAsync(int days = 30, bool simulate = false); | |||||
| } | } | ||||
| } | } | ||||
| @@ -33,13 +33,13 @@ namespace Discord | |||||
| Permissions = new GuildPermissions(model.Permissions); | Permissions = new GuildPermissions(model.Permissions); | ||||
| } | } | ||||
| public async Task Leave() | |||||
| public async Task LeaveAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.LeaveGuild(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.LeaveGuildAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteGuild(Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteGuildAsync(Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override string ToString() => Name; | public override string ToString() => Name; | ||||
| @@ -5,6 +5,6 @@ namespace Discord | |||||
| public interface IDeletable | public interface IDeletable | ||||
| { | { | ||||
| /// <summary> Deletes this object and all its children. </summary> | /// <summary> Deletes this object and all its children. </summary> | ||||
| Task Delete(); | |||||
| Task DeleteAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -5,6 +5,6 @@ namespace Discord | |||||
| public interface IUpdateable | public interface IUpdateable | ||||
| { | { | ||||
| /// <summary> Updates this object's properties with its current state. </summary> | /// <summary> Updates this object's properties with its current state. </summary> | ||||
| Task Update(); | |||||
| Task UpdateAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -19,6 +19,6 @@ namespace Discord | |||||
| ulong GuildId { get; } | ulong GuildId { get; } | ||||
| /// <summary> Accepts this invite and joins the target guild. This will fail on bot accounts. </summary> | /// <summary> Accepts this invite and joins the target guild. This will fail on bot accounts. </summary> | ||||
| Task Accept(); | |||||
| Task AcceptAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -37,13 +37,13 @@ namespace Discord | |||||
| ChannelName = model.Channel.Name; | ChannelName = model.Channel.Name; | ||||
| } | } | ||||
| public async Task Accept() | |||||
| public async Task AcceptAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.AcceptInvite(Code).ConfigureAwait(false); | |||||
| await Discord.ApiClient.AcceptInviteAsync(Code).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteInvite(Code).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteInviteAsync(Code).ConfigureAwait(false); | |||||
| } | } | ||||
| public override string ToString() => XkcdUrl ?? Url; | public override string ToString() => XkcdUrl ?? Url; | ||||
| @@ -34,6 +34,6 @@ namespace Discord | |||||
| IReadOnlyCollection<IUser> MentionedUsers { get; } | IReadOnlyCollection<IUser> MentionedUsers { get; } | ||||
| /// <summary> Modifies this message. </summary> | /// <summary> Modifies this message. </summary> | ||||
| Task Modify(Action<ModifyMessageParams> func); | |||||
| Task ModifyAsync(Action<ModifyMessageParams> func); | |||||
| } | } | ||||
| } | } | ||||
| @@ -97,14 +97,14 @@ namespace Discord | |||||
| Text = MentionUtils.CleanUserMentions(model.Content, model.Mentions); | Text = MentionUtils.CleanUserMentions(model.Content, model.Mentions); | ||||
| } | } | ||||
| public async Task Update() | |||||
| public async Task UpdateAsync() | |||||
| { | { | ||||
| if (IsAttached) throw new NotSupportedException(); | if (IsAttached) throw new NotSupportedException(); | ||||
| var model = await Discord.ApiClient.GetChannelMessage(Channel.Id, Id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetChannelMessageAsync(Channel.Id, Id).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyMessageParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyMessageParams> func) | |||||
| { | { | ||||
| if (func == null) throw new NullReferenceException(nameof(func)); | if (func == null) throw new NullReferenceException(nameof(func)); | ||||
| @@ -114,18 +114,18 @@ namespace Discord | |||||
| Model model; | Model model; | ||||
| if (guildChannel != null) | if (guildChannel != null) | ||||
| model = await Discord.ApiClient.ModifyMessage(guildChannel.Guild.Id, Channel.Id, Id, args).ConfigureAwait(false); | |||||
| model = await Discord.ApiClient.ModifyMessageAsync(guildChannel.Guild.Id, Channel.Id, Id, args).ConfigureAwait(false); | |||||
| else | else | ||||
| model = await Discord.ApiClient.ModifyDMMessage(Channel.Id, Id, args).ConfigureAwait(false); | |||||
| model = await Discord.ApiClient.ModifyDMMessageAsync(Channel.Id, Id, args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| var guildChannel = Channel as GuildChannel; | var guildChannel = Channel as GuildChannel; | ||||
| if (guildChannel != null) | if (guildChannel != null) | ||||
| await Discord.ApiClient.DeleteMessage(guildChannel.Id, Channel.Id, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteMessageAsync(guildChannel.Id, Channel.Id, Id).ConfigureAwait(false); | |||||
| else | else | ||||
| await Discord.ApiClient.DeleteDMMessage(Channel.Id, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteDMMessageAsync(Channel.Id, Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override string ToString() => Text; | public override string ToString() => Text; | ||||
| @@ -24,6 +24,6 @@ namespace Discord | |||||
| ulong GuildId { get; } | ulong GuildId { get; } | ||||
| /// <summary> Modifies this role. </summary> | /// <summary> Modifies this role. </summary> | ||||
| Task Modify(Action<ModifyGuildRoleParams> func); | |||||
| Task ModifyAsync(Action<ModifyGuildRoleParams> func); | |||||
| } | } | ||||
| } | } | ||||
| @@ -44,18 +44,18 @@ namespace Discord | |||||
| Permissions = new GuildPermissions(model.Permissions.Value); | Permissions = new GuildPermissions(model.Permissions.Value); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyGuildRoleParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyGuildRoleParams> func) | |||||
| { | { | ||||
| if (func == null) throw new NullReferenceException(nameof(func)); | if (func == null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyGuildRoleParams(); | var args = new ModifyGuildRoleParams(); | ||||
| func(args); | func(args); | ||||
| var response = await Discord.ApiClient.ModifyGuildRole(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| var response = await Discord.ApiClient.ModifyGuildRoleAsync(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| Update(response, UpdateSource.Rest); | Update(response, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Delete() | |||||
| public async Task DeleteAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.DeleteGuildRole(Guild.Id, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.DeleteGuildRoleAsync(Guild.Id, Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public Role Clone() => MemberwiseClone() as Role; | public Role Clone() => MemberwiseClone() as Role; | ||||
| @@ -67,31 +67,31 @@ namespace Discord | |||||
| IsMute = model.Mute; | IsMute = model.Mute; | ||||
| } | } | ||||
| public async Task Update() | |||||
| public async Task UpdateAsync() | |||||
| { | { | ||||
| if (IsAttached) throw new NotSupportedException(); | if (IsAttached) throw new NotSupportedException(); | ||||
| var model = await Discord.ApiClient.GetGuildMember(Guild.Id, Id).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetGuildMemberAsync(Guild.Id, Id).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyGuildMemberParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyGuildMemberParams> func) | |||||
| { | { | ||||
| if (func == null) throw new NullReferenceException(nameof(func)); | if (func == null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyGuildMemberParams(); | var args = new ModifyGuildMemberParams(); | ||||
| func(args); | func(args); | ||||
| bool isCurrentUser = (await Discord.GetCurrentUser().ConfigureAwait(false)).Id == Id; | |||||
| bool isCurrentUser = (await Discord.GetCurrentUserAsync().ConfigureAwait(false)).Id == Id; | |||||
| if (isCurrentUser && args.Nickname.IsSpecified) | if (isCurrentUser && args.Nickname.IsSpecified) | ||||
| { | { | ||||
| var nickArgs = new ModifyCurrentUserNickParams { Nickname = args.Nickname.Value ?? "" }; | var nickArgs = new ModifyCurrentUserNickParams { Nickname = args.Nickname.Value ?? "" }; | ||||
| await Discord.ApiClient.ModifyCurrentUserNick(Guild.Id, nickArgs).ConfigureAwait(false); | |||||
| await Discord.ApiClient.ModifyMyNickAsync(Guild.Id, nickArgs).ConfigureAwait(false); | |||||
| args.Nickname = new Optional<string>(); //Remove | args.Nickname = new Optional<string>(); //Remove | ||||
| } | } | ||||
| if (!isCurrentUser || args.Deaf.IsSpecified || args.Mute.IsSpecified || args.Roles.IsSpecified) | if (!isCurrentUser || args.Deaf.IsSpecified || args.Mute.IsSpecified || args.Roles.IsSpecified) | ||||
| { | { | ||||
| await Discord.ApiClient.ModifyGuildMember(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| await Discord.ApiClient.ModifyGuildMemberAsync(Guild.Id, Id, args).ConfigureAwait(false); | |||||
| if (args.Deaf.IsSpecified) | if (args.Deaf.IsSpecified) | ||||
| IsDeaf = args.Deaf.Value; | IsDeaf = args.Deaf.Value; | ||||
| if (args.Mute.IsSpecified) | if (args.Mute.IsSpecified) | ||||
| @@ -102,9 +102,9 @@ namespace Discord | |||||
| Roles = args.Roles.Value.Select(x => Guild.GetRole(x)).Where(x => x != null).ToImmutableArray(); | Roles = args.Roles.Value.Select(x => Guild.GetRole(x)).Where(x => x != null).ToImmutableArray(); | ||||
| } | } | ||||
| } | } | ||||
| public async Task Kick() | |||||
| public async Task KickAsync() | |||||
| { | { | ||||
| await Discord.ApiClient.RemoveGuildMember(Guild.Id, Id).ConfigureAwait(false); | |||||
| await Discord.ApiClient.RemoveGuildMemberAsync(Guild.Id, Id).ConfigureAwait(false); | |||||
| } | } | ||||
| public ChannelPermissions GetPermissions(IGuildChannel channel) | public ChannelPermissions GetPermissions(IGuildChannel channel) | ||||
| @@ -113,7 +113,7 @@ namespace Discord | |||||
| return new ChannelPermissions(Permissions.ResolveChannel(this, channel, GuildPermissions.RawValue)); | return new ChannelPermissions(Permissions.ResolveChannel(this, channel, GuildPermissions.RawValue)); | ||||
| } | } | ||||
| public Task<IDMChannel> CreateDMChannel() => User.CreateDMChannel(); | |||||
| public Task<IDMChannel> CreateDMChannelAsync() => User.CreateDMChannelAsync(); | |||||
| IGuild IGuildUser.Guild => Guild; | IGuild IGuildUser.Guild => Guild; | ||||
| IReadOnlyCollection<IRole> IGuildUser.Roles => Roles; | IReadOnlyCollection<IRole> IGuildUser.Roles => Roles; | ||||
| @@ -28,8 +28,8 @@ namespace Discord | |||||
| ChannelPermissions GetPermissions(IGuildChannel channel); | ChannelPermissions GetPermissions(IGuildChannel channel); | ||||
| /// <summary> Kicks this user from this guild. </summary> | /// <summary> Kicks this user from this guild. </summary> | ||||
| Task Kick(); | |||||
| Task KickAsync(); | |||||
| /// <summary> Modifies this user's properties in this guild. </summary> | /// <summary> Modifies this user's properties in this guild. </summary> | ||||
| Task Modify(Action<ModifyGuildMemberParams> func); | |||||
| Task ModifyAsync(Action<ModifyGuildMemberParams> func); | |||||
| } | } | ||||
| } | } | ||||
| @@ -11,6 +11,6 @@ namespace Discord | |||||
| /// <summary> Returns true if this user's email has been verified. </summary> | /// <summary> Returns true if this user's email has been verified. </summary> | ||||
| bool IsVerified { get; } | bool IsVerified { get; } | ||||
| Task Modify(Action<ModifyCurrentUserParams> func); | |||||
| Task ModifyAsync(Action<ModifyCurrentUserParams> func); | |||||
| } | } | ||||
| } | } | ||||
| @@ -15,6 +15,6 @@ namespace Discord | |||||
| //TODO: CreateDMChannel is a candidate to move to IGuildUser, and User made a common class, depending on next friends list update | //TODO: CreateDMChannel is a candidate to move to IGuildUser, and User made a common class, depending on next friends list update | ||||
| /// <summary> Returns a private message channel to this user, creating one if it does not already exist. </summary> | /// <summary> Returns a private message channel to this user, creating one if it does not already exist. </summary> | ||||
| Task<IDMChannel> CreateDMChannel(); | |||||
| Task<IDMChannel> CreateDMChannelAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -24,20 +24,20 @@ namespace Discord | |||||
| IsVerified = model.IsVerified; | IsVerified = model.IsVerified; | ||||
| } | } | ||||
| public async Task Update() | |||||
| public async Task UpdateAsync() | |||||
| { | { | ||||
| if (IsAttached) throw new NotSupportedException(); | if (IsAttached) throw new NotSupportedException(); | ||||
| var model = await Discord.ApiClient.GetCurrentUser().ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.GetSelfAsync().ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| public async Task Modify(Action<ModifyCurrentUserParams> func) | |||||
| public async Task ModifyAsync(Action<ModifyCurrentUserParams> func) | |||||
| { | { | ||||
| if (func != null) throw new NullReferenceException(nameof(func)); | if (func != null) throw new NullReferenceException(nameof(func)); | ||||
| var args = new ModifyCurrentUserParams(); | var args = new ModifyCurrentUserParams(); | ||||
| func(args); | func(args); | ||||
| var model = await Discord.ApiClient.ModifyCurrentUser(args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.ModifySelfAsync(args).ConfigureAwait(false); | |||||
| Update(model, UpdateSource.Rest); | Update(model, UpdateSource.Rest); | ||||
| } | } | ||||
| } | } | ||||
| @@ -38,10 +38,10 @@ namespace Discord | |||||
| Username = model.Username; | Username = model.Username; | ||||
| } | } | ||||
| public async Task<IDMChannel> CreateDMChannel() | |||||
| public async Task<IDMChannel> CreateDMChannelAsync() | |||||
| { | { | ||||
| var args = new CreateDMChannelParams { RecipientId = Id }; | var args = new CreateDMChannelParams { RecipientId = Id }; | ||||
| var model = await Discord.ApiClient.CreateDMChannel(args).ConfigureAwait(false); | |||||
| var model = await Discord.ApiClient.CreateDMChannelAsync(args).ConfigureAwait(false); | |||||
| return new DMChannel(Discord, this, model); | return new DMChannel(Discord, this, model); | ||||
| } | } | ||||
| @@ -21,9 +21,9 @@ namespace Discord | |||||
| _messages = new MessageCache(Discord, this); | _messages = new MessageCache(Discord, this); | ||||
| } | } | ||||
| public override Task<IUser> GetUser(ulong id) => Task.FromResult<IUser>(GetCachedUser(id)); | |||||
| public override Task<IReadOnlyCollection<IUser>> GetUsers() => Task.FromResult<IReadOnlyCollection<IUser>>(Members); | |||||
| public override Task<IReadOnlyCollection<IUser>> GetUsers(int limit, int offset) | |||||
| public override Task<IUser> GetUserAsync(ulong id) => Task.FromResult<IUser>(GetCachedUser(id)); | |||||
| public override Task<IReadOnlyCollection<IUser>> GetUsersAsync() => Task.FromResult<IReadOnlyCollection<IUser>>(Members); | |||||
| public override Task<IReadOnlyCollection<IUser>> GetUsersAsync(int limit, int offset) | |||||
| => Task.FromResult<IReadOnlyCollection<IUser>>(Members.Skip(offset).Take(limit).ToImmutableArray()); | => Task.FromResult<IReadOnlyCollection<IUser>>(Members.Skip(offset).Take(limit).ToImmutableArray()); | ||||
| public ICachedUser GetCachedUser(ulong id) | public ICachedUser GetCachedUser(ulong id) | ||||
| { | { | ||||
| @@ -36,17 +36,17 @@ namespace Discord | |||||
| return null; | return null; | ||||
| } | } | ||||
| public override async Task<IMessage> GetMessage(ulong id) | |||||
| public override async Task<IMessage> GetMessageAsync(ulong id) | |||||
| { | { | ||||
| return await _messages.Download(id).ConfigureAwait(false); | |||||
| return await _messages.DownloadAsync(id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessages(int limit) | |||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit) | |||||
| { | { | ||||
| return await _messages.Download(null, Direction.Before, limit).ConfigureAwait(false); | |||||
| return await _messages.DownloadAsync(null, Direction.Before, limit).ConfigureAwait(false); | |||||
| } | } | ||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessages(ulong fromMessageId, Direction dir, int limit) | |||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit) | |||||
| { | { | ||||
| return await _messages.Download(fromMessageId, dir, limit).ConfigureAwait(false); | |||||
| return await _messages.DownloadAsync(fromMessageId, dir, limit).ConfigureAwait(false); | |||||
| } | } | ||||
| public CachedMessage AddCachedMessage(ICachedUser author, MessageModel model) | public CachedMessage AddCachedMessage(ICachedUser author, MessageModel model) | ||||
| { | { | ||||
| @@ -107,8 +107,8 @@ namespace Discord | |||||
| _voiceStates = voiceStates; | _voiceStates = voiceStates; | ||||
| } | } | ||||
| public override Task<IGuildChannel> GetChannel(ulong id) => Task.FromResult<IGuildChannel>(GetCachedChannel(id)); | |||||
| public override Task<IReadOnlyCollection<IGuildChannel>> GetChannels() => Task.FromResult<IReadOnlyCollection<IGuildChannel>>(Channels); | |||||
| public override Task<IGuildChannel> GetChannelAsync(ulong id) => Task.FromResult<IGuildChannel>(GetCachedChannel(id)); | |||||
| public override Task<IReadOnlyCollection<IGuildChannel>> GetChannelsAsync() => Task.FromResult<IReadOnlyCollection<IGuildChannel>>(Channels); | |||||
| public ICachedGuildChannel AddCachedChannel(ChannelModel model, ConcurrentHashSet<ulong> channels = null) | public ICachedGuildChannel AddCachedChannel(ChannelModel model, ConcurrentHashSet<ulong> channels = null) | ||||
| { | { | ||||
| var channel = ToChannel(model); | var channel = ToChannel(model); | ||||
| @@ -182,13 +182,13 @@ namespace Discord | |||||
| return null; | return null; | ||||
| } | } | ||||
| public override Task<IGuildUser> GetUser(ulong id) => Task.FromResult<IGuildUser>(GetCachedUser(id)); | |||||
| public override Task<IGuildUser> GetCurrentUser() | |||||
| public override Task<IGuildUser> GetUserAsync(ulong id) => Task.FromResult<IGuildUser>(GetCachedUser(id)); | |||||
| public override Task<IGuildUser> GetCurrentUserAsync() | |||||
| => Task.FromResult<IGuildUser>(CurrentUser); | => Task.FromResult<IGuildUser>(CurrentUser); | ||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers() | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() | |||||
| => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members); | => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members); | ||||
| //TODO: Is there a better way of exposing pagination? | //TODO: Is there a better way of exposing pagination? | ||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset) | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset) | |||||
| => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members.OrderBy(x => x.Id).Skip(offset).Take(limit).ToImmutableArray()); | => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members.OrderBy(x => x.Id).Skip(offset).Take(limit).ToImmutableArray()); | ||||
| public CachedGuildUser AddCachedUser(MemberModel model, ConcurrentDictionary<ulong, CachedGuildUser> members = null, DataStore dataStore = null) | public CachedGuildUser AddCachedUser(MemberModel model, ConcurrentDictionary<ulong, CachedGuildUser> members = null, DataStore dataStore = null) | ||||
| { | { | ||||
| @@ -213,10 +213,10 @@ namespace Discord | |||||
| return member; | return member; | ||||
| return null; | return null; | ||||
| } | } | ||||
| public async Task DownloadMembers() | |||||
| public async Task DownloadMembersAsync() | |||||
| { | { | ||||
| if (!HasAllMembers) | if (!HasAllMembers) | ||||
| await Discord.ApiClient.SendRequestMembers(new ulong[] { Id }).ConfigureAwait(false); | |||||
| await Discord.ApiClient.SendRequestMembersAsync(new ulong[] { Id }).ConfigureAwait(false); | |||||
| await _downloaderPromise.Task.ConfigureAwait(false); | await _downloaderPromise.Task.ConfigureAwait(false); | ||||
| } | } | ||||
| public void CompleteDownloadMembers() | public void CompleteDownloadMembers() | ||||
| @@ -23,9 +23,9 @@ namespace Discord | |||||
| _messages = new MessageCache(Discord, this); | _messages = new MessageCache(Discord, this); | ||||
| } | } | ||||
| public override Task<IGuildUser> GetUser(ulong id) => Task.FromResult<IGuildUser>(GetCachedUser(id)); | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers() => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members); | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset) | |||||
| public override Task<IGuildUser> GetUserAsync(ulong id) => Task.FromResult<IGuildUser>(GetCachedUser(id)); | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members); | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset) | |||||
| => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members.Skip(offset).Take(limit).ToImmutableArray()); | => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members.Skip(offset).Take(limit).ToImmutableArray()); | ||||
| public CachedGuildUser GetCachedUser(ulong id) | public CachedGuildUser GetCachedUser(ulong id) | ||||
| { | { | ||||
| @@ -35,17 +35,17 @@ namespace Discord | |||||
| return null; | return null; | ||||
| } | } | ||||
| public override async Task<IMessage> GetMessage(ulong id) | |||||
| public override async Task<IMessage> GetMessageAsync(ulong id) | |||||
| { | { | ||||
| return await _messages.Download(id).ConfigureAwait(false); | |||||
| return await _messages.DownloadAsync(id).ConfigureAwait(false); | |||||
| } | } | ||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessages(int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
| { | { | ||||
| return await _messages.Download(null, Direction.Before, limit).ConfigureAwait(false); | |||||
| return await _messages.DownloadAsync(null, Direction.Before, limit).ConfigureAwait(false); | |||||
| } | } | ||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessages(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
| public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
| { | { | ||||
| return await _messages.Download(fromMessageId, dir, limit).ConfigureAwait(false); | |||||
| return await _messages.DownloadAsync(fromMessageId, dir, limit).ConfigureAwait(false); | |||||
| } | } | ||||
| public CachedMessage AddCachedMessage(ICachedUser author, MessageModel model) | public CachedMessage AddCachedMessage(ICachedUser author, MessageModel model) | ||||
| @@ -19,11 +19,11 @@ namespace Discord | |||||
| { | { | ||||
| } | } | ||||
| public override Task<IGuildUser> GetUser(ulong id) | |||||
| public override Task<IGuildUser> GetUserAsync(ulong id) | |||||
| => Task.FromResult(GetCachedUser(id)); | => Task.FromResult(GetCachedUser(id)); | ||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers() | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync() | |||||
| => Task.FromResult(Members); | => Task.FromResult(Members); | ||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsers(int limit, int offset) | |||||
| public override Task<IReadOnlyCollection<IGuildUser>> GetUsersAsync(int limit, int offset) | |||||
| => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members.OrderBy(x => x.Id).Skip(offset).Take(limit).ToImmutableArray()); | => Task.FromResult<IReadOnlyCollection<IGuildUser>>(Members.OrderBy(x => x.Id).Skip(offset).Take(limit).ToImmutableArray()); | ||||
| public IGuildUser GetCachedUser(ulong id) | public IGuildUser GetCachedUser(ulong id) | ||||
| { | { | ||||
| @@ -5,9 +5,9 @@ namespace Discord.Extensions | |||||
| { | { | ||||
| public static class DiscordClientExtensions | public static class DiscordClientExtensions | ||||
| { | { | ||||
| public static async Task<IVoiceRegion> GetOptimalVoiceRegion(this DiscordClient discord) | |||||
| public static async Task<IVoiceRegion> GetOptimalVoiceRegionAsync(this DiscordClient discord) | |||||
| { | { | ||||
| var regions = await discord.GetVoiceRegions().ConfigureAwait(false); | |||||
| var regions = await discord.GetVoiceRegionsAsync().ConfigureAwait(false); | |||||
| return regions.FirstOrDefault(x => x.IsOptimal); | return regions.FirstOrDefault(x => x.IsOptimal); | ||||
| } | } | ||||
| } | } | ||||
| @@ -7,7 +7,7 @@ namespace Discord.Extensions | |||||
| { | { | ||||
| //TODO: Optimize these for if there is only 1 subscriber (can we do this?) | //TODO: Optimize these for if there is only 1 subscriber (can we do this?) | ||||
| //TODO: Could we maintain our own list instead of generating one on every invocation? | //TODO: Could we maintain our own list instead of generating one on every invocation? | ||||
| public static async Task Raise(this Func<Task> eventHandler) | |||||
| public static async Task RaiseAsync(this Func<Task> eventHandler) | |||||
| { | { | ||||
| var subscriptions = eventHandler?.GetInvocationList(); | var subscriptions = eventHandler?.GetInvocationList(); | ||||
| if (subscriptions != null) | if (subscriptions != null) | ||||
| @@ -16,7 +16,7 @@ namespace Discord.Extensions | |||||
| await (subscriptions[i] as Func<Task>).Invoke().ConfigureAwait(false); | await (subscriptions[i] as Func<Task>).Invoke().ConfigureAwait(false); | ||||
| } | } | ||||
| } | } | ||||
| public static async Task Raise<T>(this Func<T, Task> eventHandler, T arg) | |||||
| public static async Task RaiseAsync<T>(this Func<T, Task> eventHandler, T arg) | |||||
| { | { | ||||
| var subscriptions = eventHandler?.GetInvocationList(); | var subscriptions = eventHandler?.GetInvocationList(); | ||||
| if (subscriptions != null) | if (subscriptions != null) | ||||
| @@ -25,7 +25,7 @@ namespace Discord.Extensions | |||||
| await (subscriptions[i] as Func<T, Task>).Invoke(arg).ConfigureAwait(false); | await (subscriptions[i] as Func<T, Task>).Invoke(arg).ConfigureAwait(false); | ||||
| } | } | ||||
| } | } | ||||
| public static async Task Raise<T1, T2>(this Func<T1, T2, Task> eventHandler, T1 arg1, T2 arg2) | |||||
| public static async Task RaiseAsync<T1, T2>(this Func<T1, T2, Task> eventHandler, T1 arg1, T2 arg2) | |||||
| { | { | ||||
| var subscriptions = eventHandler?.GetInvocationList(); | var subscriptions = eventHandler?.GetInvocationList(); | ||||
| if (subscriptions != null) | if (subscriptions != null) | ||||
| @@ -34,7 +34,7 @@ namespace Discord.Extensions | |||||
| await (subscriptions[i] as Func<T1, T2, Task>).Invoke(arg1, arg2).ConfigureAwait(false); | await (subscriptions[i] as Func<T1, T2, Task>).Invoke(arg1, arg2).ConfigureAwait(false); | ||||
| } | } | ||||
| } | } | ||||
| public static async Task Raise<T1, T2, T3>(this Func<T1, T2, T3, Task> eventHandler, T1 arg1, T2 arg2, T3 arg3) | |||||
| public static async Task RaiseAsync<T1, T2, T3>(this Func<T1, T2, T3, Task> eventHandler, T1 arg1, T2 arg2, T3 arg3) | |||||
| { | { | ||||
| var subscriptions = eventHandler?.GetInvocationList(); | var subscriptions = eventHandler?.GetInvocationList(); | ||||
| if (subscriptions != null) | if (subscriptions != null) | ||||
| @@ -43,7 +43,7 @@ namespace Discord.Extensions | |||||
| await (subscriptions[i] as Func<T1, T2, T3, Task>).Invoke(arg1, arg2, arg3).ConfigureAwait(false); | await (subscriptions[i] as Func<T1, T2, T3, Task>).Invoke(arg1, arg2, arg3).ConfigureAwait(false); | ||||
| } | } | ||||
| } | } | ||||
| public static async Task Raise<T1, T2, T3, T4>(this Func<T1, T2, T3, T4, Task> eventHandler, T1 arg1, T2 arg2, T3 arg3, T4 arg4) | |||||
| public static async Task RaiseAsync<T1, T2, T3, T4>(this Func<T1, T2, T3, T4, Task> eventHandler, T1 arg1, T2 arg2, T3 arg3, T4 arg4) | |||||
| { | { | ||||
| var subscriptions = eventHandler?.GetInvocationList(); | var subscriptions = eventHandler?.GetInvocationList(); | ||||
| if (subscriptions != null) | if (subscriptions != null) | ||||
| @@ -4,9 +4,9 @@ namespace Discord.Extensions | |||||
| { | { | ||||
| public static class GuildExtensions | public static class GuildExtensions | ||||
| { | { | ||||
| public static async Task<ITextChannel> GetTextChannel(this IGuild guild, ulong id) | |||||
| => await guild.GetChannel(id).ConfigureAwait(false) as ITextChannel; | |||||
| public static async Task<IVoiceChannel> GetVoiceChannel(this IGuild guild, ulong id) | |||||
| => await guild.GetChannel(id).ConfigureAwait(false) as IVoiceChannel; | |||||
| public static async Task<ITextChannel> GetTextChannelAsync(this IGuild guild, ulong id) | |||||
| => await guild.GetChannelAsync(id).ConfigureAwait(false) as ITextChannel; | |||||
| public static async Task<IVoiceChannel> GetVoiceChannelAsync(this IGuild guild, ulong id) | |||||
| => await guild.GetChannelAsync(id).ConfigureAwait(false) as IVoiceChannel; | |||||
| } | } | ||||
| } | } | ||||
| @@ -13,29 +13,29 @@ namespace Discord | |||||
| DiscordApiClient ApiClient { get; } | DiscordApiClient ApiClient { get; } | ||||
| Task Login(TokenType tokenType, string token, bool validateToken = true); | |||||
| Task Logout(); | |||||
| Task LoginAsync(TokenType tokenType, string token, bool validateToken = true); | |||||
| Task LogoutAsync(); | |||||
| Task Connect(); | |||||
| Task Disconnect(); | |||||
| Task ConnectAsync(); | |||||
| Task DisconnectAsync(); | |||||
| Task<IChannel> GetChannel(ulong id); | |||||
| Task<IReadOnlyCollection<IDMChannel>> GetDMChannels(); | |||||
| Task<IChannel> GetChannelAsync(ulong id); | |||||
| Task<IReadOnlyCollection<IDMChannel>> GetDMChannelsAsync(); | |||||
| Task<IReadOnlyCollection<IConnection>> GetConnections(); | |||||
| Task<IReadOnlyCollection<IConnection>> GetConnectionsAsync(); | |||||
| Task<IGuild> GetGuild(ulong id); | |||||
| Task<IReadOnlyCollection<IUserGuild>> GetGuilds(); | |||||
| Task<IGuild> CreateGuild(string name, IVoiceRegion region, Stream jpegIcon = null); | |||||
| Task<IGuild> GetGuildAsync(ulong id); | |||||
| Task<IReadOnlyCollection<IUserGuild>> GetGuildsAsync(); | |||||
| Task<IGuild> CreateGuildAsync(string name, IVoiceRegion region, Stream jpegIcon = null); | |||||
| Task<IInvite> GetInvite(string inviteIdOrXkcd); | |||||
| Task<IInvite> GetInviteAsync(string inviteIdOrXkcd); | |||||
| Task<IUser> GetUser(ulong id); | |||||
| Task<IUser> GetUser(string username, string discriminator); | |||||
| Task<ISelfUser> GetCurrentUser(); | |||||
| Task<IReadOnlyCollection<IUser>> QueryUsers(string query, int limit); | |||||
| Task<IUser> GetUserAsync(ulong id); | |||||
| Task<IUser> GetUserAsync(string username, string discriminator); | |||||
| Task<ISelfUser> GetCurrentUserAsync(); | |||||
| Task<IReadOnlyCollection<IUser>> QueryUsersAsync(string query, int limit); | |||||
| Task<IReadOnlyCollection<IVoiceRegion>> GetVoiceRegions(); | |||||
| Task<IVoiceRegion> GetVoiceRegion(string id); | |||||
| Task<IReadOnlyCollection<IVoiceRegion>> GetVoiceRegionsAsync(); | |||||
| Task<IVoiceRegion> GetVoiceRegionAsync(string id); | |||||
| } | } | ||||
| } | } | ||||
| @@ -7,28 +7,28 @@ namespace Discord.Logging | |||||
| { | { | ||||
| LogSeverity Level { get; } | LogSeverity Level { get; } | ||||
| Task Log(LogSeverity severity, string message, Exception exception = null); | |||||
| Task Log(LogSeverity severity, FormattableString message, Exception exception = null); | |||||
| Task Log(LogSeverity severity, Exception exception); | |||||
| Task LogAsync(LogSeverity severity, string message, Exception exception = null); | |||||
| Task LogAsync(LogSeverity severity, FormattableString message, Exception exception = null); | |||||
| Task LogAsync(LogSeverity severity, Exception exception); | |||||
| Task Error(string message, Exception exception = null); | |||||
| Task Error(FormattableString message, Exception exception = null); | |||||
| Task Error(Exception exception); | |||||
| Task ErrorAsync(string message, Exception exception = null); | |||||
| Task ErrorAsync(FormattableString message, Exception exception = null); | |||||
| Task ErrorAsync(Exception exception); | |||||
| Task Warning(string message, Exception exception = null); | |||||
| Task Warning(FormattableString message, Exception exception = null); | |||||
| Task Warning(Exception exception); | |||||
| Task WarningAsync(string message, Exception exception = null); | |||||
| Task WarningAsync(FormattableString message, Exception exception = null); | |||||
| Task WarningAsync(Exception exception); | |||||
| Task Info(string message, Exception exception = null); | |||||
| Task Info(FormattableString message, Exception exception = null); | |||||
| Task Info(Exception exception); | |||||
| Task InfoAsync(string message, Exception exception = null); | |||||
| Task InfoAsync(FormattableString message, Exception exception = null); | |||||
| Task InfoAsync(Exception exception); | |||||
| Task Verbose(string message, Exception exception = null); | |||||
| Task Verbose(FormattableString message, Exception exception = null); | |||||
| Task Verbose(Exception exception); | |||||
| Task VerboseAsync(string message, Exception exception = null); | |||||
| Task VerboseAsync(FormattableString message, Exception exception = null); | |||||
| Task VerboseAsync(Exception exception); | |||||
| Task Debug(string message, Exception exception = null); | |||||
| Task Debug(FormattableString message, Exception exception = null); | |||||
| Task Debug(Exception exception); | |||||
| Task DebugAsync(string message, Exception exception = null); | |||||
| Task DebugAsync(FormattableString message, Exception exception = null); | |||||
| Task DebugAsync(Exception exception); | |||||
| } | } | ||||
| } | } | ||||
| @@ -15,101 +15,101 @@ namespace Discord.Logging | |||||
| Level = minSeverity; | Level = minSeverity; | ||||
| } | } | ||||
| public async Task Log(LogSeverity severity, string source, string message, Exception ex = null) | |||||
| public async Task LogAsync(LogSeverity severity, string source, string message, Exception ex = null) | |||||
| { | { | ||||
| if (severity <= Level) | if (severity <= Level) | ||||
| await Message.Raise(new LogMessage(severity, source, message, ex)).ConfigureAwait(false); | |||||
| await Message.RaiseAsync(new LogMessage(severity, source, message, ex)).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task Log(LogSeverity severity, string source, FormattableString message, Exception ex = null) | |||||
| public async Task LogAsync(LogSeverity severity, string source, FormattableString message, Exception ex = null) | |||||
| { | { | ||||
| if (severity <= Level) | if (severity <= Level) | ||||
| await Message.Raise(new LogMessage(severity, source, message.ToString(), ex)).ConfigureAwait(false); | |||||
| await Message.RaiseAsync(new LogMessage(severity, source, message.ToString(), ex)).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task Log(LogSeverity severity, string source, Exception ex) | |||||
| public async Task LogAsync(LogSeverity severity, string source, Exception ex) | |||||
| { | { | ||||
| if (severity <= Level) | if (severity <= Level) | ||||
| await Message.Raise(new LogMessage(severity, source, null, ex)).ConfigureAwait(false); | |||||
| await Message.RaiseAsync(new LogMessage(severity, source, null, ex)).ConfigureAwait(false); | |||||
| } | } | ||||
| async Task ILogger.Log(LogSeverity severity, string message, Exception ex) | |||||
| async Task ILogger.LogAsync(LogSeverity severity, string message, Exception ex) | |||||
| { | { | ||||
| if (severity <= Level) | if (severity <= Level) | ||||
| await Message.Raise(new LogMessage(severity, "Discord", message, ex)).ConfigureAwait(false); | |||||
| await Message.RaiseAsync(new LogMessage(severity, "Discord", message, ex)).ConfigureAwait(false); | |||||
| } | } | ||||
| async Task ILogger.Log(LogSeverity severity, FormattableString message, Exception ex) | |||||
| async Task ILogger.LogAsync(LogSeverity severity, FormattableString message, Exception ex) | |||||
| { | { | ||||
| if (severity <= Level) | if (severity <= Level) | ||||
| await Message.Raise(new LogMessage(severity, "Discord", message.ToString(), ex)).ConfigureAwait(false); | |||||
| await Message.RaiseAsync(new LogMessage(severity, "Discord", message.ToString(), ex)).ConfigureAwait(false); | |||||
| } | } | ||||
| async Task ILogger.Log(LogSeverity severity, Exception ex) | |||||
| async Task ILogger.LogAsync(LogSeverity severity, Exception ex) | |||||
| { | { | ||||
| if (severity <= Level) | if (severity <= Level) | ||||
| await Message.Raise(new LogMessage(severity, "Discord", null, ex)).ConfigureAwait(false); | |||||
| await Message.RaiseAsync(new LogMessage(severity, "Discord", null, ex)).ConfigureAwait(false); | |||||
| } | } | ||||
| public Task Error(string source, string message, Exception ex = null) | |||||
| => Log(LogSeverity.Error, source, message, ex); | |||||
| public Task Error(string source, FormattableString message, Exception ex = null) | |||||
| => Log(LogSeverity.Error, source, message, ex); | |||||
| public Task Error(string source, Exception ex) | |||||
| => Log(LogSeverity.Error, source, ex); | |||||
| Task ILogger.Error(string message, Exception ex) | |||||
| => Log(LogSeverity.Error, "Discord", message, ex); | |||||
| Task ILogger.Error(FormattableString message, Exception ex) | |||||
| => Log(LogSeverity.Error, "Discord", message, ex); | |||||
| Task ILogger.Error(Exception ex) | |||||
| => Log(LogSeverity.Error, "Discord", ex); | |||||
| public Task ErrorAsync(string source, string message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Error, source, message, ex); | |||||
| public Task ErrorAsync(string source, FormattableString message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Error, source, message, ex); | |||||
| public Task ErrorAsync(string source, Exception ex) | |||||
| => LogAsync(LogSeverity.Error, source, ex); | |||||
| Task ILogger.ErrorAsync(string message, Exception ex) | |||||
| => LogAsync(LogSeverity.Error, "Discord", message, ex); | |||||
| Task ILogger.ErrorAsync(FormattableString message, Exception ex) | |||||
| => LogAsync(LogSeverity.Error, "Discord", message, ex); | |||||
| Task ILogger.ErrorAsync(Exception ex) | |||||
| => LogAsync(LogSeverity.Error, "Discord", ex); | |||||
| public Task Warning(string source, string message, Exception ex = null) | |||||
| => Log(LogSeverity.Warning, source, message, ex); | |||||
| public Task Warning(string source, FormattableString message, Exception ex = null) | |||||
| => Log(LogSeverity.Warning, source, message, ex); | |||||
| public Task Warning(string source, Exception ex) | |||||
| => Log(LogSeverity.Warning, source, ex); | |||||
| Task ILogger.Warning(string message, Exception ex) | |||||
| => Log(LogSeverity.Warning, "Discord", message, ex); | |||||
| Task ILogger.Warning(FormattableString message, Exception ex) | |||||
| => Log(LogSeverity.Warning, "Discord", message, ex); | |||||
| Task ILogger.Warning(Exception ex) | |||||
| => Log(LogSeverity.Warning, "Discord", ex); | |||||
| public Task WarningAsync(string source, string message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Warning, source, message, ex); | |||||
| public Task WarningAsync(string source, FormattableString message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Warning, source, message, ex); | |||||
| public Task WarningAsync(string source, Exception ex) | |||||
| => LogAsync(LogSeverity.Warning, source, ex); | |||||
| Task ILogger.WarningAsync(string message, Exception ex) | |||||
| => LogAsync(LogSeverity.Warning, "Discord", message, ex); | |||||
| Task ILogger.WarningAsync(FormattableString message, Exception ex) | |||||
| => LogAsync(LogSeverity.Warning, "Discord", message, ex); | |||||
| Task ILogger.WarningAsync(Exception ex) | |||||
| => LogAsync(LogSeverity.Warning, "Discord", ex); | |||||
| public Task Info(string source, string message, Exception ex = null) | |||||
| => Log(LogSeverity.Info, source, message, ex); | |||||
| public Task Info(string source, FormattableString message, Exception ex = null) | |||||
| => Log(LogSeverity.Info, source, message, ex); | |||||
| public Task Info(string source, Exception ex) | |||||
| => Log(LogSeverity.Info, source, ex); | |||||
| Task ILogger.Info(string message, Exception ex) | |||||
| => Log(LogSeverity.Info, "Discord", message, ex); | |||||
| Task ILogger.Info(FormattableString message, Exception ex) | |||||
| => Log(LogSeverity.Info, "Discord", message, ex); | |||||
| Task ILogger.Info(Exception ex) | |||||
| => Log(LogSeverity.Info, "Discord", ex); | |||||
| public Task InfoAsync(string source, string message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Info, source, message, ex); | |||||
| public Task InfoAsync(string source, FormattableString message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Info, source, message, ex); | |||||
| public Task InfoAsync(string source, Exception ex) | |||||
| => LogAsync(LogSeverity.Info, source, ex); | |||||
| Task ILogger.InfoAsync(string message, Exception ex) | |||||
| => LogAsync(LogSeverity.Info, "Discord", message, ex); | |||||
| Task ILogger.InfoAsync(FormattableString message, Exception ex) | |||||
| => LogAsync(LogSeverity.Info, "Discord", message, ex); | |||||
| Task ILogger.InfoAsync(Exception ex) | |||||
| => LogAsync(LogSeverity.Info, "Discord", ex); | |||||
| public Task Verbose(string source, string message, Exception ex = null) | |||||
| => Log(LogSeverity.Verbose, source, message, ex); | |||||
| public Task Verbose(string source, FormattableString message, Exception ex = null) | |||||
| => Log(LogSeverity.Verbose, source, message, ex); | |||||
| public Task Verbose(string source, Exception ex) | |||||
| => Log(LogSeverity.Verbose, source, ex); | |||||
| Task ILogger.Verbose(string message, Exception ex) | |||||
| => Log(LogSeverity.Verbose, "Discord", message, ex); | |||||
| Task ILogger.Verbose(FormattableString message, Exception ex) | |||||
| => Log(LogSeverity.Verbose, "Discord", message, ex); | |||||
| Task ILogger.Verbose(Exception ex) | |||||
| => Log(LogSeverity.Verbose, "Discord", ex); | |||||
| public Task VerboseAsync(string source, string message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Verbose, source, message, ex); | |||||
| public Task VerboseAsync(string source, FormattableString message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Verbose, source, message, ex); | |||||
| public Task VerboseAsync(string source, Exception ex) | |||||
| => LogAsync(LogSeverity.Verbose, source, ex); | |||||
| Task ILogger.VerboseAsync(string message, Exception ex) | |||||
| => LogAsync(LogSeverity.Verbose, "Discord", message, ex); | |||||
| Task ILogger.VerboseAsync(FormattableString message, Exception ex) | |||||
| => LogAsync(LogSeverity.Verbose, "Discord", message, ex); | |||||
| Task ILogger.VerboseAsync(Exception ex) | |||||
| => LogAsync(LogSeverity.Verbose, "Discord", ex); | |||||
| public Task Debug(string source, string message, Exception ex = null) | |||||
| => Log(LogSeverity.Debug, source, message, ex); | |||||
| public Task Debug(string source, FormattableString message, Exception ex = null) | |||||
| => Log(LogSeverity.Debug, source, message, ex); | |||||
| public Task Debug(string source, Exception ex) | |||||
| => Log(LogSeverity.Debug, source, ex); | |||||
| Task ILogger.Debug(string message, Exception ex) | |||||
| => Log(LogSeverity.Debug, "Discord", message, ex); | |||||
| Task ILogger.Debug(FormattableString message, Exception ex) | |||||
| => Log(LogSeverity.Debug, "Discord", message, ex); | |||||
| Task ILogger.Debug(Exception ex) | |||||
| => Log(LogSeverity.Debug, "Discord", ex); | |||||
| public Task DebugAsync(string source, string message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Debug, source, message, ex); | |||||
| public Task DebugAsync(string source, FormattableString message, Exception ex = null) | |||||
| => LogAsync(LogSeverity.Debug, source, message, ex); | |||||
| public Task DebugAsync(string source, Exception ex) | |||||
| => LogAsync(LogSeverity.Debug, source, ex); | |||||
| Task ILogger.DebugAsync(string message, Exception ex) | |||||
| => LogAsync(LogSeverity.Debug, "Discord", message, ex); | |||||
| Task ILogger.DebugAsync(FormattableString message, Exception ex) | |||||
| => LogAsync(LogSeverity.Debug, "Discord", message, ex); | |||||
| Task ILogger.DebugAsync(Exception ex) | |||||
| => LogAsync(LogSeverity.Debug, "Discord", ex); | |||||
| public Logger CreateLogger(string name) => new Logger(this, name); | public Logger CreateLogger(string name) => new Logger(this, name); | ||||
| } | } | ||||
| @@ -3,7 +3,7 @@ using System.Threading.Tasks; | |||||
| namespace Discord.Logging | namespace Discord.Logging | ||||
| { | { | ||||
| internal class Logger | |||||
| internal class Logger : ILogger | |||||
| { | { | ||||
| private readonly LogManager _manager; | private readonly LogManager _manager; | ||||
| @@ -16,44 +16,44 @@ namespace Discord.Logging | |||||
| Name = name; | Name = name; | ||||
| } | } | ||||
| public Task Log(LogSeverity severity, string message, Exception exception = null) | |||||
| => _manager.Log(severity, Name, message, exception); | |||||
| public Task Log(LogSeverity severity, FormattableString message, Exception exception = null) | |||||
| => _manager.Log(severity, Name, message, exception); | |||||
| public Task Error(string message, Exception exception = null) | |||||
| => _manager.Error(Name, message, exception); | |||||
| public Task Error(FormattableString message, Exception exception = null) | |||||
| => _manager.Error(Name, message, exception); | |||||
| public Task Error(Exception exception) | |||||
| => _manager.Error(Name, exception); | |||||
| public Task Warning(string message, Exception exception = null) | |||||
| => _manager.Warning(Name, message, exception); | |||||
| public Task Warning(FormattableString message, Exception exception = null) | |||||
| => _manager.Warning(Name, message, exception); | |||||
| public Task Warning(Exception exception) | |||||
| => _manager.Warning(Name, exception); | |||||
| public Task Info(string message, Exception exception = null) | |||||
| => _manager.Info(Name, message, exception); | |||||
| public Task Info(FormattableString message, Exception exception = null) | |||||
| => _manager.Info(Name, message, exception); | |||||
| public Task Info(Exception exception) | |||||
| => _manager.Info(Name, exception); | |||||
| public Task Verbose(string message, Exception exception = null) | |||||
| => _manager.Verbose(Name, message, exception); | |||||
| public Task Verbose(FormattableString message, Exception exception = null) | |||||
| => _manager.Verbose(Name, message, exception); | |||||
| public Task Verbose(Exception exception) | |||||
| => _manager.Verbose(Name, exception); | |||||
| public Task Debug(string message, Exception exception = null) | |||||
| => _manager.Debug(Name, message, exception); | |||||
| public Task Debug(FormattableString message, Exception exception = null) | |||||
| => _manager.Debug(Name, message, exception); | |||||
| public Task Debug(Exception exception) | |||||
| => _manager.Debug(Name, exception); | |||||
| public Task LogAsync(LogSeverity severity, string message, Exception exception = null) | |||||
| => _manager.LogAsync(severity, Name, message, exception); | |||||
| public Task LogAsync(LogSeverity severity, FormattableString message, Exception exception = null) | |||||
| => _manager.LogAsync(severity, Name, message, exception); | |||||
| public Task ErrorAsync(string message, Exception exception = null) | |||||
| => _manager.ErrorAsync(Name, message, exception); | |||||
| public Task ErrorAsync(FormattableString message, Exception exception = null) | |||||
| => _manager.ErrorAsync(Name, message, exception); | |||||
| public Task ErrorAsync(Exception exception) | |||||
| => _manager.ErrorAsync(Name, exception); | |||||
| public Task WarningAsync(string message, Exception exception = null) | |||||
| => _manager.WarningAsync(Name, message, exception); | |||||
| public Task WarningAsync(FormattableString message, Exception exception = null) | |||||
| => _manager.WarningAsync(Name, message, exception); | |||||
| public Task WarningAsync(Exception exception) | |||||
| => _manager.WarningAsync(Name, exception); | |||||
| public Task InfoAsync(string message, Exception exception = null) | |||||
| => _manager.InfoAsync(Name, message, exception); | |||||
| public Task InfoAsync(FormattableString message, Exception exception = null) | |||||
| => _manager.InfoAsync(Name, message, exception); | |||||
| public Task InfoAsync(Exception exception) | |||||
| => _manager.InfoAsync(Name, exception); | |||||
| public Task VerboseAsync(string message, Exception exception = null) | |||||
| => _manager.VerboseAsync(Name, message, exception); | |||||
| public Task VerboseAsync(FormattableString message, Exception exception = null) | |||||
| => _manager.VerboseAsync(Name, message, exception); | |||||
| public Task VerboseAsync(Exception exception) | |||||
| => _manager.VerboseAsync(Name, exception); | |||||
| public Task DebugAsync(string message, Exception exception = null) | |||||
| => _manager.DebugAsync(Name, message, exception); | |||||
| public Task DebugAsync(FormattableString message, Exception exception = null) | |||||
| => _manager.DebugAsync(Name, message, exception); | |||||
| public Task DebugAsync(Exception exception) | |||||
| => _manager.DebugAsync(Name, exception); | |||||
| } | } | ||||
| } | } | ||||
| @@ -11,6 +11,6 @@ namespace Discord.Net.Queue | |||||
| CancellationToken CancelToken { get; } | CancellationToken CancelToken { get; } | ||||
| int? TimeoutTick { get; } | int? TimeoutTick { get; } | ||||
| Task<Stream> Send(); | |||||
| Task<Stream> SendAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -61,7 +61,7 @@ namespace Discord.Net.Queue | |||||
| _cancelToken = CancellationToken.None; | _cancelToken = CancellationToken.None; | ||||
| _parentToken = CancellationToken.None; | _parentToken = CancellationToken.None; | ||||
| } | } | ||||
| public async Task SetCancelToken(CancellationToken cancelToken) | |||||
| public async Task SetCancelTokenAsync(CancellationToken cancelToken) | |||||
| { | { | ||||
| await _lock.WaitAsync().ConfigureAwait(false); | await _lock.WaitAsync().ConfigureAwait(false); | ||||
| try | try | ||||
| @@ -72,17 +72,17 @@ namespace Discord.Net.Queue | |||||
| finally { _lock.Release(); } | finally { _lock.Release(); } | ||||
| } | } | ||||
| internal async Task<Stream> Send(RestRequest request, BucketGroup group, int bucketId, ulong guildId) | |||||
| internal async Task<Stream> SendAsync(RestRequest request, BucketGroup group, int bucketId, ulong guildId) | |||||
| { | { | ||||
| request.CancelToken = _cancelToken; | request.CancelToken = _cancelToken; | ||||
| var bucket = GetBucket(group, bucketId, guildId); | var bucket = GetBucket(group, bucketId, guildId); | ||||
| return await bucket.Send(request).ConfigureAwait(false); | |||||
| return await bucket.SendAsync(request).ConfigureAwait(false); | |||||
| } | } | ||||
| internal async Task<Stream> Send(WebSocketRequest request, BucketGroup group, int bucketId, ulong guildId) | |||||
| internal async Task<Stream> SendAsync(WebSocketRequest request, BucketGroup group, int bucketId, ulong guildId) | |||||
| { | { | ||||
| request.CancelToken = _cancelToken; | request.CancelToken = _cancelToken; | ||||
| var bucket = GetBucket(group, bucketId, guildId); | var bucket = GetBucket(group, bucketId, guildId); | ||||
| return await bucket.Send(request).ConfigureAwait(false); | |||||
| return await bucket.SendAsync(request).ConfigureAwait(false); | |||||
| } | } | ||||
| private RequestQueueBucket CreateBucket(BucketDefinition def) | private RequestQueueBucket CreateBucket(BucketDefinition def) | ||||
| @@ -119,7 +119,7 @@ namespace Discord.Net.Queue | |||||
| return _guildBuckets[(int)type].GetOrAdd(guildId, _ => CreateBucket(_guildLimits[type])); | return _guildBuckets[(int)type].GetOrAdd(guildId, _ => CreateBucket(_guildLimits[type])); | ||||
| } | } | ||||
| public async Task Clear() | |||||
| public async Task ClearAsync() | |||||
| { | { | ||||
| await _lock.WaitAsync().ConfigureAwait(false); | await _lock.WaitAsync().ConfigureAwait(false); | ||||
| try | try | ||||
| @@ -28,13 +28,13 @@ namespace Discord.Net.Queue | |||||
| Parent = parent; | Parent = parent; | ||||
| } | } | ||||
| public async Task<Stream> Send(IQueuedRequest request) | |||||
| public async Task<Stream> SendAsync(IQueuedRequest request) | |||||
| { | { | ||||
| var endTick = request.TimeoutTick; | var endTick = request.TimeoutTick; | ||||
| //Wait until a spot is open in our bucket | //Wait until a spot is open in our bucket | ||||
| if (_semaphore != null) | if (_semaphore != null) | ||||
| await Enter(endTick).ConfigureAwait(false); | |||||
| await EnterAsync(endTick).ConfigureAwait(false); | |||||
| try | try | ||||
| { | { | ||||
| while (true) | while (true) | ||||
| @@ -63,10 +63,10 @@ namespace Discord.Net.Queue | |||||
| { | { | ||||
| //If there's a parent bucket, pass this request to them | //If there's a parent bucket, pass this request to them | ||||
| if (Parent != null) | if (Parent != null) | ||||
| return await Parent.Send(request).ConfigureAwait(false); | |||||
| return await Parent.SendAsync(request).ConfigureAwait(false); | |||||
| //We have all our semaphores, send the request | //We have all our semaphores, send the request | ||||
| return await request.Send().ConfigureAwait(false); | |||||
| return await request.SendAsync().ConfigureAwait(false); | |||||
| } | } | ||||
| catch (HttpRateLimitException ex) | catch (HttpRateLimitException ex) | ||||
| { | { | ||||
| @@ -79,7 +79,7 @@ namespace Discord.Net.Queue | |||||
| { | { | ||||
| //Make sure we put this entry back after WindowMilliseconds | //Make sure we put this entry back after WindowMilliseconds | ||||
| if (_semaphore != null) | if (_semaphore != null) | ||||
| QueueExit(); | |||||
| QueueExitAsync(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -92,17 +92,17 @@ namespace Discord.Net.Queue | |||||
| { | { | ||||
| _resumeNotifier = new TaskCompletionSource<byte>(); | _resumeNotifier = new TaskCompletionSource<byte>(); | ||||
| _pauseEndTick = unchecked(Environment.TickCount + milliseconds); | _pauseEndTick = unchecked(Environment.TickCount + milliseconds); | ||||
| QueueResume(milliseconds); | |||||
| QueueResumeAsync(milliseconds); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| private async Task QueueResume(int millis) | |||||
| private async Task QueueResumeAsync(int millis) | |||||
| { | { | ||||
| await Task.Delay(millis).ConfigureAwait(false); | await Task.Delay(millis).ConfigureAwait(false); | ||||
| _resumeNotifier.SetResult(0); | _resumeNotifier.SetResult(0); | ||||
| } | } | ||||
| private async Task Enter(int? endTick) | |||||
| private async Task EnterAsync(int? endTick) | |||||
| { | { | ||||
| if (endTick.HasValue) | if (endTick.HasValue) | ||||
| { | { | ||||
| @@ -113,7 +113,7 @@ namespace Discord.Net.Queue | |||||
| else | else | ||||
| await _semaphore.WaitAsync().ConfigureAwait(false); | await _semaphore.WaitAsync().ConfigureAwait(false); | ||||
| } | } | ||||
| private async Task QueueExit() | |||||
| private async Task QueueExitAsync() | |||||
| { | { | ||||
| await Task.Delay(_windowMilliseconds).ConfigureAwait(false); | await Task.Delay(_windowMilliseconds).ConfigureAwait(false); | ||||
| _semaphore.Release(); | _semaphore.Release(); | ||||
| @@ -47,14 +47,14 @@ namespace Discord.Net.Queue | |||||
| Promise = new TaskCompletionSource<Stream>(); | Promise = new TaskCompletionSource<Stream>(); | ||||
| } | } | ||||
| public async Task<Stream> Send() | |||||
| public async Task<Stream> SendAsync() | |||||
| { | { | ||||
| if (IsMultipart) | if (IsMultipart) | ||||
| return await Client.Send(Method, Endpoint, MultipartParams, HeaderOnly).ConfigureAwait(false); | |||||
| return await Client.SendAsync(Method, Endpoint, MultipartParams, HeaderOnly).ConfigureAwait(false); | |||||
| else if (Json != null) | else if (Json != null) | ||||
| return await Client.Send(Method, Endpoint, Json, HeaderOnly).ConfigureAwait(false); | |||||
| return await Client.SendAsync(Method, Endpoint, Json, HeaderOnly).ConfigureAwait(false); | |||||
| else | else | ||||
| return await Client.Send(Method, Endpoint, HeaderOnly).ConfigureAwait(false); | |||||
| return await Client.SendAsync(Method, Endpoint, HeaderOnly).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -32,9 +32,9 @@ namespace Discord.Net.Queue | |||||
| Promise = new TaskCompletionSource<Stream>(); | Promise = new TaskCompletionSource<Stream>(); | ||||
| } | } | ||||
| public async Task<Stream> Send() | |||||
| public async Task<Stream> SendAsync() | |||||
| { | { | ||||
| await Client.Send(Data, DataIndex, DataCount, IsText).ConfigureAwait(false); | |||||
| await Client.SendAsync(Data, DataIndex, DataCount, IsText).ConfigureAwait(false); | |||||
| return null; | return null; | ||||
| } | } | ||||
| } | } | ||||
| @@ -67,22 +67,22 @@ namespace Discord.Net.Rest | |||||
| _cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token; | _cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token; | ||||
| } | } | ||||
| public async Task<Stream> Send(string method, string endpoint, bool headerOnly = false) | |||||
| public async Task<Stream> SendAsync(string method, string endpoint, bool headerOnly = false) | |||||
| { | { | ||||
| string uri = Path.Combine(_baseUrl, endpoint); | string uri = Path.Combine(_baseUrl, endpoint); | ||||
| using (var restRequest = new HttpRequestMessage(GetMethod(method), uri)) | using (var restRequest = new HttpRequestMessage(GetMethod(method), uri)) | ||||
| return await SendInternal(restRequest, headerOnly).ConfigureAwait(false); | |||||
| return await SendInternalAsync(restRequest, headerOnly).ConfigureAwait(false); | |||||
| } | } | ||||
| public async Task<Stream> Send(string method, string endpoint, string json, bool headerOnly = false) | |||||
| public async Task<Stream> SendAsync(string method, string endpoint, string json, bool headerOnly = false) | |||||
| { | { | ||||
| string uri = Path.Combine(_baseUrl, endpoint); | string uri = Path.Combine(_baseUrl, endpoint); | ||||
| using (var restRequest = new HttpRequestMessage(GetMethod(method), uri)) | using (var restRequest = new HttpRequestMessage(GetMethod(method), uri)) | ||||
| { | { | ||||
| restRequest.Content = new StringContent(json, Encoding.UTF8, "application/json"); | restRequest.Content = new StringContent(json, Encoding.UTF8, "application/json"); | ||||
| return await SendInternal(restRequest, headerOnly).ConfigureAwait(false); | |||||
| return await SendInternalAsync(restRequest, headerOnly).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| public async Task<Stream> Send(string method, string endpoint, IReadOnlyDictionary<string, object> multipartParams, bool headerOnly = false) | |||||
| public async Task<Stream> SendAsync(string method, string endpoint, IReadOnlyDictionary<string, object> multipartParams, bool headerOnly = false) | |||||
| { | { | ||||
| string uri = Path.Combine(_baseUrl, endpoint); | string uri = Path.Combine(_baseUrl, endpoint); | ||||
| using (var restRequest = new HttpRequestMessage(GetMethod(method), uri)) | using (var restRequest = new HttpRequestMessage(GetMethod(method), uri)) | ||||
| @@ -110,11 +110,11 @@ namespace Discord.Net.Rest | |||||
| } | } | ||||
| } | } | ||||
| restRequest.Content = content; | restRequest.Content = content; | ||||
| return await SendInternal(restRequest, headerOnly).ConfigureAwait(false); | |||||
| return await SendInternalAsync(restRequest, headerOnly).ConfigureAwait(false); | |||||
| } | } | ||||
| } | } | ||||
| private async Task<Stream> SendInternal(HttpRequestMessage request, bool headerOnly) | |||||
| private async Task<Stream> SendInternalAsync(HttpRequestMessage request, bool headerOnly) | |||||
| { | { | ||||
| while (true) | while (true) | ||||
| { | { | ||||
| @@ -11,8 +11,8 @@ namespace Discord.Net.Rest | |||||
| void SetHeader(string key, string value); | void SetHeader(string key, string value); | ||||
| void SetCancelToken(CancellationToken cancelToken); | void SetCancelToken(CancellationToken cancelToken); | ||||
| Task<Stream> Send(string method, string endpoint, bool headerOnly = false); | |||||
| Task<Stream> Send(string method, string endpoint, string json, bool headerOnly = false); | |||||
| Task<Stream> Send(string method, string endpoint, IReadOnlyDictionary<string, object> multipartParams, bool headerOnly = false); | |||||
| Task<Stream> SendAsync(string method, string endpoint, bool headerOnly = false); | |||||
| Task<Stream> SendAsync(string method, string endpoint, string json, bool headerOnly = false); | |||||
| Task<Stream> SendAsync(string method, string endpoint, IReadOnlyDictionary<string, object> multipartParams, bool headerOnly = false); | |||||
| } | } | ||||
| } | } | ||||
| @@ -50,18 +50,18 @@ namespace Discord.Net.WebSockets | |||||
| Dispose(true); | Dispose(true); | ||||
| } | } | ||||
| public async Task Connect(string host) | |||||
| public async Task ConnectAsync(string host) | |||||
| { | { | ||||
| //Assume locked | //Assume locked | ||||
| await Disconnect().ConfigureAwait(false); | |||||
| await DisconnectAsync().ConfigureAwait(false); | |||||
| _cancelTokenSource = new CancellationTokenSource(); | _cancelTokenSource = new CancellationTokenSource(); | ||||
| _cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token; | _cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token; | ||||
| await _client.ConnectAsync(new Uri(host), _cancelToken).ConfigureAwait(false); | await _client.ConnectAsync(new Uri(host), _cancelToken).ConfigureAwait(false); | ||||
| _task = Run(_cancelToken); | |||||
| _task = RunAsync(_cancelToken); | |||||
| } | } | ||||
| public async Task Disconnect() | |||||
| public async Task DisconnectAsync() | |||||
| { | { | ||||
| //Assume locked | //Assume locked | ||||
| _cancelTokenSource.Cancel(); | _cancelTokenSource.Cancel(); | ||||
| @@ -82,7 +82,7 @@ namespace Discord.Net.WebSockets | |||||
| _cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token; | _cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_parentToken, _cancelTokenSource.Token).Token; | ||||
| } | } | ||||
| public async Task Send(byte[] data, int index, int count, bool isText) | |||||
| public async Task SendAsync(byte[] data, int index, int count, bool isText) | |||||
| { | { | ||||
| await _sendLock.WaitAsync(_cancelToken); | await _sendLock.WaitAsync(_cancelToken); | ||||
| try | try | ||||
| @@ -118,7 +118,7 @@ namespace Discord.Net.WebSockets | |||||
| } | } | ||||
| //TODO: Check this code | //TODO: Check this code | ||||
| private async Task Run(CancellationToken cancelToken) | |||||
| private async Task RunAsync(CancellationToken cancelToken) | |||||
| { | { | ||||
| var buffer = new ArraySegment<byte>(new byte[ReceiveChunkSize]); | var buffer = new ArraySegment<byte>(new byte[ReceiveChunkSize]); | ||||
| var stream = new MemoryStream(); | var stream = new MemoryStream(); | ||||
| @@ -151,11 +151,11 @@ namespace Discord.Net.WebSockets | |||||
| var array = stream.ToArray(); | var array = stream.ToArray(); | ||||
| if (result.MessageType == WebSocketMessageType.Binary) | if (result.MessageType == WebSocketMessageType.Binary) | ||||
| await BinaryMessage.Raise(array, 0, array.Length).ConfigureAwait(false); | |||||
| await BinaryMessage.RaiseAsync(array, 0, array.Length).ConfigureAwait(false); | |||||
| else if (result.MessageType == WebSocketMessageType.Text) | else if (result.MessageType == WebSocketMessageType.Text) | ||||
| { | { | ||||
| string text = Encoding.UTF8.GetString(array, 0, array.Length); | string text = Encoding.UTF8.GetString(array, 0, array.Length); | ||||
| await TextMessage.Raise(text).ConfigureAwait(false); | |||||
| await TextMessage.RaiseAsync(text).ConfigureAwait(false); | |||||
| } | } | ||||
| stream.Position = 0; | stream.Position = 0; | ||||
| @@ -12,9 +12,9 @@ namespace Discord.Net.WebSockets | |||||
| void SetHeader(string key, string value); | void SetHeader(string key, string value); | ||||
| void SetCancelToken(CancellationToken cancelToken); | void SetCancelToken(CancellationToken cancelToken); | ||||
| Task Connect(string host); | |||||
| Task Disconnect(); | |||||
| Task ConnectAsync(string host); | |||||
| Task DisconnectAsync(); | |||||
| Task Send(byte[] data, int index, int count, bool isText); | |||||
| Task SendAsync(byte[] data, int index, int count, bool isText); | |||||
| } | } | ||||
| } | } | ||||
| @@ -81,17 +81,17 @@ namespace Discord | |||||
| .ToImmutableArray(); | .ToImmutableArray(); | ||||
| } | } | ||||
| public async Task<CachedMessage> Download(ulong id) | |||||
| public async Task<CachedMessage> DownloadAsync(ulong id) | |||||
| { | { | ||||
| var msg = Get(id); | var msg = Get(id); | ||||
| if (msg != null) | if (msg != null) | ||||
| return msg; | return msg; | ||||
| var model = await _discord.ApiClient.GetChannelMessage(_channel.Id, id).ConfigureAwait(false); | |||||
| var model = await _discord.ApiClient.GetChannelMessageAsync(_channel.Id, id).ConfigureAwait(false); | |||||
| if (model != null) | if (model != null) | ||||
| return new CachedMessage(_channel, new User(_discord, model.Author), model); | return new CachedMessage(_channel, new User(_discord, model.Author), model); | ||||
| return null; | return null; | ||||
| } | } | ||||
| public async Task<IReadOnlyCollection<CachedMessage>> Download(ulong? fromId, Direction dir, int limit) | |||||
| public async Task<IReadOnlyCollection<CachedMessage>> DownloadAsync(ulong? fromId, Direction dir, int limit) | |||||
| { | { | ||||
| //TODO: Test heavily, especially the ordering of messages | //TODO: Test heavily, especially the ordering of messages | ||||
| if (limit < 0) throw new ArgumentOutOfRangeException(nameof(limit)); | if (limit < 0) throw new ArgumentOutOfRangeException(nameof(limit)); | ||||
| @@ -110,7 +110,7 @@ namespace Discord | |||||
| RelativeDirection = dir, | RelativeDirection = dir, | ||||
| RelativeMessageId = dir == Direction.Before ? cachedMessages[0].Id : cachedMessages[cachedMessages.Count - 1].Id | RelativeMessageId = dir == Direction.Before ? cachedMessages[0].Id : cachedMessages[cachedMessages.Count - 1].Id | ||||
| }; | }; | ||||
| var downloadedMessages = await _discord.ApiClient.GetChannelMessages(_channel.Id, args).ConfigureAwait(false); | |||||
| var downloadedMessages = await _discord.ApiClient.GetChannelMessagesAsync(_channel.Id, args).ConfigureAwait(false); | |||||
| return cachedMessages.Concat(downloadedMessages.Select(x => new CachedMessage(_channel, _channel.GetCachedUser(x.Id), x))).ToImmutableArray(); | return cachedMessages.Concat(downloadedMessages.Select(x => new CachedMessage(_channel, _channel.GetCachedUser(x.Id), x))).ToImmutableArray(); | ||||
| } | } | ||||
| } | } | ||||