diff --git a/src/NadekoBot/Modules/Searches/Feeds/FeedCommands.cs b/src/NadekoBot/Modules/Searches/Feeds/FeedCommands.cs index cda3fd3cd..5cde4db23 100644 --- a/src/NadekoBot/Modules/Searches/Feeds/FeedCommands.cs +++ b/src/NadekoBot/Modules/Searches/Feeds/FeedCommands.cs @@ -32,33 +32,43 @@ public partial class Searches [UserPerm(GuildPerm.ManageMessages)] public async Task Feed(string url, [Leftover] ITextChannel channel = null) { - var success = Uri.TryCreate(url, UriKind.Absolute, out var uri) - && (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps); - if (success) + if (Uri.TryCreate(url, UriKind.Absolute, out var uri) + && (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)) { - channel ??= (ITextChannel)ctx.Channel; - try - { - await FeedReader.ReadAsync(url); - } - catch (Exception ex) - { - Log.Information(ex, "Unable to get feeds from that url"); - success = false; - } + await ReplyErrorLocalizedAsync(strs.feed_invalid_url); + return; } - if (success) + channel ??= (ITextChannel)ctx.Channel; + try { - success = _service.AddFeed(ctx.Guild.Id, channel.Id, url); - if (success) - { - await ReplyConfirmLocalizedAsync(strs.feed_added); - return; - } + await FeedReader.ReadAsync(url); + } + catch (Exception ex) + { + Log.Information(ex, "Unable to get feeds from that url"); + await ReplyErrorLocalizedAsync(strs.feed_cant_parse); + return; } - await ReplyConfirmLocalizedAsync(strs.feed_not_valid); + var result = _service.AddFeed(ctx.Guild.Id, channel.Id, url); + if (result == FeedAddResult.Success) + { + await ReplyConfirmLocalizedAsync(strs.feed_added); + return; + } + + if (result == FeedAddResult.Duplicate) + { + await ReplyErrorLocalizedAsync(strs.feed_duplicate); + return; + } + + if (result == FeedAddResult.LimitReached) + { + await ReplyErrorLocalizedAsync(strs.feed_limit_reached); + return; + } } [Cmd] diff --git a/src/NadekoBot/Modules/Searches/Feeds/FeedsService.cs b/src/NadekoBot/Modules/Searches/Feeds/FeedsService.cs index f6f855ee0..ea7b15824 100644 --- a/src/NadekoBot/Modules/Searches/Feeds/FeedsService.cs +++ b/src/NadekoBot/Modules/Searches/Feeds/FeedsService.cs @@ -207,7 +207,7 @@ public class FeedsService : INService .ToList(); } - public bool AddFeed(ulong guildId, ulong channelId, string rssFeed) + public FeedAddResult AddFeed(ulong guildId, ulong channelId, string rssFeed) { ArgumentNullException.ThrowIfNull(rssFeed, nameof(rssFeed)); @@ -221,9 +221,9 @@ public class FeedsService : INService var gc = uow.GuildConfigsForId(guildId, set => set.Include(x => x.FeedSubs)); if (gc.FeedSubs.Any(x => x.Url.ToLower() == fs.Url.ToLower())) - return false; + return FeedAddResult.Duplicate; if (gc.FeedSubs.Count >= 10) - return false; + return FeedAddResult.LimitReached; gc.FeedSubs.Add(fs); uow.SaveChanges(); @@ -242,7 +242,7 @@ public class FeedsService : INService }); } - return true; + return FeedAddResult.Success; } public bool RemoveFeed(ulong guildId, int index) @@ -270,4 +270,12 @@ public class FeedsService : INService return true; } +} + +public enum FeedAddResult +{ + Success, + LimitReached, + Invalid, + Duplicate, } \ No newline at end of file diff --git a/src/NadekoBot/data/strings/responses/responses.en-US.json b/src/NadekoBot/data/strings/responses/responses.en-US.json index fa6881d5b..c392f5034 100644 --- a/src/NadekoBot/data/strings/responses/responses.en-US.json +++ b/src/NadekoBot/data/strings/responses/responses.en-US.json @@ -885,7 +885,10 @@ "started": "Started. Reposting every {0}s.", "stopped": "Stopped reposting.", "feed_added": "Feed added.", - "feed_not_valid": "Invalid link, or you're already following that feed on this server, or you've reached maximum number of feeds allowed.", + "feed_limit_reached": "You've reached the maximum number of feeds allowed per server.", + "feed_duplicate": "You're already following that feed on this server.", + "feed_cant_parse": "Unable to access or parse that feed url's contents.", + "feed_invalid_url": "Invalid feed url. It must be an absolute http or https url.", "feed_out_of_range": "Index out of range.", "feed_removed": "Feed removed.", "feed_no_feed": "You haven't subscribed to any feeds on this server.",