@@ -319,14 +319,12 @@ namespace Discord.API | |||||
public async Task<SubscriptionResponse> SendGlobalSubscribeAsync(string evt, RequestOptions options = null) | public async Task<SubscriptionResponse> SendGlobalSubscribeAsync(string evt, RequestOptions options = null) | ||||
{ | { | ||||
options = RequestOptions.CreateOrClone(options); | options = RequestOptions.CreateOrClone(options); | ||||
var msg = new object(); | |||||
return await SendRpcAsync<SubscriptionResponse>("SUBSCRIBE", msg, evt: evt, options: options).ConfigureAwait(false); | |||||
return await SendRpcAsync<SubscriptionResponse>("SUBSCRIBE", null, evt: evt, options: options).ConfigureAwait(false); | |||||
} | } | ||||
public async Task<SubscriptionResponse> SendGlobalUnsubscribeAsync(string evt, RequestOptions options = null) | public async Task<SubscriptionResponse> SendGlobalUnsubscribeAsync(string evt, RequestOptions options = null) | ||||
{ | { | ||||
options = RequestOptions.CreateOrClone(options); | options = RequestOptions.CreateOrClone(options); | ||||
var msg = new object(); | |||||
return await SendRpcAsync<SubscriptionResponse>("UNSUBSCRIBE", msg, evt: evt, options: options).ConfigureAwait(false); | |||||
return await SendRpcAsync<SubscriptionResponse>("UNSUBSCRIBE", null, evt: evt, options: options).ConfigureAwait(false); | |||||
} | } | ||||
public async Task<SubscriptionResponse> SendGuildSubscribeAsync(string evt, ulong guildId, RequestOptions options = null) | public async Task<SubscriptionResponse> SendGuildSubscribeAsync(string evt, ulong guildId, RequestOptions options = null) | ||||
@@ -367,6 +365,17 @@ namespace Discord.API | |||||
return await SendRpcAsync<SubscriptionResponse>("UNSUBSCRIBE", msg, evt: evt, options: options).ConfigureAwait(false); | return await SendRpcAsync<SubscriptionResponse>("UNSUBSCRIBE", msg, evt: evt, options: options).ConfigureAwait(false); | ||||
} | } | ||||
public async Task<API.Rpc.VoiceSettings> GetVoiceSettingsAsync(RequestOptions options = null) | |||||
{ | |||||
options = RequestOptions.CreateOrClone(options); | |||||
return await SendRpcAsync<API.Rpc.VoiceSettings>("GET_VOICE_SETTINGS", null, options: options).ConfigureAwait(false); | |||||
} | |||||
public async Task<API.Rpc.VoiceSettings> SetVoiceSettingsAsync(API.Rpc.VoiceSettings settings, RequestOptions options = null) | |||||
{ | |||||
options = RequestOptions.CreateOrClone(options); | |||||
return await SendRpcAsync<API.Rpc.VoiceSettings>("SET_VOICE_SETTINGS", settings, options: options).ConfigureAwait(false); | |||||
} | |||||
private bool ProcessMessage(API.Rpc.RpcFrame msg) | private bool ProcessMessage(API.Rpc.RpcFrame msg) | ||||
{ | { | ||||
RpcRequest requestTracker; | RpcRequest requestTracker; | ||||
@@ -5,10 +5,10 @@ namespace Discord.API.Rpc | |||||
public class VoiceDeviceSettings | public class VoiceDeviceSettings | ||||
{ | { | ||||
[JsonProperty("device_id")] | [JsonProperty("device_id")] | ||||
public string DeviceId { get; set; } | |||||
public Optional<string> DeviceId { get; set; } | |||||
[JsonProperty("volume")] | [JsonProperty("volume")] | ||||
public float Volume { get; set; } | |||||
public Optional<float> Volume { get; set; } | |||||
[JsonProperty("available_devices")] | [JsonProperty("available_devices")] | ||||
public VoiceDevice[] AvailableDevices { get; set; } | |||||
public Optional<VoiceDevice[]> AvailableDevices { get; set; } | |||||
} | } | ||||
} | } |
@@ -5,14 +5,14 @@ namespace Discord.API.Rpc | |||||
public class VoiceMode | public class VoiceMode | ||||
{ | { | ||||
[JsonProperty("type")] | [JsonProperty("type")] | ||||
public string Type { get; set; } | |||||
public Optional<string> Type { get; set; } | |||||
[JsonProperty("auto_threshold")] | [JsonProperty("auto_threshold")] | ||||
public bool AutoThreshold { get; set; } | |||||
public Optional<bool> AutoThreshold { get; set; } | |||||
[JsonProperty("threshold")] | [JsonProperty("threshold")] | ||||
public float Threshold { get; set; } | |||||
public Optional<float> Threshold { get; set; } | |||||
[JsonProperty("shortcut")] | [JsonProperty("shortcut")] | ||||
public VoiceShortcut[] Shortcut { get; set; } | |||||
public Optional<VoiceShortcut[]> Shortcut { get; set; } | |||||
[JsonProperty("delay")] | [JsonProperty("delay")] | ||||
public float Delay { get; set; } | |||||
public Optional<float> Delay { get; set; } | |||||
} | } | ||||
} | } |
@@ -13,14 +13,14 @@ namespace Discord.API.Rpc | |||||
[JsonProperty("mode")] | [JsonProperty("mode")] | ||||
public VoiceMode Mode { get; set; } | public VoiceMode Mode { get; set; } | ||||
[JsonProperty("automatic_gain_control")] | [JsonProperty("automatic_gain_control")] | ||||
public bool AutomaticGainControl { get; set; } | |||||
public Optional<bool> AutomaticGainControl { get; set; } | |||||
[JsonProperty("echo_cancellation")] | [JsonProperty("echo_cancellation")] | ||||
public bool EchoCancellation { get; set; } | |||||
public Optional<bool> EchoCancellation { get; set; } | |||||
[JsonProperty("noise_suppression")] | [JsonProperty("noise_suppression")] | ||||
public bool NoiseSuppression { get; set; } | |||||
public Optional<bool> NoiseSuppression { get; set; } | |||||
[JsonProperty("qos")] | [JsonProperty("qos")] | ||||
public bool QualityOfService { get; set; } | |||||
public Optional<bool> QualityOfService { get; set; } | |||||
[JsonProperty("silence_warning")] | [JsonProperty("silence_warning")] | ||||
public bool SilenceWarning { get; set; } | |||||
public Optional<bool> SilenceWarning { get; set; } | |||||
} | } | ||||
} | } |
@@ -6,10 +6,10 @@ namespace Discord.API.Rpc | |||||
public class VoiceShortcut | public class VoiceShortcut | ||||
{ | { | ||||
[JsonProperty("type")] | [JsonProperty("type")] | ||||
public VoiceShortcutType Type { get; set; } | |||||
public Optional<VoiceShortcutType> Type { get; set; } | |||||
[JsonProperty("code")] | [JsonProperty("code")] | ||||
public int Code { get; set; } | |||||
public Optional<int> Code { get; set; } | |||||
[JsonProperty("name")] | [JsonProperty("name")] | ||||
public string Name { get; set; } | |||||
public Optional<string> Name { get; set; } | |||||
} | } | ||||
} | } |
@@ -265,6 +265,21 @@ namespace Discord.Rpc | |||||
await ApiClient.SendChannelUnsubscribeAsync(GetEventName(events[i]), channelId); | await ApiClient.SendChannelUnsubscribeAsync(GetEventName(events[i]), channelId); | ||||
} | } | ||||
public async Task<VoiceSettings> GetVoiceSettingsAsync() | |||||
{ | |||||
var model = await ApiClient.GetVoiceSettingsAsync().ConfigureAwait(false); | |||||
return VoiceSettings.Create(model); | |||||
} | |||||
public async Task SetVoiceSettingsAsync(Action<API.Rpc.VoiceSettings> func) | |||||
{ | |||||
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); | |||||
} | |||||
private static string GetEventName(RpcGlobalEvent rpcEvent) | private static string GetEventName(RpcGlobalEvent rpcEvent) | ||||
{ | { | ||||
switch (rpcEvent) | switch (rpcEvent) | ||||
@@ -36,25 +36,41 @@ namespace Discord.Rpc | |||||
} | } | ||||
internal void Update(Model model) | internal void Update(Model model) | ||||
{ | { | ||||
AutomaticGainControl = model.AutomaticGainControl; | |||||
EchoCancellation = model.EchoCancellation; | |||||
NoiseSuppression = model.NoiseSuppression; | |||||
QualityOfService = model.QualityOfService; | |||||
SilenceWarning = model.SilenceWarning; | |||||
InputDeviceId = model.Input.DeviceId; | |||||
InputVolume = model.Input.Volume; | |||||
AvailableInputDevices = model.Input.AvailableDevices.Select(x => VoiceDevice.Create(x)).ToImmutableArray(); | |||||
OutputDeviceId = model.Output.DeviceId; | |||||
OutputVolume = model.Output.Volume; | |||||
AvailableInputDevices = model.Output.AvailableDevices.Select(x => VoiceDevice.Create(x)).ToImmutableArray(); | |||||
ActivationMode = model.Mode.Type; | |||||
AutoThreshold = model.Mode.AutoThreshold; | |||||
Threshold = model.Mode.Threshold; | |||||
Shortcuts = model.Mode.Shortcut.Select(x => VoiceShortcut.Create(x)).ToImmutableArray(); | |||||
Delay = model.Mode.Delay; | |||||
if (model.AutomaticGainControl.IsSpecified) | |||||
AutomaticGainControl = model.AutomaticGainControl.Value; | |||||
if (model.EchoCancellation.IsSpecified) | |||||
EchoCancellation = model.EchoCancellation.Value; | |||||
if (model.NoiseSuppression.IsSpecified) | |||||
NoiseSuppression = model.NoiseSuppression.Value; | |||||
if (model.QualityOfService.IsSpecified) | |||||
QualityOfService = model.QualityOfService.Value; | |||||
if (model.SilenceWarning.IsSpecified) | |||||
SilenceWarning = model.SilenceWarning.Value; | |||||
if (model.Input.DeviceId.IsSpecified) | |||||
InputDeviceId = model.Input.DeviceId.Value; | |||||
if (model.Input.Volume.IsSpecified) | |||||
InputVolume = model.Input.Volume.Value; | |||||
if (model.Input.AvailableDevices.IsSpecified) | |||||
AvailableInputDevices = model.Input.AvailableDevices.Value.Select(x => VoiceDevice.Create(x)).ToImmutableArray(); | |||||
if (model.Output.DeviceId.IsSpecified) | |||||
OutputDeviceId = model.Output.DeviceId.Value; | |||||
if (model.Output.Volume.IsSpecified) | |||||
OutputVolume = model.Output.Volume.Value; | |||||
if (model.Output.AvailableDevices.IsSpecified) | |||||
AvailableInputDevices = model.Output.AvailableDevices.Value.Select(x => VoiceDevice.Create(x)).ToImmutableArray(); | |||||
if (model.Mode.Type.IsSpecified) | |||||
ActivationMode = model.Mode.Type.Value; | |||||
if (model.Mode.AutoThreshold.IsSpecified) | |||||
AutoThreshold = model.Mode.AutoThreshold.Value; | |||||
if (model.Mode.Threshold.IsSpecified) | |||||
Threshold = model.Mode.Threshold.Value; | |||||
if (model.Mode.Shortcut.IsSpecified) | |||||
Shortcuts = model.Mode.Shortcut.Value.Select(x => VoiceShortcut.Create(x)).ToImmutableArray(); | |||||
if (model.Mode.Delay.IsSpecified) | |||||
Delay = model.Mode.Delay.Value; | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -18,7 +18,7 @@ namespace Discord.Rpc | |||||
} | } | ||||
internal static VoiceShortcut Create(Model model) | internal static VoiceShortcut Create(Model model) | ||||
{ | { | ||||
return new VoiceShortcut(model.Type, model.Code, model.Name); | |||||
return new VoiceShortcut(model.Type.Value, model.Code.Value, model.Name.Value); | |||||
} | } | ||||
public override string ToString() => $"{Name}"; | public override string ToString() => $"{Name}"; | ||||