diff --git a/src/Discord.Net.Commands/CommandsPlugin.Events.cs b/src/Discord.Net.Commands/CommandsPlugin.Events.cs
index 41201b386..5901aa2a7 100644
--- a/src/Discord.Net.Commands/CommandsPlugin.Events.cs
+++ b/src/Discord.Net.Commands/CommandsPlugin.Events.cs
@@ -12,7 +12,7 @@ namespace Discord.Commands
public int? Permissions { get; }
public string[] Args { get; }
- public User Member => Message.User;
+ public User User => Message.User;
public Channel Channel => Message.Channel;
public Server Server => Message.Channel.Server;
diff --git a/src/Discord.Net.Net45/Discord.Net.csproj b/src/Discord.Net.Net45/Discord.Net.csproj
index ef00dba85..0b3717e57 100644
--- a/src/Discord.Net.Net45/Discord.Net.csproj
+++ b/src/Discord.Net.Net45/Discord.Net.csproj
@@ -169,9 +169,6 @@
DiscordClient.Invites.cs
-
- DiscordClient.Members.cs
-
DiscordClient.Messages.cs
diff --git a/src/Discord.Net/DiscordAPIClient.cs b/src/Discord.Net/DiscordAPIClient.cs
index 29bd540b0..8b3590a27 100644
--- a/src/Discord.Net/DiscordAPIClient.cs
+++ b/src/Discord.Net/DiscordAPIClient.cs
@@ -137,7 +137,7 @@ namespace Discord
}
//Members
- public Task EditMember(string serverId, string userId, bool? mute = null, bool? deaf = null, IEnumerable roles = null)
+ public Task EditUser(string serverId, string userId, bool? mute = null, bool? deaf = null, IEnumerable roles = null)
{
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (userId == null) throw new ArgumentNullException(nameof(userId));
diff --git a/src/Discord.Net/DiscordClient.Bans.cs b/src/Discord.Net/DiscordClient.Bans.cs
index 9d99b0909..af4d52457 100644
--- a/src/Discord.Net/DiscordClient.Bans.cs
+++ b/src/Discord.Net/DiscordClient.Bans.cs
@@ -1,4 +1,3 @@
-using Discord.Net;
using System;
using System.Net;
using System.Threading.Tasks;
@@ -33,13 +32,13 @@ namespace Discord
}
/// Bans a user from the provided server.
- public Task Ban(User member)
+ public Task Ban(User user)
{
- if (member == null) throw new ArgumentNullException(nameof(member));
- if (member.Server == null) throw new ArgumentException("Unable to ban a user in a private chat.");
+ if (user == null) throw new ArgumentNullException(nameof(user));
+ if (user.Server == null) throw new ArgumentException("Unable to ban a user in a private chat.");
CheckReady();
- return _api.Ban(member.Server.Id, member.Id);
+ return _api.Ban(user.Server.Id, user.Id);
}
/// Unbans a user from the provided server.
diff --git a/src/Discord.Net/DiscordClient.Channels.cs b/src/Discord.Net/DiscordClient.Channels.cs
index d23591b28..8726576e2 100644
--- a/src/Discord.Net/DiscordClient.Channels.cs
+++ b/src/Discord.Net/DiscordClient.Channels.cs
@@ -96,17 +96,17 @@ namespace Discord
}
/// Returns the private channel with the provided user, creating one if it does not currently exist.
- public async Task CreatePMChannel(User member)
+ public async Task CreatePMChannel(User user)
{
- if (member == null) throw new ArgumentNullException(nameof(member));
+ if (user == null) throw new ArgumentNullException(nameof(user));
CheckReady();
Channel channel = null;
- if (member != null)
- channel = member.GlobalUser.PrivateChannel;
+ if (user != null)
+ channel = user.GlobalUser.PrivateChannel;
if (channel == null)
{
- var response = await _api.CreatePMChannel(_userId, member.Id).ConfigureAwait(false);
+ var response = await _api.CreatePMChannel(_userId, user.Id).ConfigureAwait(false);
var recipient = _users.GetOrAdd(response.Recipient?.Id, null);
recipient.Update(response.Recipient);
channel = _channels.GetOrAdd(response.Id, response.GuildId, response.Recipient?.Id);
diff --git a/src/Discord.Net/DiscordClient.Members.cs b/src/Discord.Net/DiscordClient.Members.cs
deleted file mode 100644
index b784e6616..000000000
--- a/src/Discord.Net/DiscordClient.Members.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace Discord
-{
- internal sealed class Users : AsyncCollection
- {
- public Users(DiscordClient client, object writerLock)
- : base(client, writerLock) { }
- private string GetKey(string userId, string serverId)
- => User.GetId(userId, serverId);
-
- public User this[string userId, string serverId]
- => this[GetKey(userId, serverId)];
- public User GetOrAdd(string userId, string serverId)
- => GetOrAdd(GetKey(userId, serverId), () => new User(_client, userId, serverId));
- public User TryRemove(string userId, string serverId)
- => TryRemove(GetKey(userId, serverId));
- }
-
- public class MemberEventArgs : EventArgs
- {
- public User User { get; }
- public Server Server => User.Server;
-
- internal MemberEventArgs(User user) { User = user; }
- }
- public class UserChannelEventArgs : MemberEventArgs
- {
- public Channel Channel { get; }
- public string ChannelId => Channel.Id;
-
- internal UserChannelEventArgs(User user, Channel channel)
- : base(user)
- {
- Channel = channel;
- }
- }
- public class MemberIsSpeakingEventArgs : UserChannelEventArgs
- {
- public bool IsSpeaking { get; }
-
- internal MemberIsSpeakingEventArgs(User member, Channel channel, bool isSpeaking)
- : base(member, channel)
- {
- IsSpeaking = isSpeaking;
- }
- }
-
- public partial class DiscordClient
- {
- public event EventHandler UserIsTyping;
- private void RaiseUserIsTyping(User member, Channel channel)
- {
- if (UserIsTyping != null)
- RaiseEvent(nameof(UserIsTyping), () => UserIsTyping(this, new UserChannelEventArgs(member, channel)));
- }
- public event EventHandler UserIsSpeaking;
- private void RaiseUserIsSpeaking(User member, Channel channel, bool isSpeaking)
- {
- if (UserIsSpeaking != null)
- RaiseEvent(nameof(UserIsSpeaking), () => UserIsSpeaking(this, new MemberIsSpeakingEventArgs(member, channel, isSpeaking)));
- }
-
- private User _currentUser;
-
- internal Users Users => _users;
- private readonly Users _users;
-
- /// Returns the user with the specified id, along with their server-specific data, or null if none was found.
- public User GetMember(Server server, string userId)
- {
- if (server == null) throw new ArgumentNullException(nameof(server));
- if (userId == null) throw new ArgumentNullException(nameof(userId));
- CheckReady();
-
- return _users[userId, server.Id];
- }
- /// Returns the user with the specified name and discriminator, along withtheir server-specific data, or null if they couldn't be found.
- /// Name formats supported: Name and @Name. Search is case-insensitive.
- public User GetMember(Server server, string username, string discriminator)
- {
- if (server == null) throw new ArgumentNullException(nameof(server));
- if (username == null) throw new ArgumentNullException(nameof(username));
- if (discriminator == null) throw new ArgumentNullException(nameof(discriminator));
- CheckReady();
-
- User member = FindMembers(server, username, discriminator, true).FirstOrDefault();
- return _users[member?.Id, server.Id];
- }
-
- /// Returns all users in with the specified server and name, along with their server-specific data.
- /// Name formats supported: Name and @Name. Search is case-insensitive.
- public IEnumerable FindMembers(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));
- CheckReady();
-
- IEnumerable query;
- if (!exactMatch && name.StartsWith("@"))
- {
- string name2 = name.Substring(1);
- query = server.Members.Where(x =>
- string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase) ||
- string.Equals(x.Name, name2, StringComparison.OrdinalIgnoreCase));
- }
- else
- {
- query = server.Members.Where(x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
- }
- if (discriminator != null)
- query = query.Where(x => x.Discriminator == discriminator);
- return query;
- }
-
- public Task EditMember(User member, bool? mute = null, bool? deaf = null, IEnumerable roles = null)
- {
- if (member == null) throw new ArgumentNullException(nameof(member));
- CheckReady();
-
- return _api.EditMember(member.Server?.Id, member.Id, mute: mute, deaf: deaf, roles: roles.Select(x => x.Id));
- }
- }
-}
\ No newline at end of file
diff --git a/src/Discord.Net/DiscordClient.Messages.cs b/src/Discord.Net/DiscordClient.Messages.cs
index e7f66ec6d..c23823af0 100644
--- a/src/Discord.Net/DiscordClient.Messages.cs
+++ b/src/Discord.Net/DiscordClient.Messages.cs
@@ -34,7 +34,7 @@ namespace Discord
public class MessageEventArgs : EventArgs
{
public Message Message { get; }
- public User Member => Message.User;
+ public User User => Message.User;
public Channel Channel => Message.Channel;
public Server Server => Message.Server;
@@ -101,13 +101,13 @@ namespace Discord
return SendMessage(channel, text, false);
}
/// Sends a private message to the provided user.
- public async Task SendPrivateMessage(User member, string text)
+ public async Task SendPrivateMessage(User user, string text)
{
- if (member == null) throw new ArgumentNullException(nameof(member));
+ if (user == null) throw new ArgumentNullException(nameof(user));
if (text == null) throw new ArgumentNullException(nameof(text));
CheckReady();
- var channel = await CreatePMChannel(member).ConfigureAwait(false);
+ var channel = await CreatePMChannel(user).ConfigureAwait(false);
return await SendMessage(channel, text).ConfigureAwait(false);
}
private async Task SendMessage(Channel channel, string text, bool isTextToSpeech)
@@ -218,9 +218,9 @@ namespace Discord
{
if (!channel.IsPrivate)
{
- var member = msg.User;
- if (member != null)
- member.UpdateActivity(msg.EditedTimestamp ?? msg.Timestamp);
+ var user = msg.User;
+ if (user != null)
+ user.UpdateActivity(msg.EditedTimestamp ?? msg.Timestamp);
}
}
return msg;
diff --git a/src/Discord.Net/DiscordClient.Permissions.cs b/src/Discord.Net/DiscordClient.Permissions.cs
index 23e963a13..afa5df7dd 100644
--- a/src/Discord.Net/DiscordClient.Permissions.cs
+++ b/src/Discord.Net/DiscordClient.Permissions.cs
@@ -15,13 +15,13 @@ namespace Discord
return SetChannelPermissions(channel, member?.Id, PermissionTarget.User, allow, deny);
}
- public Task SetChannelUserPermissions(Channel channel, User member, DualChannelPermissions permissions = null)
+ public Task SetChannelUserPermissions(Channel channel, User user, DualChannelPermissions permissions = 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, permissions?.Allow, permissions?.Deny);
+ return SetChannelPermissions(channel, user?.Id, PermissionTarget.User, permissions?.Allow, permissions?.Deny);
}
public Task SetChannelRolePermissions(Channel channel, Role role, ChannelPermissions allow = null, ChannelPermissions deny = null)
{
@@ -95,13 +95,13 @@ namespace Discord
}
}
- public Task RemoveChannelUserPermissions(Channel channel, User member)
+ public Task RemoveChannelUserPermissions(Channel channel, User user)
{
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 RemoveChannelPermissions(channel, member?.Id, PermissionTarget.User);
+ return RemoveChannelPermissions(channel, user?.Id, PermissionTarget.User);
}
public Task RemoveChannelRolePermissions(Channel channel, Role role)
{
diff --git a/src/Discord.Net/DiscordClient.Users.cs b/src/Discord.Net/DiscordClient.Users.cs
index 9ad20efa1..e605188d3 100644
--- a/src/Discord.Net/DiscordClient.Users.cs
+++ b/src/Discord.Net/DiscordClient.Users.cs
@@ -13,20 +13,76 @@ namespace Discord
public GlobalUser GetOrAdd(string id) => GetOrAdd(id, () => new GlobalUser(_client, id));
}
+ internal sealed class Users : AsyncCollection
+ {
+ public Users(DiscordClient client, object writerLock)
+ : base(client, writerLock)
+ { }
+ private string GetKey(string userId, string serverId)
+ => User.GetId(userId, serverId);
+
+ public User this[string userId, string serverId]
+ => this[GetKey(userId, serverId)];
+ public User GetOrAdd(string userId, string serverId)
+ => GetOrAdd(GetKey(userId, serverId), () => new User(_client, userId, serverId));
+ public User TryRemove(string userId, string serverId)
+ => TryRemove(GetKey(userId, serverId));
+ }
+
+ public class UserEventArgs : EventArgs
+ {
+ public User User { get; }
+ public Server Server => User.Server;
+
+ internal UserEventArgs(User user) { User = user; }
+ }
+ public class UserChannelEventArgs : UserEventArgs
+ {
+ public Channel Channel { get; }
+ public string ChannelId => Channel.Id;
+
+ internal UserChannelEventArgs(User user, Channel channel)
+ : base(user)
+ {
+ Channel = channel;
+ }
+ }
+ public class UserIsSpeakingEventArgs : UserChannelEventArgs
+ {
+ public bool IsSpeaking { get; }
+
+ internal UserIsSpeakingEventArgs(User member, Channel channel, bool isSpeaking)
+ : base(member, channel)
+ {
+ IsSpeaking = isSpeaking;
+ }
+ }
public partial class DiscordClient
{
- public event EventHandler UserAdded;
- private void RaiseUserAdded(User member)
+ public event EventHandler UserIsTyping;
+ private void RaiseUserIsTyping(User user, Channel channel)
+ {
+ if (UserIsTyping != null)
+ RaiseEvent(nameof(UserIsTyping), () => UserIsTyping(this, new UserChannelEventArgs(user, channel)));
+ }
+ public event EventHandler UserIsSpeaking;
+ private void RaiseUserIsSpeaking(User user, Channel channel, bool isSpeaking)
+ {
+ if (UserIsSpeaking != null)
+ RaiseEvent(nameof(UserIsSpeaking), () => UserIsSpeaking(this, new UserIsSpeakingEventArgs(user, channel, isSpeaking)));
+ }
+ public event EventHandler UserAdded;
+ private void RaiseUserAdded(User user)
{
if (UserAdded != null)
- RaiseEvent(nameof(UserAdded), () => UserAdded(this, new MemberEventArgs(member)));
+ RaiseEvent(nameof(UserAdded), () => UserAdded(this, new UserEventArgs(user)));
}
- public event EventHandler UserRemoved;
- private void RaiseUserRemoved(User member)
+ public event EventHandler UserRemoved;
+ private void RaiseUserRemoved(User user)
{
if (UserRemoved != null)
- RaiseEvent(nameof(UserRemoved), () => UserRemoved(this, new MemberEventArgs(member)));
+ RaiseEvent(nameof(UserRemoved), () => UserRemoved(this, new UserEventArgs(user)));
}
public event EventHandler ProfileUpdated;
private void RaiseProfileUpdated()
@@ -34,29 +90,89 @@ namespace Discord
if (ProfileUpdated != null)
RaiseEvent(nameof(ProfileUpdated), () => ProfileUpdated(this, EventArgs.Empty));
}
- public event EventHandler MemberUpdated;
- private void RaiseMemberUpdated(User member)
+ public event EventHandler UserUpdated;
+ private void RaiseMemberUpdated(User user)
{
- if (MemberUpdated != null)
- RaiseEvent(nameof(MemberUpdated), () => MemberUpdated(this, new MemberEventArgs(member)));
+ if (UserUpdated != null)
+ RaiseEvent(nameof(UserUpdated), () => UserUpdated(this, new UserEventArgs(user)));
}
- public event EventHandler UserPresenceUpdated;
- private void RaiseUserPresenceUpdated(User member)
+ public event EventHandler UserPresenceUpdated;
+ private void RaiseUserPresenceUpdated(User user)
{
if (UserPresenceUpdated != null)
- RaiseEvent(nameof(UserPresenceUpdated), () => UserPresenceUpdated(this, new MemberEventArgs(member)));
+ RaiseEvent(nameof(UserPresenceUpdated), () => UserPresenceUpdated(this, new UserEventArgs(user)));
}
- public event EventHandler UserVoiceStateUpdated;
- private void RaiseUserVoiceStateUpdated(User member)
+ public event EventHandler UserVoiceStateUpdated;
+ private void RaiseUserVoiceStateUpdated(User user)
{
if (UserVoiceStateUpdated != null)
- RaiseEvent(nameof(UserVoiceStateUpdated), () => UserVoiceStateUpdated(this, new MemberEventArgs(member)));
+ RaiseEvent(nameof(UserVoiceStateUpdated), () => UserVoiceStateUpdated(this, new UserEventArgs(user)));
}
-
+
+ private User _currentUser;
+
/// Returns a collection of all users this client can currently see.
internal GlobalUsers GlobalUsers => _globalUsers;
private readonly GlobalUsers _globalUsers;
+ internal Users Users => _users;
+ private readonly Users _users;
+
+ /// Returns the user with the specified id, along with their server-specific data, or null if none was found.
+ public User GetMember(Server server, string userId)
+ {
+ if (server == null) throw new ArgumentNullException(nameof(server));
+ if (userId == null) throw new ArgumentNullException(nameof(userId));
+ CheckReady();
+
+ return _users[userId, server.Id];
+ }
+ /// Returns the user with the specified name and discriminator, along withtheir server-specific data, or null if they couldn't be found.
+ /// Name formats supported: Name and @Name. Search is case-insensitive.
+ public User GetUser(Server server, string username, string discriminator)
+ {
+ if (server == null) throw new ArgumentNullException(nameof(server));
+ if (username == null) throw new ArgumentNullException(nameof(username));
+ if (discriminator == null) throw new ArgumentNullException(nameof(discriminator));
+ CheckReady();
+
+ User user = FindMembers(server, username, discriminator, true).FirstOrDefault();
+ return _users[user?.Id, server.Id];
+ }
+
+ /// Returns all users in with the specified server and name, along with their server-specific data.
+ /// Name formats supported: Name and @Name. Search is case-insensitive.
+ public IEnumerable FindMembers(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));
+ CheckReady();
+
+ IEnumerable query;
+ if (!exactMatch && name.StartsWith("@"))
+ {
+ string name2 = name.Substring(1);
+ query = server.Members.Where(x =>
+ string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase) ||
+ string.Equals(x.Name, name2, StringComparison.OrdinalIgnoreCase));
+ }
+ else
+ {
+ query = server.Members.Where(x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
+ }
+ if (discriminator != null)
+ query = query.Where(x => x.Discriminator == discriminator);
+ return query;
+ }
+
+ public Task EditMember(User member, bool? mute = null, bool? deaf = null, IEnumerable roles = null)
+ {
+ if (member == null) throw new ArgumentNullException(nameof(member));
+ CheckReady();
+
+ return _api.EditUser(member.Server?.Id, member.Id, mute: mute, deaf: deaf, roles: roles.Select(x => x.Id));
+ }
+
public Task EditProfile(string currentPassword = "",
string username = null, string email = null, string password = null,
ImageType avatarType = ImageType.Png, byte[] avatar = null)