* Refactored some of the cleanup code

* Fixed blacklist issues due to code conversion from efcore to linq2db
* Fixed medusasearch not having a description
This commit is contained in:
Kwoth
2023-09-05 23:22:24 +00:00
parent dfbe1721f3
commit 9332c8a24c
6 changed files with 101 additions and 85 deletions

View File

@@ -1,5 +1,6 @@
#nullable disable
using LinqToDB;
using LinqToDB.Data;
using LinqToDB.EntityFrameworkCore;
using NadekoBot.Common.ModuleBehaviors;
using NadekoBot.Db;
@@ -96,6 +97,16 @@ public sealed class BlacklistService : IExecOnMessage
Type = type,
});
if (type == BlacklistType.User)
{
await uow.GetTable<DiscordUser>()
.Where(x => x.UserId == id)
.UpdateAsync(_ => new()
{
CurrencyAmount = 0
});
}
Reload();
}
@@ -109,27 +120,23 @@ public sealed class BlacklistService : IExecOnMessage
Reload();
}
public void BlacklistUsers(IReadOnlyCollection<ulong> toBlacklist)
public async Task BlacklistUsers(IReadOnlyCollection<ulong> toBlacklist)
{
using (var uow = _db.GetDbContext())
await using var uow = _db.GetDbContext();
var bc = uow.GetTable<BlacklistEntry>();
await bc.BulkCopyAsync(toBlacklist.Select(uid => new BlacklistEntry
{
var bc = uow.Set<BlacklistEntry>();
bc.AddRange(toBlacklist.Select(x => new BlacklistEntry
{
ItemId = x,
Type = BlacklistType.User
}));
ItemId = uid,
Type = BlacklistType.User
}));
// todo check if blacklist works and removes currency
uow.GetTable<DiscordUser>()
.UpdateAsync(x => toBlacklist.Contains(x.UserId),
_ => new()
{
CurrencyAmount = 0
});
uow.SaveChanges();
}
var blList = toBlacklist.ToList();
await uow.GetTable<DiscordUser>()
.Where(x => blList.Contains(x.UserId))
.UpdateAsync(_ => new()
{
CurrencyAmount = 0
});
Reload();
}

View File

@@ -0,0 +1,60 @@
using LinqToDB;
using NadekoBot.Db.Models;
using NadekoBot.Services.Database.Models;
namespace Nadeko.Bot.Modules.Gambling.Gambling._Common;
public class GamblingCleanupService : IGamblingCleanupService, INService
{
private readonly DbService _db;
public GamblingCleanupService(DbService db)
{
_db = db;
}
public async Task DeleteWaifus()
{
await using var ctx = _db.GetDbContext();
await ctx.Set<WaifuInfo>().DeleteAsync();
await ctx.Set<WaifuItem>().DeleteAsync();
await ctx.Set<WaifuUpdate>().DeleteAsync();
await ctx.SaveChangesAsync();
}
public async Task DeleteWaifu(ulong userId)
{
await using var ctx = _db.GetDbContext();
await ctx.Set<WaifuUpdate>()
.Where(x => x.User.UserId == userId)
.DeleteAsync();
await ctx.Set<WaifuItem>()
.Where(x => x.WaifuInfo.Waifu.UserId == userId)
.DeleteAsync();
await ctx.Set<WaifuInfo>()
.Where(x => x.Claimer.UserId == userId)
.UpdateAsync(old => new WaifuInfo()
{
ClaimerId = null,
});
await ctx.Set<WaifuInfo>()
.Where(x => x.Waifu.UserId == userId)
.DeleteAsync();
await ctx.SaveChangesAsync();
}
public async Task DeleteCurrency()
{
await using var uow = _db.GetDbContext();
await uow.Set<DiscordUser>().UpdateAsync(_ => new DiscordUser()
{
CurrencyAmount = 0
});
await uow.Set<CurrencyTransaction>().DeleteAsync();
await uow.Set<PlantedCurrency>().DeleteAsync();
await uow.Set<BankUser>().DeleteAsync();
await uow.SaveChangesAsync();
}
}

View File

@@ -1,68 +1,8 @@
using LinqToDB;
using NadekoBot.Db.Models;
using NadekoBot.Services.Database.Models;
namespace Nadeko.Bot.Modules.Gambling.Gambling._Common;
namespace Nadeko.Bot.Modules.Gambling.Gambling._Common;
// todo organize
public interface IGamblingCleanupService
{
Task DeleteWaifus();
Task DeleteWaifu(ulong userId);
Task DeleteCurrency();
}
public class GamblingCleanupService : IGamblingCleanupService, INService
{
private readonly DbService _db;
public GamblingCleanupService(DbService db)
{
_db = db;
}
public async Task DeleteWaifus()
{
await using var ctx = _db.GetDbContext();
await ctx.Set<WaifuInfo>().DeleteAsync();
await ctx.Set<WaifuItem>().DeleteAsync();
await ctx.Set<WaifuUpdate>().DeleteAsync();
await ctx.SaveChangesAsync();
}
public async Task DeleteWaifu(ulong userId)
{
await using var ctx = _db.GetDbContext();
await ctx.Set<WaifuUpdate>()
.Where(x => x.User.UserId == userId)
.DeleteAsync();
await ctx.Set<WaifuItem>()
.Where(x => x.WaifuInfo.Waifu.UserId == userId)
.DeleteAsync();
await ctx.Set<WaifuInfo>()
.Where(x => x.Claimer.UserId == userId)
.UpdateAsync(old => new WaifuInfo()
{
ClaimerId = null,
});
await ctx.Set<WaifuInfo>()
.Where(x => x.Waifu.UserId == userId)
.DeleteAsync();
await ctx.SaveChangesAsync();
}
public async Task DeleteCurrency()
{
await using var uow = _db.GetDbContext();
await uow.Set<DiscordUser>().UpdateAsync(_ => new DiscordUser()
{
CurrencyAmount = 0
});
await uow.Set<CurrencyTransaction>().DeleteAsync();
await uow.Set<PlantedCurrency>().DeleteAsync();
await uow.Set<BankUser>().DeleteAsync();
await uow.SaveChangesAsync();
}
}

View File

@@ -1,5 +1,6 @@
#nullable disable
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using NadekoBot.Db.Models;
using NadekoBot.Services.Database.Models;
@@ -481,10 +482,10 @@ public abstract class NadekoContext : DbContext
#endregion
}
// #if DEBUG
// private static readonly ILoggerFactory _debugLoggerFactory = LoggerFactory.Create(x => x.AddConsole());
//
// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
// => optionsBuilder.UseLoggerFactory(_debugLoggerFactory);
// #endif
#if DEBUG
private static readonly ILoggerFactory _debugLoggerFactory = LoggerFactory.Create(x => x.AddConsole());
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseLoggerFactory(_debugLoggerFactory);
#endif
}

View File

@@ -1358,6 +1358,9 @@ medusalist:
medusainfo:
- medusainfo
- meinfo
medusasearch:
- medusasearch
- mesearch
# Bank stuff
bankdeposit:
- deposit

View File

@@ -2282,6 +2282,11 @@ medusalist:
Read about the medusa system [here](https://nadekobot.readthedocs.io/en/latest/medusa/creating-a-medusa/)
args:
- ""
medusasearch:
desc: |-
Searches for medusae online given the search term
args:
- "shrine"
bankdeposit:
desc: "Deposits the specified amount of currency into the bank for later use."
args: