@@ -7,13 +7,13 @@ namespace Discord | |||
{ | |||
public partial class DiscordClient | |||
{ | |||
public Task SetChannelUserPermissions(Channel channel, User member, ChannelPermissions allow = null, ChannelPermissions deny = null) | |||
public Task SetChannelUserPermissions(Channel channel, User user, ChannelPermissions allow = null, ChannelPermissions deny = null) | |||
{ | |||
if (channel == null) throw new ArgumentNullException(nameof(channel)); | |||
if (member == null) throw new ArgumentNullException(nameof(member)); | |||
if (user == null) throw new ArgumentNullException(nameof(user)); | |||
CheckReady(); | |||
return SetChannelPermissions(channel, member?.Id, PermissionTarget.User, allow, deny); | |||
return SetChannelPermissions(channel, user?.Id, PermissionTarget.User, allow, deny); | |||
} | |||
public Task SetChannelUserPermissions(Channel channel, User user, DualChannelPermissions permissions = null) | |||
{ | |||
@@ -51,8 +51,8 @@ namespace Discord | |||
{ | |||
public bool IsSpeaking { get; } | |||
internal UserIsSpeakingEventArgs(User member, Channel channel, bool isSpeaking) | |||
: base(member, channel) | |||
internal UserIsSpeakingEventArgs(User user, Channel channel, bool isSpeaking) | |||
: base(user, channel) | |||
{ | |||
IsSpeaking = isSpeaking; | |||
} | |||
@@ -119,7 +119,7 @@ namespace Discord | |||
private readonly Users _users; | |||
/// <summary> Returns the user with the specified id, along with their server-specific data, or null if none was found. </summary> | |||
public User GetMember(Server server, string userId) | |||
public User GetUser(Server server, string userId) | |||
{ | |||
if (server == null) throw new ArgumentNullException(nameof(server)); | |||
if (userId == null) throw new ArgumentNullException(nameof(userId)); | |||
@@ -136,13 +136,13 @@ namespace Discord | |||
if (discriminator == null) throw new ArgumentNullException(nameof(discriminator)); | |||
CheckReady(); | |||
User user = FindMembers(server, username, discriminator, true).FirstOrDefault(); | |||
User user = FindUsers(server, username, discriminator, true).FirstOrDefault(); | |||
return _users[user?.Id, server.Id]; | |||
} | |||
/// <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<User> FindMembers(Server server, string name, string discriminator = null, bool exactMatch = false) | |||
public IEnumerable<User> FindUsers(Server server, string name, string discriminator = null, bool exactMatch = false) | |||
{ | |||
if (server == null) throw new ArgumentNullException(nameof(server)); | |||
if (name == null) throw new ArgumentNullException(nameof(name)); | |||
@@ -165,12 +165,12 @@ namespace Discord | |||
return query; | |||
} | |||
public Task EditMember(User member, bool? mute = null, bool? deaf = null, IEnumerable<Role> roles = null) | |||
public Task EditUser(User user, bool? mute = null, bool? deaf = null, IEnumerable<Role> roles = null) | |||
{ | |||
if (member == null) throw new ArgumentNullException(nameof(member)); | |||
if (user == null) throw new ArgumentNullException(nameof(user)); | |||
CheckReady(); | |||
return _api.EditUser(member.Server?.Id, member.Id, mute: mute, deaf: deaf, roles: roles.Select(x => x.Id)); | |||
return _api.EditUser(user.Server?.Id, user.Id, mute: mute, deaf: deaf, roles: roles.Select(x => x.Id)); | |||
} | |||
public Task<EditUserResponse> EditProfile(string currentPassword = "", | |||
@@ -177,15 +177,15 @@ namespace Discord | |||
{ | |||
if (_voiceSocket.State == WebSocketState.Connected) | |||
{ | |||
var member = _users[e.UserId, socket.CurrentServerId]; | |||
var user = _users[e.UserId, socket.CurrentServerId]; | |||
bool value = e.IsSpeaking; | |||
if (member.IsSpeaking != value) | |||
if (user.IsSpeaking != value) | |||
{ | |||
member.IsSpeaking = value; | |||
user.IsSpeaking = value; | |||
var channel = _channels[_voiceSocket.CurrentChannelId]; | |||
RaiseUserIsSpeaking(member, channel, value); | |||
RaiseUserIsSpeaking(user, channel, value); | |||
if (Config.TrackActivity) | |||
member.UpdateActivity(); | |||
user.UpdateActivity(); | |||
} | |||
} | |||
}; | |||
@@ -359,9 +359,9 @@ namespace Discord | |||
Channel channel; | |||
if (data.IsPrivate) | |||
{ | |||
var member = _users.GetOrAdd(data.Recipient.Id, null); | |||
member.Update(data.Recipient); | |||
channel = _channels.GetOrAdd(data.Id, null, member.Id); | |||
var user = _users.GetOrAdd(data.Recipient.Id, null); | |||
user.Update(data.Recipient); | |||
channel = _channels.GetOrAdd(data.Id, null, user.Id); | |||
} | |||
else | |||
channel = _channels.GetOrAdd(data.Id, data.GuildId, null); | |||
@@ -393,30 +393,30 @@ namespace Discord | |||
case "GUILD_MEMBER_ADD": | |||
{ | |||
var data = e.Payload.ToObject<MemberAddEvent>(_serializer); | |||
var member = _users.GetOrAdd(data.User.Id, data.GuildId); | |||
member.Update(data); | |||
var user = _users.GetOrAdd(data.User.Id, data.GuildId); | |||
user.Update(data); | |||
if (Config.TrackActivity) | |||
member.UpdateActivity(); | |||
RaiseUserAdded(member); | |||
user.UpdateActivity(); | |||
RaiseUserAdded(user); | |||
} | |||
break; | |||
case "GUILD_MEMBER_UPDATE": | |||
{ | |||
var data = e.Payload.ToObject<MemberUpdateEvent>(_serializer); | |||
var member = _users[data.User.Id, data.GuildId]; | |||
if (member != null) | |||
var user = _users[data.User.Id, data.GuildId]; | |||
if (user != null) | |||
{ | |||
member.Update(data); | |||
RaiseMemberUpdated(member); | |||
user.Update(data); | |||
RaiseMemberUpdated(user); | |||
} | |||
} | |||
break; | |||
case "GUILD_MEMBER_REMOVE": | |||
{ | |||
var data = e.Payload.ToObject<MemberRemoveEvent>(_serializer); | |||
var member = _users.TryRemove(data.UserId, data.GuildId); | |||
if (member != null) | |||
RaiseUserRemoved(member); | |||
var user = _users.TryRemove(data.UserId, data.GuildId); | |||
if (user != null) | |||
RaiseUserRemoved(user); | |||
} | |||
break; | |||
@@ -494,9 +494,9 @@ namespace Discord | |||
var channel = msg.Channel; | |||
if (channel?.IsPrivate == false) | |||
{ | |||
var member = msg.User; | |||
if (member != null) | |||
member.UpdateActivity(data.Timestamp); | |||
var user = msg.User; | |||
if (user != null) | |||
user.UpdateActivity(data.Timestamp); | |||
} | |||
} | |||
@@ -538,11 +538,11 @@ namespace Discord | |||
case "PRESENCE_UPDATE": | |||
{ | |||
var data = e.Payload.ToObject<PresenceUpdateEvent>(_serializer); | |||
var member = _users.GetOrAdd(data.User.Id, data.GuildId); | |||
if (member != null) | |||
var user = _users.GetOrAdd(data.User.Id, data.GuildId); | |||
if (user != null) | |||
{ | |||
member.Update(data); | |||
RaiseUserPresenceUpdated(member); | |||
user.Update(data); | |||
RaiseUserPresenceUpdated(user); | |||
} | |||
} | |||
break; | |||
@@ -553,19 +553,18 @@ namespace Discord | |||
if (channel != null) | |||
{ | |||
var user = _users[data.UserId, channel.Server?.Id]; | |||
if (user != null) | |||
{ | |||
if (channel != null) | |||
RaiseUserIsTyping(user, channel); | |||
} | |||
if (Config.TrackActivity) | |||
{ | |||
if (!channel.IsPrivate) | |||
{ | |||
var member = _users[data.UserId, channel.Server.Id]; | |||
if (member != null) | |||
member.UpdateActivity(); | |||
if (user != null) | |||
user.UpdateActivity(); | |||
} | |||
} | |||
} | |||
@@ -576,17 +575,17 @@ namespace Discord | |||
case "VOICE_STATE_UPDATE": | |||
{ | |||
var data = e.Payload.ToObject<MemberVoiceStateUpdateEvent>(_serializer); | |||
var member = _users[data.UserId, data.GuildId]; | |||
if (member != null) | |||
var user = _users[data.UserId, data.GuildId]; | |||
if (user != null) | |||
{ | |||
var voiceChannel = member.VoiceChannel; | |||
if (voiceChannel != null && data.ChannelId != voiceChannel.Id && member.IsSpeaking) | |||
var voiceChannel = user.VoiceChannel; | |||
if (voiceChannel != null && data.ChannelId != voiceChannel.Id && user.IsSpeaking) | |||
{ | |||
member.IsSpeaking = false; | |||
RaiseUserIsSpeaking(member, _channels[voiceChannel.Id], false); | |||
user.IsSpeaking = false; | |||
RaiseUserIsSpeaking(user, _channels[voiceChannel.Id], false); | |||
} | |||
member.Update(data); | |||
RaiseUserVoiceStateUpdated(member); | |||
user.Update(data); | |||
RaiseUserVoiceStateUpdated(user); | |||
} | |||
} | |||
break; | |||
@@ -100,10 +100,10 @@ namespace Discord | |||
globalChannels.TryRemove(channel.Key); | |||
channels.Clear(); | |||
var globalMembers = _client.Users; | |||
var globalUsers = _client.Users; | |||
var members = _members; | |||
foreach (var user in members) | |||
globalMembers.TryRemove(user.Key, Id); | |||
foreach (var member in members) | |||
globalUsers.TryRemove(member.Key, Id); | |||
members.Clear(); | |||
var globalRoles = _client.Roles; | |||
@@ -162,25 +162,24 @@ namespace Discord | |||
var channel = channels.GetOrAdd(subModel.Id, Id); | |||
channel.Update(subModel); | |||
} | |||
var usersCache = _client.GlobalUsers; | |||
var membersCache = _client.Users; | |||
var usersCache = _client.Users; | |||
foreach (var subModel in model.Members) | |||
{ | |||
var member = membersCache.GetOrAdd(subModel.User.Id, Id); | |||
member.Update(subModel); | |||
var user = usersCache.GetOrAdd(subModel.User.Id, Id); | |||
user.Update(subModel); | |||
} | |||
foreach (var subModel in model.VoiceStates) | |||
{ | |||
var member = membersCache[subModel.UserId, Id]; | |||
if (member != null) | |||
member.Update(subModel); | |||
var user = usersCache[subModel.UserId, Id]; | |||
if (user != null) | |||
user.Update(subModel); | |||
} | |||
foreach (var subModel in model.Presences) | |||
{ | |||
var member = membersCache[subModel.User.Id, Id]; | |||
if (member != null) | |||
member.Update(subModel); | |||
var user = usersCache[subModel.User.Id, Id]; | |||
if (user != null) | |||
user.Update(subModel); | |||
} | |||
} | |||
@@ -216,31 +215,31 @@ namespace Discord | |||
internal void AddInvite(Invite invite) => _invites.TryAdd(invite.Id, invite); | |||
internal void RemoveInvite(Invite invite) => _invites.TryRemove(invite.Id, out invite); | |||
internal void AddMember(User member) | |||
internal void AddMember(User user) | |||
{ | |||
if (_members.TryAdd(member.Id, member)) | |||
if (_members.TryAdd(user.Id, user)) | |||
{ | |||
if (member.Id == _ownerId) | |||
Owner = member; | |||
if (user.Id == _ownerId) | |||
Owner = user; | |||
foreach (var channel in Channels) | |||
{ | |||
member.AddChannel(channel); | |||
channel.InvalidatePermissionsCache(member); | |||
user.AddChannel(channel); | |||
channel.InvalidatePermissionsCache(user); | |||
} | |||
} | |||
} | |||
internal void RemoveMember(User member) | |||
internal void RemoveMember(User user) | |||
{ | |||
if (_members.TryRemove(member.Id, out member)) | |||
if (_members.TryRemove(user.Id, out user)) | |||
{ | |||
if (member.Id == _ownerId) | |||
if (user.Id == _ownerId) | |||
Owner = null; | |||
foreach (var channel in Channels) | |||
{ | |||
member.RemoveChannel(channel); | |||
channel.InvalidatePermissionsCache(member); | |||
user.RemoveChannel(channel); | |||
channel.InvalidatePermissionsCache(user); | |||
} | |||
} | |||
} | |||
@@ -299,10 +299,10 @@ namespace Discord | |||
newPermissions &= ~denyRole.Deny.RawValue; | |||
foreach (var allowRole in channelOverwrites.Where(x => x.TargetType == PermissionTarget.Role && x.Allow.RawValue != 0 && roles.Any(y => y.Id == x.TargetId))) | |||
newPermissions |= allowRole.Allow.RawValue; | |||
foreach (var denyMembers in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Deny.RawValue != 0)) | |||
newPermissions &= ~denyMembers.Deny.RawValue; | |||
foreach (var allowMembers in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Allow.RawValue != 0)) | |||
newPermissions |= allowMembers.Allow.RawValue; | |||
foreach (var denyUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Deny.RawValue != 0)) | |||
newPermissions &= ~denyUser.Deny.RawValue; | |||
foreach (var allowUser in channelOverwrites.Where(x => x.TargetType == PermissionTarget.User && x.TargetId == Id && x.Allow.RawValue != 0)) | |||
newPermissions |= allowUser.Allow.RawValue; | |||
} | |||
if (BitHelper.GetBit(newPermissions, (int)PermissionsBits.ManageRolesOrPermissions)) | |||