@@ -319,14 +319,12 @@ namespace Discord.API | |||
public async Task<SubscriptionResponse> SendGlobalSubscribeAsync(string evt, RequestOptions options = null) | |||
{ | |||
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) | |||
{ | |||
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) | |||
@@ -367,6 +365,17 @@ namespace Discord.API | |||
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) | |||
{ | |||
RpcRequest requestTracker; | |||
@@ -5,10 +5,10 @@ namespace Discord.API.Rpc | |||
public class VoiceDeviceSettings | |||
{ | |||
[JsonProperty("device_id")] | |||
public string DeviceId { get; set; } | |||
public Optional<string> DeviceId { get; set; } | |||
[JsonProperty("volume")] | |||
public float Volume { get; set; } | |||
public Optional<float> Volume { get; set; } | |||
[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 | |||
{ | |||
[JsonProperty("type")] | |||
public string Type { get; set; } | |||
public Optional<string> Type { get; set; } | |||
[JsonProperty("auto_threshold")] | |||
public bool AutoThreshold { get; set; } | |||
public Optional<bool> AutoThreshold { get; set; } | |||
[JsonProperty("threshold")] | |||
public float Threshold { get; set; } | |||
public Optional<float> Threshold { get; set; } | |||
[JsonProperty("shortcut")] | |||
public VoiceShortcut[] Shortcut { get; set; } | |||
public Optional<VoiceShortcut[]> Shortcut { get; set; } | |||
[JsonProperty("delay")] | |||
public float Delay { get; set; } | |||
public Optional<float> Delay { get; set; } | |||
} | |||
} |
@@ -13,14 +13,14 @@ namespace Discord.API.Rpc | |||
[JsonProperty("mode")] | |||
public VoiceMode Mode { get; set; } | |||
[JsonProperty("automatic_gain_control")] | |||
public bool AutomaticGainControl { get; set; } | |||
public Optional<bool> AutomaticGainControl { get; set; } | |||
[JsonProperty("echo_cancellation")] | |||
public bool EchoCancellation { get; set; } | |||
public Optional<bool> EchoCancellation { get; set; } | |||
[JsonProperty("noise_suppression")] | |||
public bool NoiseSuppression { get; set; } | |||
public Optional<bool> NoiseSuppression { get; set; } | |||
[JsonProperty("qos")] | |||
public bool QualityOfService { get; set; } | |||
public Optional<bool> QualityOfService { get; set; } | |||
[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 | |||
{ | |||
[JsonProperty("type")] | |||
public VoiceShortcutType Type { get; set; } | |||
public Optional<VoiceShortcutType> Type { get; set; } | |||
[JsonProperty("code")] | |||
public int Code { get; set; } | |||
public Optional<int> Code { get; set; } | |||
[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); | |||
} | |||
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) | |||
{ | |||
switch (rpcEvent) | |||
@@ -36,25 +36,41 @@ namespace Discord.Rpc | |||
} | |||
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) | |||
{ | |||
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}"; | |||