|
- using System;
- using System.Diagnostics;
- using Model = Discord.API.Rpc.ExtendedVoiceState;
-
- namespace Discord.Rpc
- {
- [DebuggerDisplay(@"{DebuggerDisplay,nq}")]
- public class RpcVoiceState : IVoiceState
- {
- [Flags]
- private enum Flags : byte
- {
- Normal = 0x00,
- Suppressed = 0x01,
- Muted = 0x02,
- Deafened = 0x04,
- SelfMuted = 0x08,
- SelfDeafened = 0x10,
- }
-
- private Flags _voiceStates;
-
- public RpcUser User { get; }
- public string Nickname { get; private set; }
- public int Volume { get; private set; }
- public bool IsMuted2 { get; private set; }
- public Pan Pan { get; private set; }
-
- public bool IsMuted => (_voiceStates & Flags.Muted) != 0;
- public bool IsDeafened => (_voiceStates & Flags.Deafened) != 0;
- public bool IsSuppressed => (_voiceStates & Flags.Suppressed) != 0;
- public bool IsSelfMuted => (_voiceStates & Flags.SelfMuted) != 0;
- public bool IsSelfDeafened => (_voiceStates & Flags.SelfDeafened) != 0;
-
- internal RpcVoiceState(DiscordRpcClient discord, ulong userId)
- {
- User = new RpcUser(discord, userId);
- }
- internal static RpcVoiceState Create(DiscordRpcClient discord, Model model)
- {
- var entity = new RpcVoiceState(discord, model.User.Id);
- entity.Update(model);
- return entity;
- }
- internal void Update(Model model)
- {
- if (model.VoiceState.IsSpecified)
- {
- Flags voiceStates = Flags.Normal;
- if (model.VoiceState.Value.Mute)
- voiceStates |= Flags.Muted;
- if (model.VoiceState.Value.Deaf)
- voiceStates |= Flags.Deafened;
- if (model.VoiceState.Value.SelfMute)
- voiceStates |= Flags.SelfMuted;
- if (model.VoiceState.Value.SelfDeaf)
- voiceStates |= Flags.SelfDeafened;
- if (model.VoiceState.Value.Suppress)
- voiceStates |= Flags.Suppressed;
- _voiceStates = voiceStates;
- }
- User.Update(model.User);
- if (model.Nickname.IsSpecified)
- Nickname = model.Nickname.Value;
- if (model.Volume.IsSpecified)
- Volume = model.Volume.Value;
- if (model.Mute.IsSpecified)
- IsMuted2 = model.Mute.Value;
- if (model.Pan.IsSpecified)
- Pan = Pan.Create(model.Pan.Value);
- }
-
- public override string ToString() => User.ToString();
- private string DebuggerDisplay => $"{User} ({_voiceStates})";
-
- string IVoiceState.VoiceSessionId { get { throw new NotSupportedException(); } }
- IVoiceChannel IVoiceState.VoiceChannel { get { throw new NotSupportedException(); } }
- }
- }
|