Added VoiceSettingsUpdated RPC event
This commit is contained in:
12
src/Discord.Net.Rpc/API/Rpc/VoiceDevice.cs
Normal file
12
src/Discord.Net.Rpc/API/Rpc/VoiceDevice.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Discord.API.Rpc
|
||||||
|
{
|
||||||
|
public class VoiceDevice
|
||||||
|
{
|
||||||
|
[JsonProperty("id")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
[JsonProperty("name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/Discord.Net.Rpc/API/Rpc/VoiceDeviceSettings.cs
Normal file
14
src/Discord.Net.Rpc/API/Rpc/VoiceDeviceSettings.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Discord.API.Rpc
|
||||||
|
{
|
||||||
|
public class VoiceDeviceSettings
|
||||||
|
{
|
||||||
|
[JsonProperty("device_id")]
|
||||||
|
public string DeviceId { get; set; }
|
||||||
|
[JsonProperty("volume")]
|
||||||
|
public float Volume { get; set; }
|
||||||
|
[JsonProperty("available_devices")]
|
||||||
|
public VoiceDevice[] AvailableDevices { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/Discord.Net.Rpc/API/Rpc/VoiceMode.cs
Normal file
18
src/Discord.Net.Rpc/API/Rpc/VoiceMode.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Discord.API.Rpc
|
||||||
|
{
|
||||||
|
public class VoiceMode
|
||||||
|
{
|
||||||
|
[JsonProperty("type")]
|
||||||
|
public string Type { get; set; }
|
||||||
|
[JsonProperty("auto_threshold")]
|
||||||
|
public bool AutoThreshold { get; set; }
|
||||||
|
[JsonProperty("threshold")]
|
||||||
|
public float Threshold { get; set; }
|
||||||
|
[JsonProperty("shortcut")]
|
||||||
|
public VoiceShortcut[] Shortcut { get; set; }
|
||||||
|
[JsonProperty("delay")]
|
||||||
|
public float Delay { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
26
src/Discord.Net.Rpc/API/Rpc/VoiceSettings.cs
Normal file
26
src/Discord.Net.Rpc/API/Rpc/VoiceSettings.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Discord.API.Rpc
|
||||||
|
{
|
||||||
|
public class VoiceSettings
|
||||||
|
{
|
||||||
|
[JsonProperty("input")]
|
||||||
|
public VoiceDeviceSettings Input { get; set; }
|
||||||
|
[JsonProperty("output")]
|
||||||
|
public VoiceDeviceSettings Output { get; set; }
|
||||||
|
[JsonProperty("mode")]
|
||||||
|
public VoiceMode Mode { get; set; }
|
||||||
|
[JsonProperty("automatic_gain_control")]
|
||||||
|
public bool AutomaticGainControl { get; set; }
|
||||||
|
[JsonProperty("echo_cancellation")]
|
||||||
|
public bool EchoCancellation { get; set; }
|
||||||
|
[JsonProperty("noise_suppression")]
|
||||||
|
public bool NoiseSuppression { get; set; }
|
||||||
|
[JsonProperty("qos")]
|
||||||
|
public bool QualityOfService { get; set; }
|
||||||
|
[JsonProperty("silence_warning")]
|
||||||
|
public bool SilenceWarning { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
15
src/Discord.Net.Rpc/API/Rpc/VoiceShortcut.cs
Normal file
15
src/Discord.Net.Rpc/API/Rpc/VoiceShortcut.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using Discord.Rpc;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Discord.API.Rpc
|
||||||
|
{
|
||||||
|
public class VoiceShortcut
|
||||||
|
{
|
||||||
|
[JsonProperty("type")]
|
||||||
|
public VoiceShortcutType Type { get; set; }
|
||||||
|
[JsonProperty("code")]
|
||||||
|
public int Code { get; set; }
|
||||||
|
[JsonProperty("name")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -82,6 +82,13 @@ namespace Discord.Rpc
|
|||||||
}
|
}
|
||||||
private readonly AsyncEvent<Func<ulong, Task>> _speakingStoppedEvent = new AsyncEvent<Func<ulong, Task>>();
|
private readonly AsyncEvent<Func<ulong, Task>> _speakingStoppedEvent = new AsyncEvent<Func<ulong, Task>>();
|
||||||
|
|
||||||
|
public event Func<VoiceSettings, Task> VoiceSettingsUpdated
|
||||||
|
{
|
||||||
|
add { _voiceSettingsUpdated.Add(value); }
|
||||||
|
remove { _voiceSettingsUpdated.Remove(value); }
|
||||||
|
}
|
||||||
|
private readonly AsyncEvent<Func<VoiceSettings, Task>> _voiceSettingsUpdated = new AsyncEvent<Func<VoiceSettings, Task>>();
|
||||||
|
|
||||||
//Messages
|
//Messages
|
||||||
public event Func<RpcMessage, Task> MessageReceived
|
public event Func<RpcMessage, Task> MessageReceived
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -271,6 +271,7 @@ namespace Discord.Rpc
|
|||||||
{
|
{
|
||||||
case RpcGlobalEvent.ChannelCreated: return "CHANNEL_CREATE";
|
case RpcGlobalEvent.ChannelCreated: return "CHANNEL_CREATE";
|
||||||
case RpcGlobalEvent.GuildCreated: return "GUILD_CREATE";
|
case RpcGlobalEvent.GuildCreated: return "GUILD_CREATE";
|
||||||
|
case RpcGlobalEvent.VoiceSettingsUpdated: return "VOICE_SETTINGS_UPDATE";
|
||||||
default:
|
default:
|
||||||
throw new InvalidOperationException($"Unknown RPC Global Event: {rpcEvent}");
|
throw new InvalidOperationException($"Unknown RPC Global Event: {rpcEvent}");
|
||||||
}
|
}
|
||||||
@@ -419,6 +420,15 @@ namespace Discord.Rpc
|
|||||||
await _speakingStoppedEvent.InvokeAsync(data.UserId).ConfigureAwait(false);
|
await _speakingStoppedEvent.InvokeAsync(data.UserId).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "VOICE_SETTINGS_UPDATE":
|
||||||
|
{
|
||||||
|
await _rpcLogger.DebugAsync("Received Dispatch (VOICE_SETTINGS_UPDATE)").ConfigureAwait(false);
|
||||||
|
var data = (payload.Value as JToken).ToObject<API.Rpc.VoiceSettings>(_serializer);
|
||||||
|
var settings = VoiceSettings.Create(data);
|
||||||
|
|
||||||
|
await _voiceSettingsUpdated.InvokeAsync(settings).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
//Messages
|
//Messages
|
||||||
case "MESSAGE_CREATE":
|
case "MESSAGE_CREATE":
|
||||||
|
|||||||
20
src/Discord.Net.Rpc/Entities/VoiceDevice.cs
Normal file
20
src/Discord.Net.Rpc/Entities/VoiceDevice.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Model = Discord.API.Rpc.VoiceDevice;
|
||||||
|
|
||||||
|
namespace Discord.Rpc
|
||||||
|
{
|
||||||
|
public struct VoiceDevice
|
||||||
|
{
|
||||||
|
public string Id { get; }
|
||||||
|
public string Name { get; }
|
||||||
|
|
||||||
|
internal VoiceDevice(string id, string name)
|
||||||
|
{
|
||||||
|
Id = id;
|
||||||
|
Name = name;
|
||||||
|
}
|
||||||
|
internal static VoiceDevice Create(Model model)
|
||||||
|
{
|
||||||
|
return new VoiceDevice(model.Id, model.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
60
src/Discord.Net.Rpc/Entities/VoiceSettings.cs
Normal file
60
src/Discord.Net.Rpc/Entities/VoiceSettings.cs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Immutable;
|
||||||
|
using System.Linq;
|
||||||
|
using Model = Discord.API.Rpc.VoiceSettings;
|
||||||
|
|
||||||
|
namespace Discord.Rpc
|
||||||
|
{
|
||||||
|
public class VoiceSettings
|
||||||
|
{
|
||||||
|
public string InputDeviceId { get; private set; }
|
||||||
|
public float InputVolume { get; private set; }
|
||||||
|
public IReadOnlyCollection<VoiceDevice> AvailableInputDevices { get; private set; }
|
||||||
|
|
||||||
|
public string OutputDeviceId { get; private set; }
|
||||||
|
public float OutputVolume { get; private set; }
|
||||||
|
public IReadOnlyCollection<VoiceDevice> AvailableOutputDevices { get; private set; }
|
||||||
|
|
||||||
|
public bool AutomaticGainControl { get; private set; }
|
||||||
|
public bool EchoCancellation { get; private set; }
|
||||||
|
public bool NoiseSuppression { get; private set; }
|
||||||
|
public bool QualityOfService { get; private set; }
|
||||||
|
public bool SilenceWarning { get; private set; }
|
||||||
|
|
||||||
|
public string ActivationMode { get; private set; }
|
||||||
|
public bool AutoThreshold { get; private set; }
|
||||||
|
public float Threshold { get; private set; }
|
||||||
|
public IReadOnlyCollection<VoiceShortcut> Shortcuts { get; private set; }
|
||||||
|
public float Delay { get; private set; }
|
||||||
|
|
||||||
|
internal VoiceSettings() { }
|
||||||
|
internal static VoiceSettings Create(Model model)
|
||||||
|
{
|
||||||
|
var entity = new VoiceSettings();
|
||||||
|
entity.Update(model);
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
22
src/Discord.Net.Rpc/Entities/VoiceShortcut.cs
Normal file
22
src/Discord.Net.Rpc/Entities/VoiceShortcut.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using Model = Discord.API.Rpc.VoiceShortcut;
|
||||||
|
|
||||||
|
namespace Discord.Rpc
|
||||||
|
{
|
||||||
|
public struct VoiceShortcut
|
||||||
|
{
|
||||||
|
public VoiceShortcutType Type { get; }
|
||||||
|
public int Code { get; }
|
||||||
|
public string Name { get; }
|
||||||
|
|
||||||
|
internal VoiceShortcut(VoiceShortcutType type, int code, string name)
|
||||||
|
{
|
||||||
|
Type = type;
|
||||||
|
Code = code;
|
||||||
|
Name = name;
|
||||||
|
}
|
||||||
|
internal static VoiceShortcut Create(Model model)
|
||||||
|
{
|
||||||
|
return new VoiceShortcut(model.Type, model.Code, model.Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
src/Discord.Net.Rpc/Entities/VoiceShortcutType.cs
Normal file
10
src/Discord.Net.Rpc/Entities/VoiceShortcutType.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace Discord.Rpc
|
||||||
|
{
|
||||||
|
public enum VoiceShortcutType
|
||||||
|
{
|
||||||
|
KeyboardKey = 0,
|
||||||
|
MouseButton = 1,
|
||||||
|
KeyboardModifierKey = 2,
|
||||||
|
GamepadButton = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
public enum RpcGlobalEvent
|
public enum RpcGlobalEvent
|
||||||
{
|
{
|
||||||
ChannelCreated,
|
ChannelCreated,
|
||||||
GuildCreated
|
GuildCreated,
|
||||||
|
VoiceSettingsUpdated
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user