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); } } }
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(); } } }