Added missing cancellation token support to Keno and also experimenting with the table grid for it

This commit is contained in:
barelyprofessional
2026-05-10 22:27:19 -05:00
parent 32bef9f8e0
commit 1cb0ff21e4
+8 -13
View File
@@ -39,10 +39,12 @@ public class KenoCommand : ICommand
private const string BlankSpaceDisplay = "⬛"; private const string BlankSpaceDisplay = "⬛";
private SentMessageTrackerModel? _kenoTable; private SentMessageTrackerModel? _kenoTable;
private CancellationToken _ct;
public async Task RunCommand(ChatBot botInstance, BotCommandMessageModel message, UserDbModel user, GroupCollection arguments, public async Task RunCommand(ChatBot botInstance, BotCommandMessageModel message, UserDbModel user, GroupCollection arguments,
CancellationToken ctx) CancellationToken ctx)
{ {
_ct = ctx;
var settings = await SettingsProvider.GetMultipleValuesAsync([ var settings = await SettingsProvider.GetMultipleValuesAsync([
BuiltIn.Keys.KasinoGameDisabledMessageCleanupDelay, BuiltIn.Keys.KasinoKenoCleanupDelay, BuiltIn.Keys.KasinoGameDisabledMessageCleanupDelay, BuiltIn.Keys.KasinoKenoCleanupDelay,
BuiltIn.Keys.KasinoKenoFrameDelay, BuiltIn.Keys.KasinoKenoEnabled BuiltIn.Keys.KasinoKenoFrameDelay, BuiltIn.Keys.KasinoKenoEnabled
@@ -185,7 +187,7 @@ public class KenoCommand : ICommand
{ "classic", payoutMultipliersClassic} { "classic", payoutMultipliersClassic}
}; };
_playerNumbers = GenerateKenoNumbers(numbers, gambler); _playerNumbers = GenerateKenoNumbers(numbers, gambler);
_casinoNumbers = GenerateKenoNumbers(10, gambler, true); _casinoNumbers = GenerateKenoNumbers(10, gambler, true);
var matches = _playerNumbers.Intersect(_casinoNumbers).ToList(); var matches = _playerNumbers.Intersect(_casinoNumbers).ToList();
var payoutMulti = payoutMultipliers[difficultyString][numbers - 1, matches.Count]; var payoutMulti = payoutMultipliers[difficultyString][numbers - 1, matches.Count];
@@ -249,17 +251,10 @@ public class KenoCommand : ICommand
displayMessage += "[br]"; displayMessage += "[br]";
} }
_kenoTable = await botInstance.SendChatMessageAsync(displayMessage, true); _kenoTable = await botInstance.SendChatMessageAsync("[size=70]" + displayMessage.GridToTable(), true);
var i = 0; var sent = await botInstance.WaitForChatMessageAsync(_kenoTable, patience: TimeSpan.FromSeconds(30), ct: _ct);
while (_kenoTable.ChatMessageUuid == null)
{
i++;
if (_kenoTable.Status is SentMessageTrackerStatus.NotSending or SentMessageTrackerStatus.Lost) return;
if (i > 60) return;
await Task.Delay(100);
}
if (_kenoTable.ChatMessageUuid == null) if (!sent || _kenoTable.ChatMessageUuid == null)
{ {
throw new Exception($"_kenoTable chat message ID never got populated. Tracker status is: {_kenoTable?.Status}"); throw new Exception($"_kenoTable chat message ID never got populated. Tracker status is: {_kenoTable?.Status}");
} }
@@ -293,8 +288,8 @@ public class KenoCommand : ICommand
} }
displayMessage += "[br]"; displayMessage += "[br]";
} }
await botInstance.KfClient.EditMessageAsync(_kenoTable.ChatMessageUuid, displayMessage); await botInstance.KfClient.EditMessageAsync(_kenoTable.ChatMessageUuid, "[size=70]" + displayMessage.GridToTable());
await Task.Delay(frameDelay); await Task.Delay(frameDelay, _ct);
if (displayMessage.Length <= 79 && displayMessage.Contains(BlankSpaceDisplay) && if (displayMessage.Length <= 79 && displayMessage.Contains(BlankSpaceDisplay) &&
(displayMessage.Contains(CasinoNumberDisplay) || displayMessage.Contains(MatchRevealDisplay) || (displayMessage.Contains(CasinoNumberDisplay) || displayMessage.Contains(MatchRevealDisplay) ||
frame == 9)) continue; //every board should have blank spaces and casino numbers or matches. player numbers might be hidden by matches frame == 9)) continue; //every board should have blank spaces and casino numbers or matches. player numbers might be hidden by matches