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