.feed will now properly add feeds to the database

This commit is contained in:
Toastie 2025-04-03 17:56:08 +13:00
parent 8f6ecff5af
commit 172b1ed5e6
Signed by: toastie_t0ast
GPG key ID: 0861BE54AD481DC7
4 changed files with 63 additions and 58 deletions

View file

@ -2,7 +2,12 @@
*a,c,f,r,o*
## [6.1.1] - 02.04.2025
## [6.1.2] - 03.04.2025
### Fixed
- Fixed `.feed` not adding new feeds to the database
## [6.1.1] - 03.04.2025
### Added
- Added some config options for .conf fish

View file

@ -4,7 +4,7 @@
<Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
<Version>6.1.1</Version>
<Version>6.1.2</Version>
<!-- Output/build -->
<RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>

View file

@ -53,6 +53,8 @@ public partial class Searches
[Priority(1)]
public async Task Feed(string url, ITextChannel? channel = null, [Leftover] string? message = null)
{
await ctx.Channel.TriggerTypingAsync();
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri)
|| (uri.Scheme != Uri.UriSchemeHttp && uri.Scheme != Uri.UriSchemeHttps))
{
@ -79,7 +81,7 @@ public partial class Searches
if (ctx.User is not IGuildUser gu || !gu.GuildPermissions.Administrator)
message = message?.SanitizeMentions(true);
var result = _service.AddFeed(ctx.Guild.Id, channel.Id, url, message);
var result = await _service.AddFeedAsync(ctx.Guild.Id, channel.Id, url, message);
if (result == FeedAddResult.Success)
{
await Response().Confirm(strs.feed_added).SendAsync();

View file

@ -241,7 +241,9 @@ public class FeedsService : IEService, IReadyExecutor
.ToList();
}
public FeedAddResult AddFeed(
private const int MAX_FEEDS = 10;
public async Task<FeedAddResult> AddFeedAsync(
ulong guildId,
ulong channelId,
string rssFeed,
@ -249,25 +251,24 @@ public class FeedsService : IEService, IReadyExecutor
{
ArgumentNullException.ThrowIfNull(rssFeed, nameof(rssFeed));
var fs = new FeedSub
{
ChannelId = channelId,
Url = rssFeed.Trim(),
Message = message
};
using var uow = _db.GetDbContext();
var feeds = uow.GetTable<FeedSub>()
.Where(x => x.GuildId == guildId)
.ToArray();
if (feeds.Any(x => x.Url.ToLower() == fs.Url.ToLower()))
await using var uow = _db.GetDbContext();
var feedUrl = rssFeed.Trim();
if (await uow.GetTable<FeedSub>().AnyAsyncLinqToDB(x => x.GuildId == guildId &&
x.Url.ToLower() == feedUrl.ToLower()))
return FeedAddResult.Duplicate;
if (feeds.Length >= 10)
var count = await uow.GetTable<FeedSub>().CountAsyncLinqToDB(x => x.GuildId == guildId);
if (count >= MAX_FEEDS)
return FeedAddResult.LimitReached;
uow.Add(fs);
uow.SaveChanges();
var fs = await uow.GetTable<FeedSub>()
.InsertWithOutputAsync(() => new FeedSub
{
GuildId = guildId,
ChannelId = channelId,
Url = feedUrl,
Message = message,
});
_subs.AddOrUpdate(fs.Url.ToLower(),
[fs],
@ -293,10 +294,7 @@ public class FeedsService : IEService, IReadyExecutor
var toRemove = items[index];
_subs.AddOrUpdate(toRemove.Url.ToLower(),
[],
(_, old) =>
{
return old.Where(x => x.Id != toRemove.Id).ToList();
});
(_, old) => { return old.Where(x => x.Id != toRemove.Id).ToList(); });
uow.Remove(toRemove);
uow.SaveChanges();