public async Task StartBlackjack(EventContext e, int bet) { using (var context = new MikiContext()) { User user = await context.Users.FindAsync(e.Author.Id.ToDbLong()); await user.AddCurrencyAsync(-bet, e.Channel); await context.SaveChangesAsync(); } BlackjackManager bm = new BlackjackManager(); IDiscordMessage message = await bm.CreateEmbed(e) .ToEmbed() .SendToChannel(e.Channel); Framework.Events.CommandMap map = new Framework.Events.CommandMap(); SimpleCommandHandler c = new SimpleCommandHandler(map); c.AddPrefix(""); c.AddCommand(new CommandEvent("hit") .Default(async(ec) => await OnBlackjackHit(ec, bm, message, bet))); c.AddCommand(new CommandEvent("stand") .SetAliases("knock", "stay", "stop") .Default(async(ec) => await OnBlackjackHold(ec, bm, message, bet))); e.EventSystem.GetCommandHandler <SessionBasedCommandHandler>().AddSession( new CommandSession() { UserId = e.Author.Id, ChannelId = e.Channel.Id }, c, new TimeSpan(1, 0, 0)); }
// TODO: probable rewrite at some point public async Task ValidateBet(EventContext e, Func <EventContext, int, Task> callback = null, int maxBet = 1000000) { ArgObject arg = e.Arguments.FirstOrDefault(); if (arg != null) { const int noAskLimit = 10000; using (MikiContext context = new MikiContext()) { User user = await context.Users.FindAsync(e.Author.Id.ToDbLong()); if (user == null) { // TODO: add user null error return; } string checkArg = arg.Argument; if (int.TryParse(checkArg, out int bet)) { } else if (checkArg.ToLower() == "all" || checkArg == "*") { bet = user.Currency > maxBet ? maxBet : user.Currency; } else { e.ErrorEmbed(e.GetResource("miki_error_gambling_parse_error")) .ToEmbed().QueueToChannel(e.Channel); return; } if (bet < 1) { e.ErrorEmbed(e.GetResource("miki_error_gambling_zero_or_less")) .ToEmbed().QueueToChannel(e.Channel); } else if (bet > user.Currency) { e.ErrorEmbed(e.GetResource("miki_mekos_insufficient")) .ToEmbed().QueueToChannel(e.Channel); } else if (bet > maxBet) { e.ErrorEmbed($"you cannot bet more than {maxBet} mekos!") .ToEmbed().QueueToChannel(e.Channel); return; } else if (bet > noAskLimit) { IDiscordMessage confirmationMessage = null; Framework.Events.CommandMap map = new Framework.Events.CommandMap(); map.AddCommand(new CommandEvent() { Name = "yes", ProcessCommand = async(ec) => { await confirmationMessage.DeleteAsync(); await ValidateGlitch(ec, callback, bet); } }); SimpleCommandHandler commandHandler = new SimpleCommandHandler(map); commandHandler.AddPrefix(""); e.EventSystem.GetCommandHandler <SessionBasedCommandHandler>() .AddSession(new CommandSession { ChannelId = e.Channel.Id, UserId = e.Author.Id }, commandHandler, new TimeSpan(0, 2, 0)); EmbedBuilder embed = Utils.Embed; embed.Description = $"Are you sure you want to bet **{bet}**? You currently have `{user.Currency}` mekos.\n\nType `yes` to confirm."; embed.Color = new Color(0.4f, 0.6f, 1f); confirmationMessage = await embed.ToEmbed().SendToChannel(e.Channel); } else { if (callback != null) { await callback(e, bet); } } } } else { e.ErrorEmbed(e.GetResource("miki_error_gambling_no_arg")) .ToEmbed().QueueToChannel(e.Channel); } }