public static async Task <IVoteable> DoVote(List <IVoteable> options, int seconds) { Dictionary <Emoji, IVoteable> tracker = new Dictionary <Emoji, IVoteable>(); EmbedBuilder embed = new EmbedBuilder() { Color = new Color(0, 100, 255), Title = "Vote:" }; //string mes = "|"; foreach (IVoteable option in options) { if (!tracker.ContainsKey(option.GetEmote())) { tracker.Add(option.GetEmote(), option); //mes += $" {option.GetName()} = {option.GetEmote()} |"; embed.AddField((efb) => { efb.Name = option.GetName(); efb.Value = option.GetEmote(); }); } } RestUserMessage msg = await VoopAI.gameChannel.SendMessageAsync(embed : embed.Build()); List <Emoji> distinct = new List <Emoji>(); Emoji c = null; try { foreach (Emoji e in tracker.Keys) { c = e; await msg.AddReactionAsync(e); } } catch (System.Exception e) { await(gameChannel.SendMessageAsync(e.ToString())); await(gameChannel.SendMessageAsync(c.ToString())); } Thread.Sleep(seconds * 1000); IEmote chosen = tracker.Keys.PickRandom(); int top = 0; IUserMessage liveMessage = (IUserMessage)await VoopAI.gameChannel.GetMessageAsync(msg.Id); foreach (KeyValuePair <IEmote, ReactionMetadata> pair in liveMessage.Reactions) { //await VoopAI.gameChannel.SendMessageAsync($"DEBUG: {pair.Key.Name} = {pair.Value.ReactionCount}"); if (pair.Value.ReactionCount > top) { top = pair.Value.ReactionCount; chosen = pair.Key; } } IVoteable obj = tracker[new Emoji(chosen.Name)]; await VoopAI.gameChannel.SendMessageAsync($"You have chosen [ {obj.GetName()} ]"); Thread.Sleep(5000); return(obj); }