Added lossback and also found some issues with rakeback

This commit is contained in:
barelyprofessional
2025-09-02 02:14:21 -05:00
parent c82aeaa7d4
commit f2daa85c9c
3 changed files with 76 additions and 4 deletions

View File

@@ -134,15 +134,15 @@ public class RakebackCommand : ICommand
offset = mostRecentRakeback.TimeUnixEpochSeconds;
}
var wagers = db.Wagers.Where(w => w.Gambler == gambler && w.TimeUnixEpochSeconds > offset);
if (!await wagers.AnyAsync(ctx))
var wagers = await db.Wagers.Where(w => w.Gambler == gambler && w.TimeUnixEpochSeconds > offset).ToListAsync(ctx);
if (wagers.Count == 0)
{
await botInstance.SendChatMessageAsync(
$"@{user.KfUsername}, you haven't wagered since your last rakeback.", true);
return;
}
var wagered = await wagers.SumAsync(w => w.WagerAmount, ctx);
var wagered = wagers.Sum(w => w.WagerAmount);
var rakeback = wagered * (decimal)(settings[BuiltIn.Keys.MoneyRakebackPercentage].ToType<float>() / 100.0);
var minimumRakeback = settings[BuiltIn.Keys.MoneyRakebackMinimumAmount].ToType<decimal>();
if (rakeback < minimumRakeback)
@@ -152,5 +152,54 @@ public class RakebackCommand : ICommand
}
await gambler!.ModifyBalance(rakeback, TransactionSourceEventType.Rakeback, "Rakeback claimed by gambler",
ct: ctx);
await botInstance.SendChatMessageAsync($"@{user.KfUsername}, the hostess has given you {await rakeback.FormatKasinoCurrencyAsync()} rakeback", true);
}
}
[KasinoCommand]
public class LossbackCommand : ICommand
{
public List<Regex> Patterns => [
new Regex(@"^lossback", RegexOptions.IgnoreCase)
];
public string? HelpText => "Collect your lossback";
public UserRight RequiredRight => UserRight.Loser;
public TimeSpan Timeout => TimeSpan.FromSeconds(10);
public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments,
CancellationToken ctx)
{
await using var db = new ApplicationDbContext();
var gambler = await user.GetGamblerEntity(ct: ctx);
var settings = await SettingsProvider.GetMultipleValuesAsync([
BuiltIn.Keys.MoneyLossbackPercentage, BuiltIn.Keys.MoneyLossbackMinimumAmount
]);
var mostRecentLossback = await db.Transactions.LastOrDefaultAsync(tx =>
tx.EventSource == TransactionSourceEventType.Lossback && tx.Gambler == gambler, cancellationToken: ctx);
long offset = 0;
if (mostRecentLossback != null)
{
offset = mostRecentLossback.TimeUnixEpochSeconds;
}
var wagers = await db.Wagers.Where(w => w.Gambler == gambler && w.TimeUnixEpochSeconds > offset && w.Multiplier < 1).ToListAsync(ctx);
if (wagers.Count == 0)
{
await botInstance.SendChatMessageAsync(
$"@{user.KfUsername}, you don't have any losses to juice back.", true);
return;
}
var wagered = wagers.Sum(wager => Math.Abs(wager.WagerEffect));
var lossback = wagered * (decimal)(settings[BuiltIn.Keys.MoneyLossbackPercentage].ToType<float>() / 100.0);
var minimumLossback = settings[BuiltIn.Keys.MoneyLossbackMinimumAmount].ToType<decimal>();
if (lossback < minimumLossback)
{
await botInstance.SendChatMessageAsync($"@{user.KfUsername}, your lossback payout of {await lossback.FormatKasinoCurrencyAsync()} is below the minimum amount of {await minimumLossback.FormatKasinoCurrencyAsync()}", true);
return;
}
await gambler!.ModifyBalance(lossback, TransactionSourceEventType.Lossback, "Lossback claimed by gambler",
ct: ctx);
await botInstance.SendChatMessageAsync($"@{user.KfUsername}, the hostess has given you {await lossback.FormatKasinoCurrencyAsync()} lossback", true);
}
}