Clarified .feedadd errors

This commit is contained in:
Kwoth
2022-10-11 19:14:04 +02:00
parent dc568fe0e2
commit 0469705037
3 changed files with 47 additions and 26 deletions

View File

@@ -32,33 +32,43 @@ public partial class Searches
[UserPerm(GuildPerm.ManageMessages)] [UserPerm(GuildPerm.ManageMessages)]
public async Task Feed(string url, [Leftover] ITextChannel channel = null) public async Task Feed(string url, [Leftover] ITextChannel channel = null)
{ {
var success = Uri.TryCreate(url, UriKind.Absolute, out var uri) if (Uri.TryCreate(url, UriKind.Absolute, out var uri)
&& (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps); && (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps))
if (success)
{ {
channel ??= (ITextChannel)ctx.Channel; await ReplyErrorLocalizedAsync(strs.feed_invalid_url);
try return;
{
await FeedReader.ReadAsync(url);
}
catch (Exception ex)
{
Log.Information(ex, "Unable to get feeds from that url");
success = false;
}
} }
if (success) channel ??= (ITextChannel)ctx.Channel;
try
{ {
success = _service.AddFeed(ctx.Guild.Id, channel.Id, url); await FeedReader.ReadAsync(url);
if (success) }
{ catch (Exception ex)
await ReplyConfirmLocalizedAsync(strs.feed_added); {
return; 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] [Cmd]

View File

@@ -207,7 +207,7 @@ public class FeedsService : INService
.ToList(); .ToList();
} }
public bool AddFeed(ulong guildId, ulong channelId, string rssFeed) public FeedAddResult AddFeed(ulong guildId, ulong channelId, string rssFeed)
{ {
ArgumentNullException.ThrowIfNull(rssFeed, nameof(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)); var gc = uow.GuildConfigsForId(guildId, set => set.Include(x => x.FeedSubs));
if (gc.FeedSubs.Any(x => x.Url.ToLower() == fs.Url.ToLower())) if (gc.FeedSubs.Any(x => x.Url.ToLower() == fs.Url.ToLower()))
return false; return FeedAddResult.Duplicate;
if (gc.FeedSubs.Count >= 10) if (gc.FeedSubs.Count >= 10)
return false; return FeedAddResult.LimitReached;
gc.FeedSubs.Add(fs); gc.FeedSubs.Add(fs);
uow.SaveChanges(); uow.SaveChanges();
@@ -242,7 +242,7 @@ public class FeedsService : INService
}); });
} }
return true; return FeedAddResult.Success;
} }
public bool RemoveFeed(ulong guildId, int index) public bool RemoveFeed(ulong guildId, int index)
@@ -270,4 +270,12 @@ public class FeedsService : INService
return true; return true;
} }
}
public enum FeedAddResult
{
Success,
LimitReached,
Invalid,
Duplicate,
} }

View File

@@ -885,7 +885,10 @@
"started": "Started. Reposting every {0}s.", "started": "Started. Reposting every {0}s.",
"stopped": "Stopped reposting.", "stopped": "Stopped reposting.",
"feed_added": "Feed added.", "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_out_of_range": "Index out of range.",
"feed_removed": "Feed removed.", "feed_removed": "Feed removed.",
"feed_no_feed": "You haven't subscribed to any feeds on this server.", "feed_no_feed": "You haven't subscribed to any feeds on this server.",