예제 #1
0
        public async Task FlipAsync([Remainder] string input)
        {
            int    delay    = 15;
            string emote    = null;
            int    bet      = 0;
            string side     = null;
            var    userInfo = (IGuildUser)Context.User;
            string userName = null;

            Discord.Rest.RestUserMessage mainMessage = null;
            Embed embedBuilt = null;

            if (userInfo.Nickname != null)
            {
                userName = userInfo.Nickname;
            }
            else
            {
                userName = Context.User.Username;
            }

            var footer = new EmbedFooterBuilder
            {
                Text = "Cody by Ayla / Alsekwolf#0001"
            };
            var author = new EmbedAuthorBuilder
            {
                IconUrl = Context.User.GetAvatarUrl(),
                Name    = $"{userName} entered a game of coin flip."
            };
            var embed = new EmbedBuilder
            {
                Author    = author,
                Color     = Color.Magenta,
                Footer    = footer,
                Timestamp = DateTimeOffset.Now
            };

            if (!Services.CommandDelay.IncomingRequest(Context.User.Id.ToString(), delay))
            {
                string activeUser = _activeUsers.FirstOrDefault(s => s == Context.User.Id.ToString());
                if (activeUser == null)
                {
                    _activeUsers.Add(Context.User.Id.ToString());
                }
                if (activeUser != null)
                {
                    await Context.Message.DeleteAsync();

                    return;
                }

                embed.WithDescription(
                    $"please wait longer between *investing*. \nYour bet will be sent when the delay is up. \nReact with the stop emote to cancel.");
                embedBuilt  = embed.Build();
                mainMessage = await Context.Channel.SendMessageAsync(embed : embedBuilt);

                if (Emote.TryParse(StopEmote, out var stopEmoteParsed))
                {
                    await mainMessage.AddReactionAsync(stopEmoteParsed);
                }

                Services.CommandDelay.User tempUser = Services.CommandDelay.Users.FirstOrDefault(User => User.Username == Context.User.Id.ToString());
                try
                {
                    while ((DateTime.Now - tempUser.LastRequest).TotalSeconds <= delay)
                    {
                        await Task.Delay(1000);
                    }

                    int count = 0;
                    foreach (string y in _activeUsers.FindAll(x => x == Context.User.Id.ToString()))  // returns the value of all hits}
                    {
                        _activeUsers.Remove(y);
                        count++;
                    }

                    var userList = await mainMessage.GetReactionUsersAsync(stopEmoteParsed, int.MaxValue).FlattenAsync();

                    if (userList.Any(u => u.Id == Context.User.Id))
                    {
                        return;
                    }
                    await mainMessage.RemoveAllReactionsAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine("DelayCommand error: " + e.Message);
                    throw;
                }
            }

            var SQL      = new SQLFunctions.Main();
            var userData = SQL.LoadUserData(Context.User);

            if (input.ContainsAny(" "))
            {
                var splitInput = input.Split(' ');
                if (splitInput[0].All(char.IsDigit))
                {
                    bet  = Int32.Parse(splitInput[0]);
                    side = splitInput[1];
                }
                if (splitInput[1].All(char.IsDigit))
                {
                    bet  = Int32.Parse(splitInput[1]);
                    side = splitInput[0];
                }
                if (splitInput[0].ContainsAny("all"))
                {
                    bet  = userData.cash;
                    side = splitInput[1];
                }
                if (splitInput[1].ContainsAny("all"))
                {
                    bet  = userData.cash;
                    side = splitInput[0];
                }
                if (side.ContainsAny("head", "heads", "h"))
                {
                    side = "heads";
                }
                if (side.ContainsAny("tail", "tailss", "t"))
                {
                    side = "tails";
                }
            }
            else
            {
                if (input.All(char.IsDigit))
                {
                    bet  = Int32.Parse(input);
                    side = "heads";
                }

                if (input.ContainsAny("all"))
                {
                    bet  = userData.cash;
                    side = "heads";
                }
            }

            if (bet == 0)
            {
                embed.WithDescription($"You can't bet 0, that's not how this works!!'");
                embedBuilt = embed.Build();

                if (mainMessage != null)
                {
                    await mainMessage.ModifyAsync(msg => msg.Embed = embedBuilt);
                }
                else
                {
                    await Context.Channel.SendMessageAsync(embed : embedBuilt);
                }
                return;
            }
            if (side == null)
            {
                embed.WithDescription($"something went wrong, please try again.");
                embedBuilt = embed.Build();

                if (mainMessage != null)
                {
                    await mainMessage.ModifyAsync(msg => msg.Embed = embedBuilt);
                }
                else
                {
                    await Context.Channel.SendMessageAsync(embed : embedBuilt);
                }
                return;
            }

            if (userData.cash >= bet)
            {
                embed.WithAuthor($"{userName} spent ${bet} and chose {side}", Context.User.GetAvatarUrl());
                embed.WithDescription($"The coin spins.... {FlipEmote}");
                embedBuilt = embed.Build();

                if (mainMessage != null)
                {
                    await mainMessage.ModifyAsync(msg => msg.Embed = embedBuilt);
                }
                else
                {
                    mainMessage = await Context.Channel.SendMessageAsync(embed : embedBuilt);
                }

                await Task.Delay(2250);

                int randomNumber = RandomNumber.Between(0, 100);
                if (randomNumber > 50)
                {
                    if (side == "heads")
                    {
                        emote = TailsEmote;
                    }
                    else
                    {
                        emote = HeadsEmote;
                    }

                    embed.WithDescription($"The coin spins.... {emote} and **{userName}** lost it all... :c");
                    embedBuilt = embed.Build();

                    await mainMessage.ModifyAsync(msg => msg.Embed = embedBuilt);

                    userData.cash = userData.cash - bet;
                    SQL.SaveUserData(Context.User, userData);
                }

                if (randomNumber < 50)
                {
                    if (side == "heads")
                    {
                        emote = HeadsEmote;
                    }
                    else
                    {
                        emote = TailsEmote;
                    }
                    embed.WithDescription($"The coin spins.... {emote} and **{userName}** won **${bet}** c:");
                    embedBuilt = embed.Build();

                    await mainMessage.ModifyAsync(msg => msg.Embed = embedBuilt);

                    userData.cash = userData.cash + bet;
                    SQL.SaveUserData(Context.User, userData);
                }
            }
            else
            {
                embed.WithDescription($"you probably don't have enough cash. \nYou currently have **${userData.cash}**");
                embedBuilt = embed.Build();

                if (mainMessage != null)
                {
                    await mainMessage.ModifyAsync(msg => msg.Embed = embedBuilt);
                }
                else
                {
                    await Context.Channel.SendMessageAsync(embed : embedBuilt);
                }
            }
        }
