Browse Source

Added better voice state parsing

tags/docs-0.9
Brandon Smith 9 years ago
parent
commit
6b547449b8
4 changed files with 66 additions and 16 deletions
  1. +3
    -3
      src/Discord.Net/DiscordClient.Events.cs
  2. +32
    -8
      src/Discord.Net/DiscordClient.cs
  3. +29
    -3
      src/Discord.Net/Membership.cs
  4. +2
    -2
      src/Discord.Net/Server.cs

+ 3
- 3
src/Discord.Net/DiscordClient.Events.cs View File

@@ -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;
private void RaiseVoiceStateUpdated(User user)
public event EventHandler<MemberEventArgs> VoiceStateUpdated;
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)


+ 32
- 8
src/Discord.Net/DiscordClient.cs View File

@@ -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
RaiseVoiceStateUpdated(user);
var member = GetMember(data.GuildId, data.UserId);
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 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> /// <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);
/// <remarks> Name formats supported: Name and @Name. Search is case-insensitive.</remarks>
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> /// <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(Server server, string name)
{ {
if (server == null) if (server == null)
return new Membership[0]; return new Membership[0];


+ 29
- 3
src/Discord.Net/Membership.cs View File

@@ -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;
}
} }
} }

+ 2
- 2
src/Discord.Net/Server.cs View File

@@ -80,8 +80,8 @@ namespace Discord
return result; return result;
} }
public Membership GetMembership(User user) public Membership GetMembership(User user)
=> GetMembership(user.Id);
public Membership GetMembership(string userId)
=> GetMember(user.Id);
public Membership GetMember(string userId)
{ {
Membership result = null; Membership result = null;
_members.TryGetValue(userId, out result); _members.TryGetValue(userId, out result);


Loading…
Cancel
Save