Modified Keno with standardized red/green colors, fixed waiting for chat message ID in the Keno animation and reduced delay to 500 msec for each frame update

This commit is contained in:
barelyprofessional
2025-10-06 22:59:33 -05:00
parent a396a1dcff
commit 605190d325

View File

@@ -3,6 +3,7 @@ using KfChatDotNetBot.Extensions;
using KfChatDotNetBot.Models; using KfChatDotNetBot.Models;
using KfChatDotNetBot.Models.DbModels; using KfChatDotNetBot.Models.DbModels;
using KfChatDotNetBot.Services; using KfChatDotNetBot.Services;
using KfChatDotNetBot.Settings;
using KfChatDotNetWsClient.Models.Events; using KfChatDotNetWsClient.Models.Events;
namespace KfChatDotNetBot.Commands; namespace KfChatDotNetBot.Commands;
@@ -98,9 +99,7 @@ public class KenoCommand : ICommand
return; return;
} }
var wager = Convert.ToDecimal(amount.Value); var wager = Convert.ToDecimal(amount.Value);
var numbers = 0; var numbers = !arguments.TryGetValue("numbers", out var userNumbers) ? 10 : Convert.ToInt32(userNumbers.Value); //if user just enters !keno <wager>
numbers = !arguments.TryGetValue("numbers", out var userNumbers) ? 10 : Convert.ToInt32(userNumbers.Value); //if user just enters !keno <wager>
var gambler = await Money.GetGamblerEntityAsync(user.Id, ct: ctx); var gambler = await Money.GetGamblerEntityAsync(user.Id, ct: ctx);
if (gambler == null) if (gambler == null)
throw new InvalidOperationException($"Caught a null when retrieving gambler for {user.KfUsername}"); throw new InvalidOperationException($"Caught a null when retrieving gambler for {user.KfUsername}");
@@ -137,11 +136,15 @@ public class KenoCommand : ICommand
var payoutMulti = payoutMultipliers[numbers - 1, matches.Count]; var payoutMulti = payoutMultipliers[numbers - 1, matches.Count];
await AnimatedDisplayTable(playerNumbers, casinoNumbers, matches, botInstance); await AnimatedDisplayTable(playerNumbers, casinoNumbers, matches, botInstance);
var colors =
await SettingsProvider.GetMultipleValuesAsync([
BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor
]);
if (payoutMulti == 0) //you lose if (payoutMulti == 0) //you lose
{ {
await Money.NewWagerAsync(gambler.Id, wager, -wager, WagerGame.Keno, ct: ctx); await Money.NewWagerAsync(gambler.Id, wager, -wager, WagerGame.Keno, ct: ctx);
await botInstance.SendChatMessageAsync($"{user.FormatUsername()}, you [COLOR=RED]lost {wager}[/COLOR]. Your balance is now: {await gambler.Balance.FormatKasinoCurrencyAsync()}.", true); await botInstance.SendChatMessageAsync($"{user.FormatUsername()}, you [color={colors[BuiltIn.Keys.KiwiFarmsRedColor].Value}]lost {wager}[/color]. Your balance is now: {await gambler.Balance.FormatKasinoCurrencyAsync()}.", true);
return; return;
} }
@@ -150,7 +153,7 @@ public class KenoCommand : ICommand
// Required to avoid compiler errors when trying to format it in the win message // Required to avoid compiler errors when trying to format it in the win message
var newBalance = gambler.Balance + win; var newBalance = gambler.Balance + win;
await Money.NewWagerAsync(gambler.Id, wager, wager * (decimal)payoutMulti, WagerGame.Keno, ct: ctx); await Money.NewWagerAsync(gambler.Id, wager, wager * (decimal)payoutMulti, WagerGame.Keno, ct: ctx);
await botInstance.SendChatMessageAsync($"{user.FormatUsername()}, you [COLOR=GREEN]won {wager * (decimal)payoutMulti} with a {payoutMulti}x multi![/COLOR]. Your balance is now: {await newBalance.FormatKasinoCurrencyAsync()}.", true); await botInstance.SendChatMessageAsync($"{user.FormatUsername()}, you [color={colors[BuiltIn.Keys.KiwiFarmsGreenColor].Value}]won {wager * (decimal)payoutMulti} with a {payoutMulti}x multi![/color]. Your balance is now: {await newBalance.FormatKasinoCurrencyAsync()}.", true);
} }
private async Task AnimatedDisplayTable(List<int> playerNumbers, List<int> casinoNumbers, List<int> matches, ChatBot botInstance) private async Task AnimatedDisplayTable(List<int> playerNumbers, List<int> casinoNumbers, List<int> matches, ChatBot botInstance)
@@ -171,7 +174,14 @@ public class KenoCommand : ICommand
} }
var msg = await botInstance.SendChatMessageAsync(displayMessage, true); var msg = await botInstance.SendChatMessageAsync(displayMessage, true);
await Task.Delay(1500); var i = 0;
while (msg.ChatMessageId == null)
{
i++;
if (msg.Status is SentMessageTrackerStatus.NotSending or SentMessageTrackerStatus.Lost) return;
if (i > 60) return;
await Task.Delay(100);
}
//FIRST FRAME 11111111111111111111111111111 //FIRST FRAME 11111111111111111111111111111
for (var frame = 0; frame < 10; frame++) //1 frame per casino number for (var frame = 0; frame < 10; frame++) //1 frame per casino number
{ {
@@ -189,7 +199,8 @@ public class KenoCommand : ICommand
displayMessage += MatchRevealDisplay; displayMessage += MatchRevealDisplay;
} }
else{ else
{
displayMessage += CasinoNumberDisplay; displayMessage += CasinoNumberDisplay;
} }
@@ -201,7 +212,7 @@ public class KenoCommand : ICommand
displayMessage += "[br]"; displayMessage += "[br]";
} }
await botInstance.KfClient.EditMessageAsync(msg.ChatMessageId!.Value, displayMessage); await botInstance.KfClient.EditMessageAsync(msg.ChatMessageId!.Value, displayMessage);
await Task.Delay(1000); await Task.Delay(500);
} }
} }
private List<int> GenerateKenoNumbers(int size, GamblerDbModel gambler) private List<int> GenerateKenoNumbers(int size, GamblerDbModel gambler)