예제 #2
0
파일: Bot.cs 프로젝트: AllenKaplan/ForkBot
        public async Task HandleReact(Cacheable <IUserMessage, ulong> cache, ISocketMessageChannel channel, SocketReaction react)
        {
            if ((react.UserId != client.CurrentUser.Id))
            {
                string tag = null;
                Discord.Rest.RestUserMessage message = null;
                foreach (IMessage msg in Var.awaitingHelp)
                {
                    if (msg.Id == cache.Value.Id)
                    {
                        if (react.Emote.Name == Constants.Emotes.HAMMER.Name)
                        {
                            tag = "[MOD]";
                        }
                        else if (react.Emote.Name == Constants.Emotes.DIE.Name)
                        {
                            tag = "[FUN]";
                        }
                        else if (react.Emote.Name == Constants.Emotes.QUESTION.Name)
                        {
                            tag = "[OTHER]";
                        }
                        else if (react.Emote.Name == Constants.Emotes.BRADY.Name)
                        {
                            tag = "[BRADY]";
                        }
                        message = msg as Discord.Rest.RestUserMessage;
                        Var.awaitingHelp.Remove(msg);
                        break;
                    }
                }

                if (tag != null)
                {
                    JEmbed emb = new JEmbed();

                    emb.Author.Name = "ForkBot Commands";
                    emb.ColorStripe = Constants.Colours.DEFAULT_COLOUR;

                    foreach (CommandInfo c in commands.Commands)
                    {
                        string cTag = null;
                        if (c.Summary != null)
                        {
                            if (c.Summary.StartsWith("["))
                            {
                                int index;
                                index = c.Summary.IndexOf(']') + 1;
                                cTag  = c.Summary.Substring(0, index);
                            }
                            else
                            {
                                cTag = "[OTHER]";
                            }
                        }


                        if (cTag != null && cTag == tag)
                        {
                            emb.Fields.Add(new JEmbedField(x =>
                            {
                                string header = c.Name;
                                foreach (String alias in c.Aliases)
                                {
                                    if (alias != c.Name)
                                    {
                                        header += " (;" + alias + ") ";
                                    }
                                }
                                foreach (Discord.Commands.ParameterInfo parameter in c.Parameters)
                                {
                                    header += " [" + parameter.Name + "]";
                                }
                                x.Header = header;
                                x.Text   = c.Summary.Replace(tag + " ", "");
                            }));
                        }
                    }
                    await message.ModifyAsync(x => x.Embed = emb.Build());

                    await message.RemoveAllReactionsAsync();
                }
            }
        }