Enabling/disabling gamba games with dynamic settting lookup. (#53)

This commit is contained in:
CrackmaticSoftware
2026-01-28 04:28:49 +01:00
committed by GitHub
parent 2709b3054c
commit 2179d59edd

View File

@@ -76,30 +76,6 @@ public class TempExcludeCommand : ICommand
} }
} }
internal record KasinoGameSetting(WagerGame Game, string SettingKey, string Alias);
internal static class KasinoGameSettingMap
{
internal static readonly IReadOnlyList<KasinoGameSetting> All = new List<KasinoGameSetting>
{
new(WagerGame.GuessWhatNumber, BuiltIn.Keys.KasinoGuessWhatNumberEnabled, "guesswhatnumber"),
new(WagerGame.Dice, BuiltIn.Keys.KasinoDiceEnabled, "dice"),
new(WagerGame.Limbo, BuiltIn.Keys.KasinoLimboEnabled, "limbo"),
new(WagerGame.Mines, BuiltIn.Keys.KasinoMinesEnabled, "mines"),
new(WagerGame.Wheel, BuiltIn.Keys.KasinoWheelEnabled, "wheel"),
new(WagerGame.Blackjack, BuiltIn.Keys.KasinoBlackjackEnabled, "blackjack"),
new(WagerGame.Planes, BuiltIn.Keys.KasinoPlanesEnabled, "planes"),
new(WagerGame.LambChop, BuiltIn.Keys.KasinoLambchopEnabled, "lambchop"),
new(WagerGame.Keno, BuiltIn.Keys.KasinoKenoEnabled, "keno"),
new(WagerGame.CoinFlip, BuiltIn.Keys.KasinoCoinflipEnabled, "coinflip"),
new(WagerGame.Slots, BuiltIn.Keys.KasinoSlotsEnabled, "slots"),
new(WagerGame.Plinko, BuiltIn.Keys.KasinoPlinkoEnabled, "plinko")
};
internal static KasinoGameSetting? FindByAlias(string alias) =>
All.FirstOrDefault(g =>
g.Alias.Equals(alias, StringComparison.OrdinalIgnoreCase));
}
public class KasinoGameToggleCommand : ICommand public class KasinoGameToggleCommand : ICommand
{ {
public List<Regex> Patterns => [ public List<Regex> Patterns => [
@@ -121,29 +97,39 @@ public class KasinoGameToggleCommand : ICommand
return; return;
} }
var gameName = gameArg.Value.ToLower(); var gameName = gameArg.Value;
var action = actionArg.Value.ToLower(); var action = actionArg.Value.ToLower();
var shouldEnable = action == "enable"; var shouldEnable = action == "enable";
var status = shouldEnable ? "enabled" : "disabled"; var status = shouldEnable ? "enabled" : "disabled";
await using var db = new ApplicationDbContext();
var gameSettingPattern = new Regex(@"^Kasino\.(?<game>\w+)\.Enabled$", RegexOptions.IgnoreCase);
var allGameSettings = await db.Settings
.Where(s => s.Key.StartsWith("Kasino.") && s.Key.EndsWith(".Enabled"))
.ToListAsync(ctx);
// Handle "all" games // Handle "all" games
if (gameName == "all") if (gameName.Equals("all", StringComparison.OrdinalIgnoreCase))
{ {
foreach (var gameInfo in KasinoGameSettingMap.All) foreach (var setting in allGameSettings)
{ {
await SettingsProvider.SetValueAsBooleanAsync(gameInfo.SettingKey, shouldEnable); await SettingsProvider.SetValueAsBooleanAsync(setting.Key, shouldEnable);
} }
await botInstance.SendChatMessageAsync( await botInstance.SendChatMessageAsync(
$"{user.FormatUsername()}, all {KasinoGameSettingMap.All.Count} Kasino games have been {status}.", true); $"{user.FormatUsername()}, all {allGameSettings.Count} Kasino games have been {status}.", true);
return; return;
} }
// Handle individual game // Handle individual game - find matching setting key
var gameInfoMap = KasinoGameSettingMap.FindByAlias(gameName); var matchedSetting = allGameSettings.FirstOrDefault(s =>
{
var match = gameSettingPattern.Match(s.Key);
return match.Success && match.Groups["game"].Value.Equals(gameName, StringComparison.OrdinalIgnoreCase);
});
if (gameInfoMap is null) if (matchedSetting is null)
{ {
await botInstance.SendChatMessageAsync( await botInstance.SendChatMessageAsync(
$"{user.FormatUsername()}, unknown game '{gameName}'. Use '!admin kasino games' to see available games, or use 'all' to toggle all games.", $"{user.FormatUsername()}, unknown game '{gameName}'. Use '!admin kasino games' to see available games, or use 'all' to toggle all games.",
@@ -151,9 +137,10 @@ public class KasinoGameToggleCommand : ICommand
return; return;
} }
await SettingsProvider.SetValueAsBooleanAsync(gameInfoMap.SettingKey, shouldEnable); await SettingsProvider.SetValueAsBooleanAsync(matchedSetting.Key, shouldEnable);
var gameDisplayName = gameInfoMap.Game.Humanize(); var match = gameSettingPattern.Match(matchedSetting.Key);
var gameDisplayName = match.Groups["game"].Value.Humanize();
await botInstance.SendChatMessageAsync( await botInstance.SendChatMessageAsync(
$"{user.FormatUsername()}, {gameDisplayName} has been {status}.", true); $"{user.FormatUsername()}, {gameDisplayName} has been {status}.", true);
@@ -175,25 +162,37 @@ public class KasinoGameListCommand : ICommand
CancellationToken ctx) CancellationToken ctx)
{ {
var response = $"{user.FormatUsername()}, Kasino games:[br]"; var response = $"{user.FormatUsername()}, Kasino games:[br]";
var colors = var colors = await SettingsProvider.GetMultipleValuesAsync([
await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.KiwiFarmsGreenColor,
BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor BuiltIn.Keys.KiwiFarmsRedColor
]); ]);
foreach (var game in KasinoGameSettingMap.All await using var db = new ApplicationDbContext();
.OrderBy(g => g.Game.ToString())) var gameSettingPattern = new Regex(@"^Kasino\.(?<game>\w+)\.Enabled$", RegexOptions.IgnoreCase);
var allGameSettings = await db.Settings
.Where(s => s.Key.StartsWith("Kasino.") && s.Key.EndsWith(".Enabled"))
.ToListAsync(ctx);
var orderedSettings = allGameSettings.OrderBy(s =>
{ {
var isEnabled = (await SettingsProvider var match = gameSettingPattern.Match(s.Key);
.GetValueAsync(game.SettingKey)) return match.Groups["game"].Value;
.ToBoolean(); });
foreach (var setting in orderedSettings)
{
var isEnabled = setting.Value?.Equals("true", StringComparison.OrdinalIgnoreCase) ?? false;
var match = gameSettingPattern.Match(setting.Key);
var gameName = match.Groups["game"].Value.Humanize();
var status = isEnabled var status = isEnabled
? $"[B][COLOR={colors[BuiltIn.Keys.KiwiFarmsGreenColor].Value}]ENABLED[/COLOR][/B]" ? $"[B][COLOR={colors[BuiltIn.Keys.KiwiFarmsGreenColor].Value}]ENABLED[/COLOR][/B]"
: $"[B][COLOR={colors[BuiltIn.Keys.KiwiFarmsRedColor].Value}]DISABLED[/COLOR][/B]"; : $"[B][COLOR={colors[BuiltIn.Keys.KiwiFarmsRedColor].Value}]DISABLED[/COLOR][/B]";
response += $"{game.Game.Humanize()}: {status}[br]"; response += $"{gameName}: {status}[br]";
} }
await botInstance.SendChatMessageAsync(response,true); await botInstance.SendChatMessageAsync(response, true);
} }
} }