| @@ -5,17 +5,28 @@ namespace Discord | |||
| /// <summary> | |||
| /// Represents a class used to make timestamps in messages. see <see href="https://discord.com/developers/docs/reference#message-formatting-timestamp-styles"/>. | |||
| /// </summary> | |||
| public class TimestampTag | |||
| public readonly struct TimestampTag | |||
| { | |||
| /// <summary> | |||
| /// Gets or sets the style of the timestamp tag. | |||
| /// Gets the time for this timestamp tag. | |||
| /// </summary> | |||
| public TimestampTagStyles Style { get; set; } = TimestampTagStyles.ShortDateTime; | |||
| public DateTimeOffset Time { get; } | |||
| /// <summary> | |||
| /// Gets or sets the time for this timestamp tag. | |||
| /// Gets the style of this tag. <see langword="null"/> if none was provided. | |||
| /// </summary> | |||
| public DateTimeOffset Time { get; set; } | |||
| public TimestampTagStyles? Style { get; } | |||
| /// <summary> | |||
| /// Creates a new <see cref="TimestampTag"/> from the provided time. | |||
| /// </summary> | |||
| /// <param name="time">The time for this tag.</param> | |||
| /// <param name="style">The style for this tag.</param> | |||
| public TimestampTag(DateTimeOffset time, TimestampTagStyles? style = null) | |||
| { | |||
| Time = time; | |||
| Style = style; | |||
| } | |||
| /// <summary> | |||
| /// Converts the current timestamp tag to the string representation supported by discord. | |||
| @@ -23,11 +34,23 @@ namespace Discord | |||
| /// If the <see cref="Time"/> is null then the default 0 will be used. | |||
| /// </para> | |||
| /// </summary> | |||
| /// <remarks> | |||
| /// Will use the provided <see cref="Style"/> if provided. If this value is null, it will default to <see cref="TimestampTagStyles.ShortDateTime"/>. | |||
| /// </remarks> | |||
| /// <returns>A string that is compatible in a discord message, ex: <code><t:1625944201:f></code></returns> | |||
| public override string ToString() | |||
| { | |||
| return $"<t:{Time.ToUnixTimeSeconds()}:{(char)Style}>"; | |||
| } | |||
| => ToString(Style ?? TimestampTagStyles.ShortDateTime); | |||
| /// <summary> | |||
| /// Converts the current timestamp tag to the string representation supported by discord. | |||
| /// <para> | |||
| /// If the <see cref="Time"/> is null then the default 0 will be used. | |||
| /// </para> | |||
| /// </summary> | |||
| /// <param name="style">The formatting style for this tag.</param> | |||
| /// <returns>A string that is compatible in a discord message, ex: <code><t:1625944201:f></code></returns> | |||
| public string ToString(TimestampTagStyles style) | |||
| => $"<t:{Time.ToUnixTimeSeconds()}:{(char)style}>"; | |||
| /// <summary> | |||
| /// Creates a new timestamp tag with the specified <see cref="DateTime"/> object. | |||
| @@ -35,14 +58,8 @@ namespace Discord | |||
| /// <param name="time">The time of this timestamp tag.</param> | |||
| /// <param name="style">The style for this timestamp tag.</param> | |||
| /// <returns>The newly create timestamp tag.</returns> | |||
| public static TimestampTag FromDateTime(DateTime time, TimestampTagStyles style = TimestampTagStyles.ShortDateTime) | |||
| { | |||
| return new TimestampTag | |||
| { | |||
| Style = style, | |||
| Time = time | |||
| }; | |||
| } | |||
| public static TimestampTag FromDateTime(DateTime time, TimestampTagStyles? style = null) | |||
| => new(time, style); | |||
| /// <summary> | |||
| /// Creates a new timestamp tag with the specified <see cref="DateTimeOffset"/> object. | |||
| @@ -50,13 +67,7 @@ namespace Discord | |||
| /// <param name="time">The time of this timestamp tag.</param> | |||
| /// <param name="style">The style for this timestamp tag.</param> | |||
| /// <returns>The newly create timestamp tag.</returns> | |||
| public static TimestampTag FromDateTimeOffset(DateTimeOffset time, TimestampTagStyles style = TimestampTagStyles.ShortDateTime) | |||
| { | |||
| return new TimestampTag | |||
| { | |||
| Style = style, | |||
| Time = time | |||
| }; | |||
| } | |||
| public static TimestampTag FromDateTimeOffset(DateTimeOffset time, TimestampTagStyles? style = null) | |||
| => new(time, style); | |||
| } | |||
| } | |||
| } | |||