diff --git a/Courier/Services/FeedService.cs b/Courier/Services/FeedService.cs index 8de0073..42adca3 100644 --- a/Courier/Services/FeedService.cs +++ b/Courier/Services/FeedService.cs @@ -151,7 +151,7 @@ private async Task SendMessageAsync( embedBuilder .WithAuthor(authorBuilder => authorBuilder .WithName(feed.Title.Text.ToMarkdown().Truncate(EmbedAuthorBuilder.MaxAuthorNameLength)) - .WithIconUrl(feed.ImageUrl.ToString())) + .WithIconUrl(feed.ImageUrl?.ToString())) .WithFooter(feed.Description.Text.ToMarkdown().Truncate(EmbedFooterBuilder.MaxFooterTextLength)) .WithUrl(item.Links.Count != 0 ? item.Links.First().Uri.ToString() : item.Id) .WithTitle(item.Title.Text.ToMarkdown().Truncate(EmbedBuilder.MaxTitleLength)) @@ -162,12 +162,29 @@ private async Task SendMessageAsync( embeds.Add(embedBuilder.Build()); } - foreach (var embedArray in embeds.Chunk(DiscordConfig.MaxEmbedsPerMessage)) - await textChannel.SendMessageAsync(embeds: embedArray, options: new RequestOptions + foreach (var chunk in embeds.Chunk(DiscordConfig.MaxEmbedsPerMessage)) + { + if (cancellationToken.IsCancellationRequested) break; + + if (chunk.Sum(embed => embed.Length) > EmbedBuilder.MaxEmbedLength) + { + foreach (var embed in chunk) + await textChannel.SendMessageAsync(embed: embed, options: new RequestOptions + { + Timeout = DiscordConfig.DefaultRequestTimeout, + CancelToken = cancellationToken, + RetryMode = RetryMode.AlwaysRetry + }); + + continue; + } + + await textChannel.SendMessageAsync(embeds: chunk, options: new RequestOptions { Timeout = DiscordConfig.DefaultRequestTimeout, CancelToken = cancellationToken, RetryMode = RetryMode.AlwaysRetry }); + } } } \ No newline at end of file