Added better voice state parsing
This commit is contained in:
@@ -223,11 +223,11 @@ namespace Discord
|
||||
if (PresenceUpdated != null)
|
||||
PresenceUpdated(this, new UserEventArgs(user));
|
||||
}
|
||||
public event EventHandler<UserEventArgs> VoiceStateUpdated;
|
||||
private void RaiseVoiceStateUpdated(User user)
|
||||
public event EventHandler<MemberEventArgs> VoiceStateUpdated;
|
||||
private void RaiseVoiceStateUpdated(Membership member)
|
||||
{
|
||||
if (VoiceStateUpdated != null)
|
||||
VoiceStateUpdated(this, new UserEventArgs(user));
|
||||
VoiceStateUpdated(this, new MemberEventArgs(member));
|
||||
}
|
||||
public event EventHandler<UserTypingEventArgs> UserTyping;
|
||||
private void RaiseUserTyping(User user, Channel channel)
|
||||
|
||||
@@ -113,7 +113,9 @@ namespace Discord
|
||||
foreach (var membership in extendedModel.Members)
|
||||
{
|
||||
_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 user = _users.Update(data.User.Id, data.User);
|
||||
var server = _servers[data.GuildId];
|
||||
var membership = server.GetMembership(data.User.Id);
|
||||
var membership = server.GetMember(data.User.Id);
|
||||
if (membership != null)
|
||||
membership.RoleIds = data.Roles;
|
||||
RaiseMemberUpdated(membership, server);
|
||||
@@ -426,8 +428,12 @@ namespace Discord
|
||||
case "VOICE_STATE_UPDATE":
|
||||
{
|
||||
var data = e.Event.ToObject<WebSocketEvents.VoiceStateUpdate>();
|
||||
var user = _users[data.UserId]; //TODO: Don't ignore this
|
||||
RaiseVoiceStateUpdated(user);
|
||||
var member = GetMember(data.GuildId, data.UserId);
|
||||
if (member != null)
|
||||
{
|
||||
member.Update(data);
|
||||
RaiseVoiceStateUpdated(member);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "TYPING_START":
|
||||
@@ -504,13 +510,31 @@ namespace Discord
|
||||
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>
|
||||
public IEnumerable<Membership> FindUsers(string serverId, string name)
|
||||
=> FindUsers(GetServer(serverId), name);
|
||||
|
||||
/// <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, User user)
|
||||
=> 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>
|
||||
/// <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)
|
||||
return new Membership[0];
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Discord.API.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
@@ -8,17 +9,25 @@ namespace Discord
|
||||
{
|
||||
private readonly DiscordClient _client;
|
||||
|
||||
public DateTime JoinedAt;
|
||||
public DateTime JoinedAt { get; internal set; }
|
||||
|
||||
public bool IsMuted { 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 Server Server => _client.GetServer(ServerId);
|
||||
|
||||
public string UserId { get; }
|
||||
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 IEnumerable<Role> Roles => RoleIds.Select(x => _client.GetRole(x));
|
||||
|
||||
@@ -29,5 +38,22 @@ namespace Discord
|
||||
JoinedAt = joinedAt;
|
||||
_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;
|
||||
}
|
||||
public Membership GetMembership(User user)
|
||||
=> GetMembership(user.Id);
|
||||
public Membership GetMembership(string userId)
|
||||
=> GetMember(user.Id);
|
||||
public Membership GetMember(string userId)
|
||||
{
|
||||
Membership result = null;
|
||||
_members.TryGetValue(userId, out result);
|
||||
|
||||
Reference in New Issue
Block a user