| @@ -221,123 +221,111 @@ namespace Discord.Rpc | |||
| } | |||
| } | |||
| public async Task<string> AuthorizeAsync(string[] scopes, string rpcToken = null) | |||
| public async Task<string> AuthorizeAsync(string[] scopes, string rpcToken = null, RequestOptions options = null) | |||
| { | |||
| await ConnectAsync(true).ConfigureAwait(false); | |||
| var result = await ApiClient.SendAuthorizeAsync(scopes, rpcToken).ConfigureAwait(false); | |||
| var result = await ApiClient.SendAuthorizeAsync(scopes, rpcToken, options).ConfigureAwait(false); | |||
| await DisconnectAsync().ConfigureAwait(false); | |||
| return result.Code; | |||
| } | |||
| public async Task SubscribeGlobal(params RpcGlobalEvent[] events) | |||
| public async Task SubscribeGlobal(RpcGlobalEvent evnt, RequestOptions options = null) | |||
| { | |||
| Preconditions.AtLeast(events?.Length ?? 0, 1, nameof(events)); | |||
| for (int i = 0; i < events.Length; i++) | |||
| await ApiClient.SendGlobalSubscribeAsync(GetEventName(events[i])); | |||
| await ApiClient.SendGlobalSubscribeAsync(GetEventName(evnt), options); | |||
| } | |||
| public async Task UnsubscribeGlobal(params RpcGlobalEvent[] events) | |||
| public async Task UnsubscribeGlobal(RpcGlobalEvent evnt, RequestOptions options = null) | |||
| { | |||
| Preconditions.AtLeast(events?.Length ?? 0, 1, nameof(events)); | |||
| for (int i = 0; i < events.Length; i++) | |||
| await ApiClient.SendGlobalUnsubscribeAsync(GetEventName(events[i])); | |||
| await ApiClient.SendGlobalUnsubscribeAsync(GetEventName(evnt), options); | |||
| } | |||
| public async Task SubscribeGuild(ulong guildId, params RpcChannelEvent[] events) | |||
| public async Task SubscribeGuild(ulong guildId, RpcChannelEvent evnt, RequestOptions options = null) | |||
| { | |||
| Preconditions.AtLeast(events?.Length ?? 0, 1, nameof(events)); | |||
| for (int i = 0; i < events.Length; i++) | |||
| await ApiClient.SendGuildSubscribeAsync(GetEventName(events[i]), guildId); | |||
| await ApiClient.SendGuildSubscribeAsync(GetEventName(evnt), guildId, options); | |||
| } | |||
| public async Task UnsubscribeGuild(ulong guildId, params RpcChannelEvent[] events) | |||
| public async Task UnsubscribeGuild(ulong guildId, RpcChannelEvent evnt, RequestOptions options = null) | |||
| { | |||
| Preconditions.AtLeast(events?.Length ?? 0, 1, nameof(events)); | |||
| for (int i = 0; i < events.Length; i++) | |||
| await ApiClient.SendGuildUnsubscribeAsync(GetEventName(events[i]), guildId); | |||
| await ApiClient.SendGuildUnsubscribeAsync(GetEventName(evnt), guildId, options); | |||
| } | |||
| public async Task SubscribeChannel(ulong channelId, params RpcChannelEvent[] events) | |||
| public async Task SubscribeChannel(ulong channelId, RpcChannelEvent evnt, RequestOptions options = null) | |||
| { | |||
| Preconditions.AtLeast(events?.Length ?? 0, 1, nameof(events)); | |||
| for (int i = 0; i < events.Length; i++) | |||
| await ApiClient.SendChannelSubscribeAsync(GetEventName(events[i]), channelId); | |||
| await ApiClient.SendChannelSubscribeAsync(GetEventName(evnt), channelId); | |||
| } | |||
| public async Task UnsubscribeChannel(ulong channelId, params RpcChannelEvent[] events) | |||
| public async Task UnsubscribeChannel(ulong channelId, RpcChannelEvent evnt, RequestOptions options = null) | |||
| { | |||
| Preconditions.AtLeast(events?.Length ?? 0, 1, nameof(events)); | |||
| for (int i = 0; i < events.Length; i++) | |||
| await ApiClient.SendChannelUnsubscribeAsync(GetEventName(events[i]), channelId); | |||
| await ApiClient.SendChannelUnsubscribeAsync(GetEventName(evnt), channelId); | |||
| } | |||
| public async Task<RpcGuild> GetRpcGuildAsync(ulong id) | |||
| public async Task<RpcGuild> GetRpcGuildAsync(ulong id, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendGetGuildAsync(id).ConfigureAwait(false); | |||
| var model = await ApiClient.SendGetGuildAsync(id, options).ConfigureAwait(false); | |||
| return RpcGuild.Create(this, model); | |||
| } | |||
| public async Task<IReadOnlyCollection<RpcGuildSummary>> GetRpcGuildsAsync() | |||
| public async Task<IReadOnlyCollection<RpcGuildSummary>> GetRpcGuildsAsync(RequestOptions options = null) | |||
| { | |||
| var models = await ApiClient.SendGetGuildsAsync().ConfigureAwait(false); | |||
| var models = await ApiClient.SendGetGuildsAsync(options).ConfigureAwait(false); | |||
| return models.Guilds.Select(x => RpcGuildSummary.Create(x)).ToImmutableArray(); | |||
| } | |||
| public async Task<RpcChannel> GetRpcChannelAsync(ulong id) | |||
| public async Task<RpcChannel> GetRpcChannelAsync(ulong id, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendGetChannelAsync(id).ConfigureAwait(false); | |||
| var model = await ApiClient.SendGetChannelAsync(id, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model); | |||
| } | |||
| public async Task<IReadOnlyCollection<RpcChannelSummary>> GetRpcChannelsAsync(ulong guildId) | |||
| public async Task<IReadOnlyCollection<RpcChannelSummary>> GetRpcChannelsAsync(ulong guildId, RequestOptions options = null) | |||
| { | |||
| var models = await ApiClient.SendGetChannelsAsync(guildId).ConfigureAwait(false); | |||
| var models = await ApiClient.SendGetChannelsAsync(guildId, options).ConfigureAwait(false); | |||
| return models.Channels.Select(x => RpcChannelSummary.Create(x)).ToImmutableArray(); | |||
| } | |||
| public async Task<IMessageChannel> SelectTextChannelAsync(IChannel channel) | |||
| public async Task<IMessageChannel> SelectTextChannelAsync(IChannel channel, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendSelectTextChannelAsync(channel.Id).ConfigureAwait(false); | |||
| var model = await ApiClient.SendSelectTextChannelAsync(channel.Id, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model) as IMessageChannel; | |||
| } | |||
| public async Task<IMessageChannel> SelectTextChannelAsync(RpcChannelSummary channel) | |||
| public async Task<IMessageChannel> SelectTextChannelAsync(RpcChannelSummary channel, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendSelectTextChannelAsync(channel.Id).ConfigureAwait(false); | |||
| var model = await ApiClient.SendSelectTextChannelAsync(channel.Id, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model) as IMessageChannel; | |||
| } | |||
| public async Task<IMessageChannel> SelectTextChannelAsync(ulong channelId) | |||
| public async Task<IMessageChannel> SelectTextChannelAsync(ulong channelId, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendSelectTextChannelAsync(channelId).ConfigureAwait(false); | |||
| var model = await ApiClient.SendSelectTextChannelAsync(channelId, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model) as IMessageChannel; | |||
| } | |||
| public async Task<IRpcAudioChannel> SelectVoiceChannelAsync(IChannel channel, bool force = false) | |||
| public async Task<IRpcAudioChannel> SelectVoiceChannelAsync(IChannel channel, bool force = false, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendSelectVoiceChannelAsync(channel.Id, force).ConfigureAwait(false); | |||
| var model = await ApiClient.SendSelectVoiceChannelAsync(channel.Id, force, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model) as IRpcAudioChannel; | |||
| } | |||
| public async Task<IRpcAudioChannel> SelectVoiceChannelAsync(RpcChannelSummary channel, bool force = false) | |||
| public async Task<IRpcAudioChannel> SelectVoiceChannelAsync(RpcChannelSummary channel, bool force = false, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendSelectVoiceChannelAsync(channel.Id, force).ConfigureAwait(false); | |||
| var model = await ApiClient.SendSelectVoiceChannelAsync(channel.Id, force, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model) as IRpcAudioChannel; | |||
| } | |||
| public async Task<IRpcAudioChannel> SelectVoiceChannelAsync(ulong channelId, bool force = false) | |||
| public async Task<IRpcAudioChannel> SelectVoiceChannelAsync(ulong channelId, bool force = false, RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.SendSelectVoiceChannelAsync(channelId, force).ConfigureAwait(false); | |||
| var model = await ApiClient.SendSelectVoiceChannelAsync(channelId, force, options).ConfigureAwait(false); | |||
| return RpcChannel.Create(this, model) as IRpcAudioChannel; | |||
| } | |||
| public async Task<VoiceSettings> GetVoiceSettingsAsync() | |||
| public async Task<VoiceSettings> GetVoiceSettingsAsync(RequestOptions options = null) | |||
| { | |||
| var model = await ApiClient.GetVoiceSettingsAsync().ConfigureAwait(false); | |||
| var model = await ApiClient.GetVoiceSettingsAsync(options).ConfigureAwait(false); | |||
| return VoiceSettings.Create(model); | |||
| } | |||
| public async Task SetVoiceSettingsAsync(Action<API.Rpc.VoiceSettings> func) | |||
| public async Task SetVoiceSettingsAsync(Action<API.Rpc.VoiceSettings> func, RequestOptions options = null) | |||
| { | |||
| var settings = new API.Rpc.VoiceSettings(); | |||
| settings.Input = new VoiceDeviceSettings(); | |||
| settings.Output = new VoiceDeviceSettings(); | |||
| settings.Mode = new VoiceMode(); | |||
| func(settings); | |||
| await ApiClient.SetVoiceSettingsAsync(settings).ConfigureAwait(false); | |||
| await ApiClient.SetVoiceSettingsAsync(settings, options).ConfigureAwait(false); | |||
| } | |||
| public async Task SetUserVoiceSettingsAsync(ulong userId, Action<API.Rpc.UserVoiceSettings> func) | |||
| public async Task SetUserVoiceSettingsAsync(ulong userId, Action<API.Rpc.UserVoiceSettings> func, RequestOptions options = null) | |||
| { | |||
| var settings = new API.Rpc.UserVoiceSettings(); | |||
| func(settings); | |||
| await ApiClient.SetUserVoiceSettingsAsync(userId, settings).ConfigureAwait(false); | |||
| await ApiClient.SetUserVoiceSettingsAsync(userId, settings, options).ConfigureAwait(false); | |||
| } | |||
| private static string GetEventName(RpcGlobalEvent rpcEvent) | |||