From 53e1c798483ec3a665692a6078625e223381d626 Mon Sep 17 00:00:00 2001 From: RogueException Date: Tue, 19 Jul 2016 15:53:17 -0300 Subject: [PATCH] Cleaned up mention logic, removed User.NicknameMention --- .../Extensions/MessageExtensions.cs | 22 +++++++------------ src/Discord.Net/Entities/Users/GroupUser.cs | 3 +-- src/Discord.Net/Entities/Users/GuildUser.cs | 3 +-- src/Discord.Net/Entities/Users/IUser.cs | 2 -- src/Discord.Net/Entities/Users/User.cs | 3 +-- .../Entities/WebSocket/CachedDMUser.cs | 3 +-- src/Discord.Net/Utilities/MentionUtils.cs | 3 ++- 7 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/Discord.Net.Commands/Extensions/MessageExtensions.cs b/src/Discord.Net.Commands/Extensions/MessageExtensions.cs index 6618f4b5e..1dad07392 100644 --- a/src/Discord.Net.Commands/Extensions/MessageExtensions.cs +++ b/src/Discord.Net.Commands/Extensions/MessageExtensions.cs @@ -15,7 +15,6 @@ public static bool HasStringPrefix(this IMessage msg, string str, ref int argPos) { var text = msg.Content; - //str = str + ' '; if (text.StartsWith(str)) { argPos = str.Length; @@ -26,19 +25,14 @@ public static bool HasMentionPrefix(this IMessage msg, IUser user, ref int argPos) { var text = msg.Content; - string mention = user.Mention + ' '; - if (text.StartsWith(mention)) - { - argPos = mention.Length; - return true; - } - string nickMention = user.NicknameMention + ' '; - if (text.StartsWith(mention)) - { - argPos = nickMention.Length; - return true; - } - return false; + if (text.Length <= 3 || text[0] != '<' || text[1] != '@') return false; + + int endPos = text.IndexOf('>'); + if (endPos == -1) return false; + + ulong userId; + if (!MentionUtils.TryParseUser(text.Substring(0, endPos), out userId)) return false; + return userId == user.Id; } } } \ No newline at end of file diff --git a/src/Discord.Net/Entities/Users/GroupUser.cs b/src/Discord.Net/Entities/Users/GroupUser.cs index af32e4395..98a8dade4 100644 --- a/src/Discord.Net/Entities/Users/GroupUser.cs +++ b/src/Discord.Net/Entities/Users/GroupUser.cs @@ -16,9 +16,8 @@ namespace Discord public ushort DiscriminatorValue => User.DiscriminatorValue; public bool IsAttached => User.IsAttached; public bool IsBot => User.IsBot; - public string Mention => User.Mention; - public string NicknameMention => User.NicknameMention; public string Username => User.Username; + public string Mention => MentionUtils.Mention(this, false); public virtual UserStatus Status => UserStatus.Unknown; public virtual Game Game => null; diff --git a/src/Discord.Net/Entities/Users/GuildUser.cs b/src/Discord.Net/Entities/Users/GuildUser.cs index 60b1b6e38..1aa0ba9fc 100644 --- a/src/Discord.Net/Entities/Users/GuildUser.cs +++ b/src/Discord.Net/Entities/Users/GuildUser.cs @@ -29,8 +29,7 @@ namespace Discord public ushort DiscriminatorValue => User.DiscriminatorValue; public bool IsAttached => User.IsAttached; public bool IsBot => User.IsBot; - public string Mention => User.Mention; - public string NicknameMention => User.NicknameMention; + public string Mention => MentionUtils.Mention(this, Nickname != null); public string Username => User.Username; public virtual UserStatus Status => UserStatus.Unknown; diff --git a/src/Discord.Net/Entities/Users/IUser.cs b/src/Discord.Net/Entities/Users/IUser.cs index 9e78781d2..5eef8231c 100644 --- a/src/Discord.Net/Entities/Users/IUser.cs +++ b/src/Discord.Net/Entities/Users/IUser.cs @@ -12,7 +12,5 @@ namespace Discord bool IsBot { get; } /// Gets the username for this user. string Username { get; } - /// Returns a special string used to mention this object, by nickname. - string NicknameMention { get; } } } diff --git a/src/Discord.Net/Entities/Users/User.cs b/src/Discord.Net/Entities/Users/User.cs index 501bfb354..e6628fe3e 100644 --- a/src/Discord.Net/Entities/Users/User.cs +++ b/src/Discord.Net/Entities/Users/User.cs @@ -17,8 +17,7 @@ namespace Discord public string AvatarUrl => API.CDN.GetUserAvatarUrl(Id, _avatarId); public string Discriminator => DiscriminatorValue.ToString("D4"); - public string Mention => MentionUtils.Mention(this, false); - public string NicknameMention => MentionUtils.Mention(this, true); + public string Mention => MentionUtils.Mention(this); public virtual Game Game => null; public virtual UserStatus Status => UserStatus.Unknown; diff --git a/src/Discord.Net/Entities/WebSocket/CachedDMUser.cs b/src/Discord.Net/Entities/WebSocket/CachedDMUser.cs index c25b8ac7a..bb0a56198 100644 --- a/src/Discord.Net/Entities/WebSocket/CachedDMUser.cs +++ b/src/Discord.Net/Entities/WebSocket/CachedDMUser.cs @@ -22,8 +22,7 @@ namespace Discord public ushort DiscriminatorValue => User.DiscriminatorValue; public bool IsAttached => User.IsAttached; public bool IsBot => User.IsBot; - public string Mention => User.Mention; - public string NicknameMention => User.NicknameMention; + public string Mention => MentionUtils.Mention(this); public string Username => User.Username; public CachedDMUser(CachedGlobalUser user) diff --git a/src/Discord.Net/Utilities/MentionUtils.cs b/src/Discord.Net/Utilities/MentionUtils.cs index 0c4118f06..1f6fb4280 100644 --- a/src/Discord.Net/Utilities/MentionUtils.cs +++ b/src/Discord.Net/Utilities/MentionUtils.cs @@ -13,7 +13,8 @@ namespace Discord private static readonly Regex _channelRegex = new Regex(@"<#([0-9]+)>", RegexOptions.Compiled); private static readonly Regex _roleRegex = new Regex(@"<@&([0-9]+)>", RegexOptions.Compiled); - internal static string Mention(IUser user, bool useNickname) => useNickname ? $"<@!{user.Id}>" : $"<@{user.Id}>"; + //Unsure the system can be positive a user doesn't have a nickname, assume useNickname = true (source: Jake) + internal static string Mention(IUser user, bool useNickname = true) => useNickname ? $"<@!{user.Id}>" : $"<@{user.Id}>"; internal static string Mention(IChannel channel) => $"<#{channel.Id}>"; internal static string Mention(IRole role) => $"<&{role.Id}>";