mirror of
https://github.com/barelyprofessional/KfChatDotNet.git
synced 2026-05-15 10:32:44 -04:00
Experimental untagged and also search any carousel command
This commit is contained in:
@@ -303,7 +303,9 @@ public class GetRandomImage : ICommand
|
|||||||
{
|
{
|
||||||
public List<Regex> Patterns => [
|
public List<Regex> Patterns => [
|
||||||
new Regex(@"^(?<key>\w+)$"),
|
new Regex(@"^(?<key>\w+)$"),
|
||||||
new Regex(@"^(?<key>\w+) (?<search>.+)")
|
new Regex(@"^(?<key>\w+) (?<search>.+)"),
|
||||||
|
new Regex("^untagged$", RegexOptions.IgnoreCase),
|
||||||
|
new Regex("i (?<search>.+)")
|
||||||
];
|
];
|
||||||
public string HelpText => "Get a random image";
|
public string HelpText => "Get a random image";
|
||||||
public UserRight RequiredRight => UserRight.Loser;
|
public UserRight RequiredRight => UserRight.Loser;
|
||||||
@@ -319,9 +321,16 @@ public class GetRandomImage : ICommand
|
|||||||
CancellationToken ctx)
|
CancellationToken ctx)
|
||||||
{
|
{
|
||||||
await using var db = new ApplicationDbContext();
|
await using var db = new ApplicationDbContext();
|
||||||
var key = arguments["key"].Value.ToLower();
|
var untagged = message.MessageRawHtmlDecoded.Equals("untagged", StringComparison.CurrentCultureIgnoreCase);
|
||||||
|
var keyKnown = arguments.TryGetValue("key", out var keyGroup);
|
||||||
|
var key = "everything";
|
||||||
|
if (keyKnown) key = keyGroup!.Value;
|
||||||
var searchTerm = arguments.TryGetValue("search", out var searchArg) ? searchArg.Value.ToLower().Trim() : null;
|
var searchTerm = arguments.TryGetValue("search", out var searchArg) ? searchArg.Value.ToLower().Trim() : null;
|
||||||
var images = db.Images.Where(i => i.Key == key);
|
var images = db.Images.AsQueryable();
|
||||||
|
if (keyKnown)
|
||||||
|
{
|
||||||
|
images = images.Where(i => i.Key == key);
|
||||||
|
}
|
||||||
if (!await images.AnyAsync(ctx))
|
if (!await images.AnyAsync(ctx))
|
||||||
{
|
{
|
||||||
RateLimitService.RemoveMostRecentEntry(user, this);
|
RateLimitService.RemoveMostRecentEntry(user, this);
|
||||||
@@ -341,6 +350,12 @@ public class GetRandomImage : ICommand
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
var selection = await images.ToListAsync(ctx);
|
var selection = await images.ToListAsync(ctx);
|
||||||
|
// It's buried down here instead of right up the top since it needs to be a list first as SQLite doesn't have
|
||||||
|
// native support for JSON types so it won't be able to construct a query to see if it's empty using IQueryable
|
||||||
|
if (untagged)
|
||||||
|
{
|
||||||
|
selection = selection.Where(s => s.TagList.Count == 0).ToList();
|
||||||
|
}
|
||||||
if (!string.IsNullOrEmpty(searchTerm))
|
if (!string.IsNullOrEmpty(searchTerm))
|
||||||
{
|
{
|
||||||
var searchTokens = searchTerm.ToLower().Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
var searchTokens = searchTerm.ToLower().Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||||
@@ -369,14 +384,14 @@ public class GetRandomImage : ICommand
|
|||||||
db.Images.Update(image);
|
db.Images.Update(image);
|
||||||
await db.SaveChangesAsync(ctx);
|
await db.SaveChangesAsync(ctx);
|
||||||
TimeSpan? timeToDeletion = null;
|
TimeSpan? timeToDeletion = null;
|
||||||
if (key == "pigcube" && settings[BuiltIn.Keys.BotImagePigCubeSelfDestruct].ToBoolean())
|
if (image.Key == "pigcube" && settings[BuiltIn.Keys.BotImagePigCubeSelfDestruct].ToBoolean())
|
||||||
{
|
{
|
||||||
timeToDeletion = TimeSpan.FromMilliseconds(image.Url == settings[BuiltIn.Keys.BotImageInvertedCubeUrl].Value
|
timeToDeletion = TimeSpan.FromMilliseconds(image.Url == settings[BuiltIn.Keys.BotImageInvertedCubeUrl].Value
|
||||||
? settings[BuiltIn.Keys.BotImageInvertedPigCubeSelfDestructDelay].ToType<int>()
|
? settings[BuiltIn.Keys.BotImageInvertedPigCubeSelfDestructDelay].ToType<int>()
|
||||||
: new Random().Next(settings[BuiltIn.Keys.BotImagePigCubeSelfDestructMin].ToType<int>(),
|
: new Random().Next(settings[BuiltIn.Keys.BotImagePigCubeSelfDestructMin].ToType<int>(),
|
||||||
settings[BuiltIn.Keys.BotImagePigCubeSelfDestructMax].ToType<int>()));
|
settings[BuiltIn.Keys.BotImagePigCubeSelfDestructMax].ToType<int>()));
|
||||||
}
|
}
|
||||||
else if (key is "chink" or "sloppa" && settings[BuiltIn.Keys.BotImageChinkSelfDestruct].ToBoolean())
|
else if (image.Key is "chink" or "sloppa" && settings[BuiltIn.Keys.BotImageChinkSelfDestruct].ToBoolean())
|
||||||
{
|
{
|
||||||
RateLimitService.AddEntry(user, this, message.MessageRawHtmlDecoded);
|
RateLimitService.AddEntry(user, this, message.MessageRawHtmlDecoded);
|
||||||
timeToDeletion = TimeSpan.FromMilliseconds(settings[BuiltIn.Keys.BotImageChinkSelfDestructDelay].ToType<int>());
|
timeToDeletion = TimeSpan.FromMilliseconds(settings[BuiltIn.Keys.BotImageChinkSelfDestructDelay].ToType<int>());
|
||||||
|
|||||||
Reference in New Issue
Block a user