Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
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);
            }
        }