From 20731b3c9221c015c6525e8303cd5c8ba70c5c7b Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 25 Oct 2015 05:57:13 -0300 Subject: [PATCH] More member -> user renaming --- .../CommandsPlugin.Events.cs | 2 +- src/Discord.Net.Net45/Discord.Net.csproj | 3 - src/Discord.Net/DiscordAPIClient.cs | 2 +- src/Discord.Net/DiscordClient.Bans.cs | 9 +- src/Discord.Net/DiscordClient.Channels.cs | 10 +- src/Discord.Net/DiscordClient.Members.cs | 127 --------------- src/Discord.Net/DiscordClient.Messages.cs | 14 +- src/Discord.Net/DiscordClient.Permissions.cs | 12 +- src/Discord.Net/DiscordClient.Users.cs | 150 ++++++++++++++++-- 9 files changed, 157 insertions(+), 172 deletions(-) delete mode 100644 src/Discord.Net/DiscordClient.Members.cs 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)