diff --git a/src/Discord.Net.Core/Entities/Messages/IMessage.cs b/src/Discord.Net.Core/Entities/Messages/IMessage.cs index 4266f893a..1dfd8a095 100644 --- a/src/Discord.Net.Core/Entities/Messages/IMessage.cs +++ b/src/Discord.Net.Core/Entities/Messages/IMessage.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; namespace Discord @@ -15,6 +15,8 @@ namespace Discord bool IsPinned { get; } /// Returns the content for this message. string Content { get; } + /// Returns a jump url for this message. + string GetJumpUrl(); /// Gets the time this message was sent. DateTimeOffset Timestamp { get; } /// Gets the time of this message's last edit, if any. diff --git a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs index 3dc3e74e9..fbb96687d 100644 --- a/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs +++ b/src/Discord.Net.Rest/Entities/Messages/MessageHelper.cs @@ -93,6 +93,12 @@ namespace Discord.Rest await client.ApiClient.RemovePinAsync(msg.Channel.Id, msg.Id, options).ConfigureAwait(false); } + public static string GetJumpUrl(IMessage msg) + { + var channel = msg.Channel; + return $"https://discordapp.com/channels/{(channel is IDMChannel ? "@me" : $"{(channel as IGuildChannel).GuildId}")}/{channel.Id}/{msg.Id}"; + } + public static ImmutableArray ParseTags(string text, IMessageChannel channel, IGuild guild, IReadOnlyCollection userMentions) { var tags = ImmutableArray.CreateBuilder(); diff --git a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs index 590886886..fe68a4111 100644 --- a/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs +++ b/src/Discord.Net.Rest/Entities/Messages/RestMessage.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -63,6 +63,8 @@ namespace Discord.Rest public override string ToString() => Content; + public string GetJumpUrl() => MessageHelper.GetJumpUrl(this); + MessageType IMessage.Type => MessageType.Default; IUser IMessage.Author => Author; IReadOnlyCollection IMessage.Attachments => Attachments; diff --git a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs index 5442c888a..44549ff5e 100644 --- a/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs +++ b/src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs @@ -1,4 +1,4 @@ -using Discord.Rest; +using Discord.Rest; using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -58,6 +58,9 @@ namespace Discord.WebSocket => MessageHelper.DeleteAsync(this, Discord, options); public override string ToString() => Content; + + public string GetJumpUrl() => MessageHelper.GetJumpUrl(this); + internal SocketMessage Clone() => MemberwiseClone() as SocketMessage; //IMessage