public static DiscordEmbedBuilder AddField(this DiscordEmbedBuilder builder, Action <DiscordFieldBuilder> action)
        {
            DiscordFieldBuilder fieldBuilder = new DiscordFieldBuilder();

            action(fieldBuilder);
            return(builder.AddField(fieldBuilder));
        }
        public static DiscordEmbedBuilder GetEmbedBuilder(this Lobby lobby)
        {
            DiscordEmbedBuilder builder = new DiscordEmbedBuilder();

            builder.WithTitle($"Lobby #{lobby.LobbyNumber}");

            DiscordFieldBuilder powerLevelFieldBuilder = new DiscordFieldBuilder
            {
                Name     = "Power Level Range",
                Value    = $"{lobby.LobbyPowerLevel - lobby.CurrentDelta} - {lobby.LobbyPowerLevel + lobby.CurrentDelta}",
                IsInline = true
            };

            builder.AddField(powerLevelFieldBuilder);

            DiscordFieldBuilder classFieldBuilder = new DiscordFieldBuilder
            {
                Name     = "Class",
                Value    = $"{lobby.Class}",
                IsInline = true
            };

            builder.AddField(classFieldBuilder);

            DiscordFieldBuilder playersFieldBuilder = new DiscordFieldBuilder
            {
                Name     = "Players",
                Value    = string.Join('\n', lobby.Players.Select(e => (Program.Client.GetUserAsync(e.DiscordId).Result).Mention)),
                IsInline = false
            };

            builder.AddField(playersFieldBuilder);

            builder.Footer = new DiscordEmbedBuilder.EmbedFooter();

            if (!lobby.IsFull)
            {
                builder.Footer.Text =
                    $"Queue Time Remaining: {lobby.LastUpdate.Add(TimeSpan.FromMinutes(20)) - DateTime.Now:mm\\:ss}";
            }

            return(builder);
        }
 public static DiscordEmbedBuilder AddField(this DiscordEmbedBuilder builder, DiscordFieldBuilder fieldBuilder)
 {
     return(builder.AddField(fieldBuilder.Name, fieldBuilder.Value.ToString(), fieldBuilder.IsInline));
 }
        private static async Task Client_ReactionAdded(MessageReactionAddEventArgs messageReactionAddEventArgs)
        {
            DiscordChannel channel = messageReactionAddEventArgs.Channel;

            try
            {
                if (channel.Id == 595219144488648704)
                {
                    DiscordMessage newUserMessage = await channel.GetMessageAsync(messageReactionAddEventArgs.Message.Id);

                    DiscordChannel registeredChannel = await Client.GetChannelAsync(588806681303973931);

                    if (!File.Exists(Path.Combine(Globals.AppPath, "Registrations", $"{newUserMessage.Id}")))
                    {
                        return;
                    }

                    if (newUserMessage.Reactions.FirstOrDefault(e => e.Emoji.Name == "\u2705")?.Count > 1)
                    {
                        string[] allRegLines = await File.ReadAllLinesAsync(Path.Combine(Globals.AppPath,
                                                                                         "Registrations",
                                                                                         $"{newUserMessage.Id}"));

                        ulong userId = Convert.ToUInt64(allRegLines[0]);

                        const decimal powerLevel = 2000;
                        await MySqlClient.RegisterPlayer(userId, 2000, allRegLines[1]);

                        const int classNum = 2;

                        DiscordGuild guild = await Client.GetGuildAsync(570743985530863649);

                        DiscordMember registeredUser = await guild.GetMemberAsync(userId);

                        await registeredUser.SendMessageAsync(
                            $"You have been approved! You have been placed in class {classNum}. " +
                            $"To jump into a set, head into #draft and use %join.");

                        await registeredUser.GrantRoleAsync(guild.GetRole(572537013949956105));


                        DiscordRole classOneRole   = guild.GetRole(600770643075661824);
                        DiscordRole classTwoRole   = guild.GetRole(600770814521901076);
                        DiscordRole classThreeRole = guild.GetRole(600770862307606542);
                        DiscordRole classFourRole  = guild.GetRole(600770905282576406);

                        try
                        {
                            switch (Matchmaker.GetClass(powerLevel))
                            {
                            case SdlClass.Zero:
                                break;

                            case SdlClass.One:
                                if (registeredUser.Roles.All(e => e.Id != classOneRole.Id))
                                {
                                    await registeredUser.GrantRoleAsync(classOneRole);
                                }

                                break;

                            case SdlClass.Two:
                                if (registeredUser.Roles.All(e => e.Id != classTwoRole.Id))
                                {
                                    await registeredUser.GrantRoleAsync(classTwoRole);
                                }

                                break;

                            case SdlClass.Three:
                                if (registeredUser.Roles.All(e => e.Id != classThreeRole.Id))
                                {
                                    await registeredUser.GrantRoleAsync(classThreeRole);
                                }

                                break;

                            case SdlClass.Four:
                                if (registeredUser.Roles.All(e => e.Id != classFourRole.Id))
                                {
                                    await registeredUser.GrantRoleAsync(classFourRole);
                                }

                                break;

                            default:
                                throw new ArgumentOutOfRangeException();
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }

                        File.Delete(Path.Combine(Globals.AppPath, "Registrations", $"{newUserMessage.Id}"));

                        DiscordEmbed registrationEmbed = newUserMessage.Embeds.First();

                        DiscordEmbedBuilder builder = new DiscordEmbedBuilder
                        {
                            Description =
                                $"**User {registeredUser.Mention} ({registeredUser.Username}#{registeredUser.Discriminator}) has been approved!**"
                        };

                        builder.AddField(e =>
                        {
                            e.Name     = "Class";
                            e.Value    = $"{classNum}";
                            e.IsInline = false;
                        });

                        builder.WithFields(registrationEmbed.Fields.Select(e =>
                        {
                            DiscordFieldBuilder builderSelect = new DiscordFieldBuilder
                            {
                                Name     = e.Name,
                                Value    = e.Value,
                                IsInline = e.Inline
                            };

                            return(builderSelect);
                        }));

                        await registeredChannel.SendMessageAsync(embed : builder.Build());

                        await newUserMessage.DeleteAsync();

                        // await newUserMessage.ModifyAsync("Approved.");
                    }
                    else if (newUserMessage.Reactions.FirstOrDefault(e => e.Emoji.Name == "\u274E")?.Count > 1)
                    {
                        string[] allRegLines = await File.ReadAllLinesAsync(Path.Combine(Globals.AppPath, "Registrations",
                                                                                         $"{newUserMessage.Id}"));

                        ulong userId = Convert.ToUInt64(allRegLines[0]);

                        DiscordGuild guild = await Client.GetGuildAsync(570743985530863649);

                        DiscordMember registeredUser = await guild.GetMemberAsync(userId);

                        DiscordEmbed registrationEmbed = newUserMessage.Embeds.First();

                        DiscordEmbedBuilder builder = new DiscordEmbedBuilder
                        {
                            Description =
                                $"**User {registeredUser.Mention} ({registeredUser.Username}#{registeredUser.Discriminator}) has been denied.**"
                        };

                        builder.WithFields(registrationEmbed.Fields.Select(e =>
                        {
                            DiscordFieldBuilder builderSelect = new DiscordFieldBuilder
                            {
                                Name     = e.Name,
                                Value    = e.Value,
                                IsInline = e.Inline
                            };

                            return(builderSelect);
                        }));

                        if (registrationEmbed.Image?.Url != null)
                        {
                            builder.ImageUrl = registrationEmbed.Image.Url.AbsolutePath;
                        }

                        await registeredChannel.SendMessageAsync(embed : builder.Build());

                        await newUserMessage.DeleteAsync();

                        File.Delete(Path.Combine(Globals.AppPath, "Registrations", $"{newUserMessage.Id}"));
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }