* Changed from NotNullOrWhitespace to NotNullOrEmpty * Added NotNullOrEmpty on filename * Added system to interpret from the path * Added a check for if it contains a period * It has been done, how ever it will break stuff * Changed to use ??= how ever still added error check * Added space under check * Changed from with a period to valid file extension * Added checks for SendFileAsync * Removed filename != null &&pull/1923/head
| @@ -338,6 +338,9 @@ namespace Discord.Rest | |||||
| string filePath, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, MessageComponent component, ISticker[] stickers, RequestOptions options, bool isSpoiler, Embed[] embeds) | string filePath, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, MessageComponent component, ISticker[] stickers, RequestOptions options, bool isSpoiler, Embed[] embeds) | ||||
| { | { | ||||
| string filename = Path.GetFileName(filePath); | string filename = Path.GetFileName(filePath); | ||||
| if (filename == null || !filename.Contains('.')) | |||||
| throw new ArgumentException("Make sure that the file path has a file name and a valid file extension."); | |||||
| using (var file = File.OpenRead(filePath)) | using (var file = File.OpenRead(filePath)) | ||||
| return await SendFileAsync(channel, client, file, filename, text, isTTS, embed, allowedMentions, messageReference, component, stickers, options, isSpoiler, embeds).ConfigureAwait(false); | return await SendFileAsync(channel, client, file, filename, text, isTTS, embed, allowedMentions, messageReference, component, stickers, options, isSpoiler, embeds).ConfigureAwait(false); | ||||
| } | } | ||||
| @@ -346,6 +349,9 @@ namespace Discord.Rest | |||||
| public static async Task<RestUserMessage> SendFileAsync(IMessageChannel channel, BaseDiscordClient client, | public static async Task<RestUserMessage> SendFileAsync(IMessageChannel channel, BaseDiscordClient client, | ||||
| Stream stream, string filename, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, MessageComponent component, ISticker[] stickers, RequestOptions options, bool isSpoiler, Embed[] embeds) | Stream stream, string filename, string text, bool isTTS, Embed embed, AllowedMentions allowedMentions, MessageReference messageReference, MessageComponent component, ISticker[] stickers, RequestOptions options, bool isSpoiler, Embed[] embeds) | ||||
| { | { | ||||
| if (filename == null || !filename.Contains('.')) | |||||
| throw new ArgumentException("Make sure that the file path has a file name and a valid file extension."); | |||||
| embeds ??= Array.Empty<Embed>(); | embeds ??= Array.Empty<Embed>(); | ||||
| if (embed != null) | if (embed != null) | ||||
| embeds = new[] { embed }.Concat(embeds).ToArray(); | embeds = new[] { embed }.Concat(embeds).ToArray(); | ||||
| @@ -245,9 +245,9 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public override async Task<RestFollowupMessage> FollowupWithFileAsync( | public override async Task<RestFollowupMessage> FollowupWithFileAsync( | ||||
| Stream fileStream, | |||||
| string fileName, | |||||
| string text = null, | string text = null, | ||||
| Stream fileStream = null, | |||||
| string fileName = null, | |||||
| Embed[] embeds = null, | Embed[] embeds = null, | ||||
| bool isTTS = false, | bool isTTS = false, | ||||
| bool ephemeral = false, | bool ephemeral = false, | ||||
| @@ -287,8 +287,8 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public override async Task<RestFollowupMessage> FollowupWithFileAsync( | public override async Task<RestFollowupMessage> FollowupWithFileAsync( | ||||
| string filePath, | |||||
| string text = null, | string text = null, | ||||
| string filePath = null, | |||||
| string fileName = null, | string fileName = null, | ||||
| Embed[] embeds = null, | Embed[] embeds = null, | ||||
| bool isTTS = false, | bool isTTS = false, | ||||
| @@ -34,7 +34,7 @@ namespace Discord.WebSocket | |||||
| internal new static SocketAutocompleteInteraction Create(DiscordSocketClient client, Model model, ISocketMessageChannel channel) | internal new static SocketAutocompleteInteraction Create(DiscordSocketClient client, Model model, ISocketMessageChannel channel) | ||||
| { | { | ||||
| var entity = new SocketAutocompleteInteraction(client, model, channel); | |||||
| var entity = new SocketAutocompleteInteraction(client, model, channel); | |||||
| entity.Update(model); | entity.Update(model); | ||||
| return entity; | return entity; | ||||
| } | } | ||||
| @@ -84,11 +84,11 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| [Obsolete("Autocomplete interactions cannot have followups!", true)] | [Obsolete("Autocomplete interactions cannot have followups!", true)] | ||||
| public override Task<RestFollowupMessage> FollowupWithFileAsync(string text = null, Stream fileStream = null, string fileName = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null) => throw new NotSupportedException(); | |||||
| public override Task<RestFollowupMessage> FollowupWithFileAsync(Stream fileStream, string fileName, string text = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null) => throw new NotSupportedException(); | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| [Obsolete("Autocomplete interactions cannot have followups!", true)] | [Obsolete("Autocomplete interactions cannot have followups!", true)] | ||||
| public override Task<RestFollowupMessage> FollowupWithFileAsync(string text = null, string filePath = null, string fileName = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null) => throw new NotSupportedException(); | |||||
| public override Task<RestFollowupMessage> FollowupWithFileAsync(string filePath, string text = null, string fileName = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null) => throw new NotSupportedException(); | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| [Obsolete("Autocomplete interactions cannot have normal responses!", true)] | [Obsolete("Autocomplete interactions cannot have normal responses!", true)] | ||||
| @@ -159,8 +159,8 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public override async Task<RestFollowupMessage> FollowupWithFileAsync( | public override async Task<RestFollowupMessage> FollowupWithFileAsync( | ||||
| Stream fileStream, | |||||
| string text = null, | string text = null, | ||||
| Stream fileStream = null, | |||||
| string fileName = null, | string fileName = null, | ||||
| Embed[] embeds = null, | Embed[] embeds = null, | ||||
| bool isTTS = false, | bool isTTS = false, | ||||
| @@ -181,7 +181,7 @@ namespace Discord.WebSocket | |||||
| Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); | Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); | ||||
| Preconditions.AtMost(embeds?.Length ?? 0, 10, nameof(embeds), "A max of 10 embeds are allowed."); | Preconditions.AtMost(embeds?.Length ?? 0, 10, nameof(embeds), "A max of 10 embeds are allowed."); | ||||
| Preconditions.NotNull(fileStream, nameof(fileStream), "File Stream must have data"); | Preconditions.NotNull(fileStream, nameof(fileStream), "File Stream must have data"); | ||||
| Preconditions.NotNullOrWhitespace(fileName, nameof(fileName), "File Name must not be empty or null"); | |||||
| Preconditions.NotNullOrEmpty(fileName, nameof(fileName), "File Name must not be empty or null"); | |||||
| var args = new API.Rest.CreateWebhookMessageParams | var args = new API.Rest.CreateWebhookMessageParams | ||||
| { | { | ||||
| @@ -201,8 +201,8 @@ namespace Discord.WebSocket | |||||
| /// <inheritdoc/> | /// <inheritdoc/> | ||||
| public override async Task<RestFollowupMessage> FollowupWithFileAsync( | public override async Task<RestFollowupMessage> FollowupWithFileAsync( | ||||
| string filePath, | |||||
| string text = null, | string text = null, | ||||
| string filePath = null, | |||||
| string fileName = null, | string fileName = null, | ||||
| Embed[] embeds = null, | Embed[] embeds = null, | ||||
| bool isTTS = false, | bool isTTS = false, | ||||
| @@ -222,7 +222,12 @@ namespace Discord.WebSocket | |||||
| Preconditions.AtMost(allowedMentions?.RoleIds?.Count ?? 0, 100, nameof(allowedMentions.RoleIds), "A max of 100 role Ids are allowed."); | Preconditions.AtMost(allowedMentions?.RoleIds?.Count ?? 0, 100, nameof(allowedMentions.RoleIds), "A max of 100 role Ids are allowed."); | ||||
| Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); | Preconditions.AtMost(allowedMentions?.UserIds?.Count ?? 0, 100, nameof(allowedMentions.UserIds), "A max of 100 user Ids are allowed."); | ||||
| Preconditions.AtMost(embeds?.Length ?? 0, 10, nameof(embeds), "A max of 10 embeds are allowed."); | Preconditions.AtMost(embeds?.Length ?? 0, 10, nameof(embeds), "A max of 10 embeds are allowed."); | ||||
| Preconditions.NotNullOrWhitespace(filePath, nameof(filePath), "Path must exist"); | |||||
| Preconditions.NotNullOrEmpty(filePath, nameof(filePath), "Path must exist"); | |||||
| fileName ??= Path.GetFileName(filePath); | |||||
| if (fileName == null || !fileName.Contains('.')) | |||||
| throw new ArgumentException("Make sure that the file path has a file name and a valid file extension."); | |||||
| var args = new API.Rest.CreateWebhookMessageParams | var args = new API.Rest.CreateWebhookMessageParams | ||||
| { | { | ||||
| @@ -157,7 +157,7 @@ namespace Discord.WebSocket | |||||
| /// <returns> | /// <returns> | ||||
| /// The sent message. | /// The sent message. | ||||
| /// </returns> | /// </returns> | ||||
| public abstract Task<RestFollowupMessage> FollowupWithFileAsync(string text = null, Stream fileStream = null, string fileName = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, | |||||
| public abstract Task<RestFollowupMessage> FollowupWithFileAsync(Stream fileStream, string fileName, string text = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, | |||||
| AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null); | AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null); | ||||
| /// <summary> | /// <summary> | ||||
| @@ -176,13 +176,13 @@ namespace Discord.WebSocket | |||||
| /// <returns> | /// <returns> | ||||
| /// The sent message. | /// The sent message. | ||||
| /// </returns> | /// </returns> | ||||
| public abstract Task<RestFollowupMessage> FollowupWithFileAsync(string text = null, string filePath = null, string fileName = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, | |||||
| public abstract Task<RestFollowupMessage> FollowupWithFileAsync(string filePath, string text = null, string fileName = null, Embed[] embeds = null, bool isTTS = false, bool ephemeral = false, | |||||
| AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null); | AllowedMentions allowedMentions = null, RequestOptions options = null, MessageComponent component = null, Embed embed = null); | ||||
| /// <summary> | /// <summary> | ||||
| /// Gets the original response for this interaction. | /// Gets the original response for this interaction. | ||||
| /// </summary> | /// </summary> | ||||
| /// <param name="options">The request options for this async request.</param> | |||||
| /// <param name="options">The request options for this <see langword="async"/> request.</param> | |||||
| /// <returns>A <see cref="RestInteractionMessage"/> that represents the initial response.</returns> | /// <returns>A <see cref="RestInteractionMessage"/> that represents the initial response.</returns> | ||||
| public Task<RestInteractionMessage> GetOriginalResponseAsync(RequestOptions options = null) | public Task<RestInteractionMessage> GetOriginalResponseAsync(RequestOptions options = null) | ||||
| => InteractionHelper.GetOriginalResponseAsync(Discord, Channel, this, options); | => InteractionHelper.GetOriginalResponseAsync(Discord, Channel, this, options); | ||||
| @@ -191,7 +191,7 @@ namespace Discord.WebSocket | |||||
| /// Edits original response for this interaction. | /// Edits original response for this interaction. | ||||
| /// </summary> | /// </summary> | ||||
| /// <param name="func">A delegate containing the properties to modify the message with.</param> | /// <param name="func">A delegate containing the properties to modify the message with.</param> | ||||
| /// <param name="options">The request options for this async request.</param> | |||||
| /// <param name="options">The request options for this <see langword="async"/> request.</param> | |||||
| /// <returns>A <see cref="RestInteractionMessage"/> that represents the initial response.</returns> | /// <returns>A <see cref="RestInteractionMessage"/> that represents the initial response.</returns> | ||||
| public async Task<RestInteractionMessage> ModifyOriginalResponseAsync(Action<MessageProperties> func, RequestOptions options = null) | public async Task<RestInteractionMessage> ModifyOriginalResponseAsync(Action<MessageProperties> func, RequestOptions options = null) | ||||
| { | { | ||||
| @@ -203,7 +203,7 @@ namespace Discord.WebSocket | |||||
| /// Acknowledges this interaction. | /// Acknowledges this interaction. | ||||
| /// </summary> | /// </summary> | ||||
| /// <param name="ephemeral"><see langword="true"/> to send this message ephemerally, otherwise <see langword="false"/>.</param> | /// <param name="ephemeral"><see langword="true"/> to send this message ephemerally, otherwise <see langword="false"/>.</param> | ||||
| /// <param name="options">The request options for this async request.</param> | |||||
| /// <param name="options">The request options for this <see langword="async"/> request.</param> | |||||
| /// <returns> | /// <returns> | ||||
| /// A task that represents the asynchronous operation of acknowledging the interaction. | /// A task that represents the asynchronous operation of acknowledging the interaction. | ||||
| /// </returns> | /// </returns> | ||||