Added better voice state parsing
This commit is contained in:
@@ -223,11 +223,11 @@ namespace Discord
|
|||||||
if (PresenceUpdated != null)
|
if (PresenceUpdated != null)
|
||||||
PresenceUpdated(this, new UserEventArgs(user));
|
PresenceUpdated(this, new UserEventArgs(user));
|
||||||
}
|
}
|
||||||
public event EventHandler<UserEventArgs> VoiceStateUpdated;
|
public event EventHandler<MemberEventArgs> VoiceStateUpdated;
|
||||||
private void RaiseVoiceStateUpdated(User user)
|
private void RaiseVoiceStateUpdated(Membership member)
|
||||||
{
|
{
|
||||||
if (VoiceStateUpdated != null)
|
if (VoiceStateUpdated != null)
|
||||||
VoiceStateUpdated(this, new UserEventArgs(user));
|
VoiceStateUpdated(this, new MemberEventArgs(member));
|
||||||
}
|
}
|
||||||
public event EventHandler<UserTypingEventArgs> UserTyping;
|
public event EventHandler<UserTypingEventArgs> UserTyping;
|
||||||
private void RaiseUserTyping(User user, Channel channel)
|
private void RaiseUserTyping(User user, Channel channel)
|
||||||
|
|||||||
@@ -113,7 +113,9 @@ namespace Discord
|
|||||||
foreach (var membership in extendedModel.Members)
|
foreach (var membership in extendedModel.Members)
|
||||||
{
|
{
|
||||||
_users.Update(membership.User.Id, membership.User);
|
_users.Update(membership.User.Id, membership.User);
|
||||||
server.AddMember(new Membership(server.Id, membership.User.Id, membership.JoinedAt, this) { RoleIds = membership.Roles, IsMuted = membership.IsMuted, IsDeafened = membership.IsDeaf });
|
var newMember = new Membership(server.Id, membership.User.Id, membership.JoinedAt, this);
|
||||||
|
newMember.Update(membership);
|
||||||
|
server.AddMember(newMember);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -320,7 +322,7 @@ namespace Discord
|
|||||||
var data = e.Event.ToObject<WebSocketEvents.GuildMemberUpdate>();
|
var data = e.Event.ToObject<WebSocketEvents.GuildMemberUpdate>();
|
||||||
var user = _users.Update(data.User.Id, data.User);
|
var user = _users.Update(data.User.Id, data.User);
|
||||||
var server = _servers[data.GuildId];
|
var server = _servers[data.GuildId];
|
||||||
var membership = server.GetMembership(data.User.Id);
|
var membership = server.GetMember(data.User.Id);
|
||||||
if (membership != null)
|
if (membership != null)
|
||||||
membership.RoleIds = data.Roles;
|
membership.RoleIds = data.Roles;
|
||||||
RaiseMemberUpdated(membership, server);
|
RaiseMemberUpdated(membership, server);
|
||||||
@@ -426,8 +428,12 @@ namespace Discord
|
|||||||
case "VOICE_STATE_UPDATE":
|
case "VOICE_STATE_UPDATE":
|
||||||
{
|
{
|
||||||
var data = e.Event.ToObject<WebSocketEvents.VoiceStateUpdate>();
|
var data = e.Event.ToObject<WebSocketEvents.VoiceStateUpdate>();
|
||||||
var user = _users[data.UserId]; //TODO: Don't ignore this
|
var member = GetMember(data.GuildId, data.UserId);
|
||||||
RaiseVoiceStateUpdated(user);
|
if (member != null)
|
||||||
|
{
|
||||||
|
member.Update(data);
|
||||||
|
RaiseVoiceStateUpdated(member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "TYPING_START":
|
case "TYPING_START":
|
||||||
@@ -504,13 +510,31 @@ namespace Discord
|
|||||||
string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
|
string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary> Returns all users in with the specified server and name, along with their server-specific data. </summary>
|
|
||||||
/// <remarks> Name formats supported: Name and @Name. Search is case-insensitive. </remarks>
|
/// <summary> Returns the user with the specified id, along with their server-specific data, or null if none was found. </summary>
|
||||||
public IEnumerable<Membership> FindUsers(string serverId, string name)
|
public Membership GetMember(string serverId, User user)
|
||||||
=> FindUsers(GetServer(serverId), name);
|
=> GetMember(_servers[serverId], user.Id);
|
||||||
|
/// <summary> Returns the user with the specified id, along with their server-specific data, or null if none was found. </summary>
|
||||||
|
public Membership GetMember(string serverId, string userId)
|
||||||
|
=> GetMember(_servers[serverId], userId);
|
||||||
|
/// <summary> Returns the user with the specified id, along with their server-specific data, or null if none was found. </summary>
|
||||||
|
public Membership GetMember(Server server, User user)
|
||||||
|
=> GetMember(server, user.Id);
|
||||||
|
/// <summary> Returns the user with the specified id, along with their server-specific data, or null if none was found. </summary>
|
||||||
|
public Membership GetMember(Server server, string userId)
|
||||||
|
{
|
||||||
|
if (server == null)
|
||||||
|
return null;
|
||||||
|
return server.GetMember(userId);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary> Returns all users in with the specified server and name, along with their server-specific data. </summary>
|
/// <summary> Returns all users in with the specified server and name, along with their server-specific data. </summary>
|
||||||
/// <remarks> Name formats supported: Name and @Name. Search is case-insensitive.</remarks>
|
/// <remarks> Name formats supported: Name and @Name. Search is case-insensitive.</remarks>
|
||||||
public IEnumerable<Membership> FindUsers(Server server, string name)
|
public IEnumerable<Membership> FindMembers(string serverId, string name)
|
||||||
|
=> FindMembers(GetServer(serverId), name);
|
||||||
|
/// <summary> Returns all users in with the specified server and name, along with their server-specific data. </summary>
|
||||||
|
/// <remarks> Name formats supported: Name and @Name. Search is case-insensitive.</remarks>
|
||||||
|
public IEnumerable<Membership> FindMembers(Server server, string name)
|
||||||
{
|
{
|
||||||
if (server == null)
|
if (server == null)
|
||||||
return new Membership[0];
|
return new Membership[0];
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using Discord.API.Models;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
@@ -8,17 +9,25 @@ namespace Discord
|
|||||||
{
|
{
|
||||||
private readonly DiscordClient _client;
|
private readonly DiscordClient _client;
|
||||||
|
|
||||||
public DateTime JoinedAt;
|
public DateTime JoinedAt { get; internal set; }
|
||||||
|
|
||||||
public bool IsMuted { get; internal set; }
|
public bool IsMuted { get; internal set; }
|
||||||
public bool IsDeafened { get; internal set; }
|
public bool IsDeafened { get; internal set; }
|
||||||
|
public bool IsSelfMuted { get; internal set; }
|
||||||
|
public bool IsSelfDeafened { get; internal set; }
|
||||||
|
public bool IsSuppressed { get; internal set; }
|
||||||
|
|
||||||
|
public string SessionId { get; internal set; }
|
||||||
|
|
||||||
public string ServerId { get; }
|
public string ServerId { get; }
|
||||||
public Server Server => _client.GetServer(ServerId);
|
public Server Server => _client.GetServer(ServerId);
|
||||||
|
|
||||||
public string UserId { get; }
|
public string UserId { get; }
|
||||||
public User User => _client.GetUser(UserId);
|
public User User => _client.GetUser(UserId);
|
||||||
|
|
||||||
|
public string VoiceChannelId { get; internal set; }
|
||||||
|
public Channel VoiceChannel => _client.GetChannel(VoiceChannelId);
|
||||||
|
|
||||||
public string[] RoleIds { get; internal set; }
|
public string[] RoleIds { get; internal set; }
|
||||||
public IEnumerable<Role> Roles => RoleIds.Select(x => _client.GetRole(x));
|
public IEnumerable<Role> Roles => RoleIds.Select(x => _client.GetRole(x));
|
||||||
|
|
||||||
@@ -29,5 +38,22 @@ namespace Discord
|
|||||||
JoinedAt = joinedAt;
|
JoinedAt = joinedAt;
|
||||||
_client = client;
|
_client = client;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void Update(ExtendedServerInfo.Membership data)
|
||||||
|
{
|
||||||
|
IsDeafened = data.IsDeaf;
|
||||||
|
IsMuted = data.IsMuted;
|
||||||
|
RoleIds = data.Roles;
|
||||||
|
}
|
||||||
|
internal void Update(WebSocketEvents.VoiceStateUpdate data)
|
||||||
|
{
|
||||||
|
VoiceChannelId = data.ChannelId;
|
||||||
|
IsDeafened = data.IsDeafened;
|
||||||
|
IsMuted = data.IsMuted;
|
||||||
|
IsSelfDeafened = data.IsSelfDeafened;
|
||||||
|
IsSelfMuted = data.IsSelfMuted;
|
||||||
|
IsSuppressed = data.IsSuppressed;
|
||||||
|
SessionId = data.SessionId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ namespace Discord
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
public Membership GetMembership(User user)
|
public Membership GetMembership(User user)
|
||||||
=> GetMembership(user.Id);
|
=> GetMember(user.Id);
|
||||||
public Membership GetMembership(string userId)
|
public Membership GetMember(string userId)
|
||||||
{
|
{
|
||||||
Membership result = null;
|
Membership result = null;
|
||||||
_members.TryGetValue(userId, out result);
|
_members.TryGetValue(userId, out result);
|
||||||
|
|||||||
Reference in New Issue
Block a user