Beispiel #1
0
        private Embed GetProfileEmbed(ServerContext dbContext, Server server, SocketGuildUser user)
        {
            IEnumerable <ProfileOption> options = dbContext.ProfileOptions.Where(o => o.ServerId == server.Id).OrderBy(o => o.Order);

            EmbedBuilder embedBuilder = new EmbedBuilder().WithThumbnailUrl(user.GetAvatarUrl())
                                        .WithAuthor($"{user.GetNickname()}'s profile on {server.Guild.Name}", server.Guild.IconUrl)
                                        .AddField("Username", user.GetUsername());

            SocketRole highestRole = user.Roles.Where(r => r.Color.RawValue != 0).OrderByDescending(r => r.Position).FirstOrDefault();

            if (highestRole != null)
            {
                embedBuilder.Color = highestRole.Color;
            }

            foreach (ProfileOption option in options)
            {
                UserProfileOption userOption = dbContext.UserProfileOptions.FirstOrDefault(o => o.ServerId == server.Id && o.UserId == user.Id && o.Option == option.Option);
                if (userOption == null || string.IsNullOrWhiteSpace(userOption.Value))
                {
                    continue;
                }

                embedBuilder.AddField(option.Label, userOption.Value, option.IsInline);
            }

            return(embedBuilder.Build());
        }
Beispiel #2
0
        public List <Command> Init(IValkyrjaClient iClient)
        {
            this.Client = iClient as ValkyrjaClient;
            List <Command> commands = new List <Command>();

// !memo
            Command newCommand = new Command("memo");

            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Display your (or other) memo.";
            newCommand.ManPage             = new ManPage("[@user]", "`[@user]` - Optional username or mention to display memo of someone else.");
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!e.Server.Config.MemoEnabled)
                {
                    await e.SendReplySafe("Memo is disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);
                string        response  = "";

                if (!string.IsNullOrEmpty(e.TrimmedMessage))
                {
                    string     expression = e.TrimmedMessage.ToLower();
                    SocketUser user       = e.Message.MentionedUsers.FirstOrDefault();
                    if (user == null)
                    {
                        user = e.Server.Guild.Users.FirstOrDefault(u => (u?.Username != null && u.Username.ToLower() == expression) || (u?.Nickname != null && u.Nickname.ToLower() == expression));
                    }

                    if (user == null)
                    {
                        response = NotFoundString;
                    }
                    else
                    {
                        UserData userData = dbContext.GetOrAddUser(e.Server.Id, user.Id);
                        if (string.IsNullOrEmpty(userData.Memo))
                        {
                            response = string.Format(NoMemoOtherString, user.GetNickname(), e.CommandId);
                        }
                        else
                        {
                            response = string.Format(MemoOtherString, user.GetNickname(), e.CommandId, userData.Memo);
                        }
                    }
                }
                else
                {
                    UserData userData = dbContext.GetOrAddUser(e.Server.Id, e.Message.Author.Id);
                    if (string.IsNullOrEmpty(userData.Memo))
                    {
                        response = string.Format(NoMemoString, e.CommandId);
                    }
                    else
                    {
                        response = string.Format(MemoString, e.CommandId, userData.Memo);
                    }
                }

                dbContext.Dispose();
                await e.SendReplySafe(response);
            };
            commands.Add(newCommand);

// !setMemo
            newCommand                     = new Command("setMemo");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Set your memo.";
            newCommand.ManPage             = new ManPage("<memo text>", "`<memo text>` - Text to be recorded as your memo.");
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!e.Server.Config.MemoEnabled)
                {
                    await e.SendReplySafe("Memo is disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);
                string        response  = "";

                UserData userData = dbContext.GetOrAddUser(e.Server.Id, e.Message.Author.Id);
                if (string.IsNullOrEmpty(e.TrimmedMessage))
                {
                    userData.Memo = "";
                    response      = ClearedString;
                }
                else
                {
                    userData.Memo = e.TrimmedMessage;
                    response      = string.Format(SetString, userData.Memo);
                }

                dbContext.SaveChanges();
                dbContext.Dispose();
                await e.SendReplySafe(response);
            };
            commands.Add(newCommand);

// !profile
            newCommand                     = new Command("profile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Display your (or other) profile. Get Help: setProfile --help";
            newCommand.ManPage             = new ManPage("[@user]", "`[@user]` - Optional username or mention to display profile of someone else.");
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                if (!e.Server.Config.ProfileEnabled)
                {
                    await e.SendReplySafe("User profiles are disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);

                if (!string.IsNullOrEmpty(e.TrimmedMessage))
                {
                    string     expression = e.TrimmedMessage.ToLower();
                    SocketUser user       = e.Message.MentionedUsers.FirstOrDefault();
                    if (user == null)
                    {
                        user = e.Server.Guild.Users.FirstOrDefault(u => (u?.Username != null && u.Username == e.TrimmedMessage) || (u?.Nickname != null && u.Nickname == e.TrimmedMessage));
                    }
                    if (user == null)
                    {
                        user = e.Server.Guild.Users.FirstOrDefault(u => (u?.Username != null && u.Username.ToLower() == expression) || (u?.Nickname != null && u.Nickname.ToLower() == expression));
                    }
                    if (user == null)
                    {
                        user = e.Server.Guild.Users.FirstOrDefault(u => (u?.Username != null && u.Username.ToLower().Contains(expression)) || (u?.Nickname != null && u.Nickname.ToLower().Contains(expression)));
                    }

                    if (user == null)
                    {
                        await e.SendReplySafe(NotFoundString);
                    }
                    else if (user.Id == this.Client.DiscordClient.CurrentUser.Id)
                    {
                        await e.SendReplySafe(null, embed : GetValkyrjaEmbed(user as SocketGuildUser));
                    }
                    else
                    {
                        await e.SendReplySafe(null, embed : GetProfileEmbed(dbContext, e.Server, user as SocketGuildUser));
                    }
                }
                else
                {
                    await e.SendReplySafe(null, embed : GetProfileEmbed(dbContext, e.Server, e.Message.Author as SocketGuildUser));
                }

                dbContext.Dispose();
            };
            commands.Add(newCommand);

// !sendProfile
            newCommand                     = new Command("sendProfile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Send your profile to preconfigured introduction channel. Get Help: setProfile --help";
            newCommand.ManPage             = new ManPage("", "");
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                IMessageChannel channel = null;
                if (!e.Server.Config.ProfileEnabled || e.Server.Config.ProfileChannelId == 0 || (channel = e.Server.Guild.GetTextChannel(e.Server.Config.ProfileChannelId)) == null)
                {
                    await e.SendReplySafe("User profiles do not have a channel configured.");

                    return;
                }

                List <IMessage> messages = new List <IMessage>();
                await foreach (IReadOnlyCollection <IMessage> list in channel.GetMessagesAsync(0, Direction.After, 1000, CacheMode.AllowDownload))
                {
                    IMessage message = list.FirstOrDefault(m => guid.TryParse(this.UserIdRegex.Match(m.Content).Value, out guid id) && id == e.Message.Author.Id);
                    if (message != null)
                    {
                        await message.DeleteAsync();
                    }
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);

                await channel.SendMessageAsync($"<@{e.Message.Author.Id}>'s introduction:", embed : GetProfileEmbed(dbContext, e.Server, e.Message.Author as SocketGuildUser));

                await e.SendReplySafe("It haz been done.");

                dbContext.Dispose();
            };
            commands.Add(newCommand);

// !getProfile
            newCommand                     = new Command("getProfile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Get the source used to set your profile.";
            newCommand.ManPage             = new ManPage("", "");
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                if (!e.Server.Config.ProfileEnabled)
                {
                    await e.SendReplySafe("User profiles are disabled on this server.");

                    return;
                }

                StringBuilder response              = new StringBuilder();
                ServerContext dbContext             = ServerContext.Create(this.Client.DbConnectionString);
                IEnumerable <ProfileOption> options = dbContext.ProfileOptions.AsQueryable().Where(o => o.ServerId == e.Server.Id).AsEnumerable().OrderBy(o => o.Order);
                foreach (ProfileOption option in options)
                {
                    UserProfileOption userOption = dbContext.UserProfileOptions.AsQueryable().FirstOrDefault(o => o.ServerId == e.Server.Id && o.UserId == e.Message.Author.Id && o.Option == option.Option);
                    if (userOption == null || string.IsNullOrWhiteSpace(userOption.Value))
                    {
                        continue;
                    }

                    response.Append($"{userOption.Option} {userOption.Value} ");
                }
                response.Append("\n```");

                string responseString = "There ain't no profile to get! >_<";
                if (response.Length > 0)
                {
                    responseString = $"```\n{e.Server.Config.CommandPrefix}setProfile {response.ToString()}";
                }
                await e.SendReplySafe(responseString);

                dbContext.Dispose();
            };
            commands.Add(newCommand);

// !setProfile
            newCommand                     = new Command("setProfile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Set your profile.";
            newCommand.ManPage             = new ManPage("[--help]", "`[--help]` - Display options configured for this server.");
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                if (!e.Server.Config.ProfileEnabled)
                {
                    await e.SendReplySafe("User profiles are disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);
                StringBuilder response  = new StringBuilder();

                IEnumerable <ProfileOption> options = dbContext.ProfileOptions.AsQueryable().Where(o => o.ServerId == e.Server.Id).AsEnumerable().OrderBy(o => o.Order);
                int maxOptionLength = 0;
                foreach (ProfileOption option in options)
                {
                    if (maxOptionLength < option.OptionAlt.Length)
                    {
                        maxOptionLength = option.OptionAlt.Length;
                    }
                }

                MatchCollection emptyOptions = this.ProfileEmptyOptionRegex.Matches(e.TrimmedMessage);

                if (string.IsNullOrEmpty(e.TrimmedMessage) || (emptyOptions.Count > 0 && emptyOptions.Cast <Match>().Any(o => o.Value == "-h" || o.Value == "--help")))
                {
                    response.AppendLine("```md\nSet your profile fields with the following parameters:");
                    foreach (ProfileOption o in options)
                    {
                        response.Append($"  [ {o.Option} ][ {o.OptionAlt}");
                        response.Append(' ', maxOptionLength - o.OptionAlt.Length);
                        response.AppendLine($" ] | {o.Label}");
                    }

                    response.AppendLine($"\nExample:\n  {e.Server.Config.CommandPrefix}{e.CommandId} --twitter @RheaAyase -y youtube.com/RheaAyase");
                    response.AppendLine($"\nTo null one of the options you have already set, leave it empty:\n  {e.Server.Config.CommandPrefix}{e.CommandId} --twitter -y\n```");
                    dbContext.Dispose();
                    await e.SendReplySafe(response.ToString());

                    return;
                }

                foreach (Match match in emptyOptions)
                {
                    ProfileOption option = options.FirstOrDefault(o => o.Option == match.Value || o.OptionAlt == match.Value);
                    if (option == null)
                    {
                        continue;
                    }
                    UserProfileOption userOption = dbContext.UserProfileOptions.AsQueryable().FirstOrDefault(o => o.ServerId == e.Server.Id && o.UserId == e.Message.Author.Id && o.Option == option.Option);
                    if (userOption == null)
                    {
                        continue;
                    }

                    dbContext.UserProfileOptions.Remove(userOption);
                }

                MatchCollection matches = this.ProfileParamRegex.Matches(e.TrimmedMessage);
                foreach (Match match in matches)
                {
                    string optionString = this.ProfileOptionRegex.Match(match.Value).Value;
                    string value        = match.Value.Substring(optionString.Length + 1).Replace('`', '\'');
                    if (value.Length >= UserProfileOption.ValueCharacterLimit)
                    {
                        await e.SendReplySafe($"`{optionString}` is too long! (It's {value.Length} characters while the limit is {UserProfileOption.ValueCharacterLimit})");

                        dbContext.Dispose();
                        return;
                    }

                    ProfileOption option = options.FirstOrDefault(o => o.Option == optionString || o.OptionAlt == optionString);
                    if (option == null)
                    {
                        await e.SendReplySafe($"Unknown option: `{optionString}`");

                        dbContext.Dispose();
                        return;
                    }

                    UserProfileOption userOption = dbContext.UserProfileOptions.AsQueryable().FirstOrDefault(o => o.ServerId == e.Server.Id && o.UserId == e.Message.Author.Id && o.Option == option.Option);
                    if (userOption == null)
                    {
                        userOption = new UserProfileOption()
                        {
                            ServerId = e.Server.Id,
                            UserId   = e.Message.Author.Id,
                            Option   = option.Option
                        };
                        dbContext.UserProfileOptions.Add(userOption);
                    }

                    userOption.Value = value;
                }

                dbContext.SaveChanges();

                await e.Channel.SendMessageAsync("", embed : GetProfileEmbed(dbContext, e.Server, e.Message.Author as SocketGuildUser));

                dbContext.Dispose();
            };
            commands.Add(newCommand);

            return(commands);
        }
Beispiel #3
0
        public List <Command> Init(IBotwinderClient iClient)
        {
            this.Client = iClient as BotwinderClient;
            List <Command> commands = new List <Command>();

// !memo
            Command newCommand = new Command("memo");

            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Display your memo. If used with a username or @mention, it will display someone else' memo.";
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!e.Server.Config.MemoEnabled)
                {
                    await e.SendReplySafe("Memo is disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);
                string        response  = "";

                if (!string.IsNullOrEmpty(e.TrimmedMessage))
                {
                    string     expression = e.TrimmedMessage.ToLower();
                    SocketUser user       = e.Message.MentionedUsers.FirstOrDefault();
                    if (user == null)
                    {
                        user = e.Server.Guild.Users.FirstOrDefault(u => (u?.Username != null && u.Username.ToLower() == expression) || (u?.Nickname != null && u.Nickname.ToLower() == expression));
                    }

                    if (user == null)
                    {
                        response = NotFoundString;
                        dbContext.Dispose();
                    }
                    else
                    {
                        UserData userData = dbContext.GetOrAddUser(e.Server.Id, user.Id);
                        if (string.IsNullOrEmpty(userData.Memo))
                        {
                            response = string.Format(NoMemoOtherString, user.GetNickname(), e.CommandId);
                        }
                        else
                        {
                            response = string.Format(MemoOtherString, user.GetNickname(), e.CommandId, userData.Memo);
                        }
                    }
                }
                else
                {
                    UserData userData = dbContext.GetOrAddUser(e.Server.Id, e.Message.Author.Id);
                    if (string.IsNullOrEmpty(userData.Memo))
                    {
                        response = string.Format(NoMemoString, e.CommandId);
                    }
                    else
                    {
                        response = string.Format(MemoString, e.CommandId, userData.Memo);
                    }
                }

                await e.SendReplySafe(response);

                dbContext.Dispose();
            };
            commands.Add(newCommand);

// !setMemo
            newCommand                     = new Command("setMemo");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Set your memo.";
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!e.Server.Config.MemoEnabled)
                {
                    await e.SendReplySafe("Memo is disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);
                string        response  = "";

                UserData userData = dbContext.GetOrAddUser(e.Server.Id, e.Message.Author.Id);
                if (string.IsNullOrEmpty(e.TrimmedMessage))
                {
                    userData.Memo = "";
                    response      = ClearedString;
                }
                else
                {
                    userData.Memo = e.TrimmedMessage;
                    response      = string.Format(SetString, userData.Memo);
                }

                dbContext.SaveChanges();
                dbContext.Dispose();
                await e.SendReplySafe(response);
            };
            commands.Add(newCommand);
            commands.Add(newCommand.CreateAlias("setmemo"));

// !profile
            newCommand                     = new Command("profile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Display your profile. If used with a username or @mention, it will display someone else' profile. Get Help: setProfile --help";
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                if (!e.Server.Config.ProfileEnabled)
                {
                    await e.SendReplySafe("User profiles are disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);

                if (!string.IsNullOrEmpty(e.TrimmedMessage))
                {
                    string     expression = e.TrimmedMessage.ToLower();
                    SocketUser user       = e.Message.MentionedUsers.FirstOrDefault();
                    if (user == null)
                    {
                        user = e.Server.Guild.Users.FirstOrDefault(u => (u?.Username != null && u.Username.ToLower() == expression) || (u?.Nickname != null && u.Nickname.ToLower() == expression));
                    }

                    if (user == null)
                    {
                        await e.SendReplySafe(NotFoundString);
                    }
                    else if (user.Id == this.Client.DiscordClient.CurrentUser.Id)
                    {
                        await e.Channel.SendMessageAsync("", embed : GetBotwinderEmbed(user as SocketGuildUser));
                    }
                    else
                    {
                        await e.Channel.SendMessageAsync("", embed : GetProfileEmbed(dbContext, e.Server, user as SocketGuildUser));
                    }
                }
                else
                {
                    await e.Channel.SendMessageAsync("", embed : GetProfileEmbed(dbContext, e.Server, e.Message.Author as SocketGuildUser));
                }

                dbContext.Dispose();
            };
            commands.Add(newCommand);

// !getProfile
            newCommand                     = new Command("getProfile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Get the source used to set your profile.";
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                if (!e.Server.Config.ProfileEnabled)
                {
                    await e.SendReplySafe("User profiles are disabled on this server.");

                    return;
                }

                StringBuilder response              = new StringBuilder();
                ServerContext dbContext             = ServerContext.Create(this.Client.DbConnectionString);
                IEnumerable <ProfileOption> options = dbContext.ProfileOptions.Where(o => o.ServerId == e.Server.Id).OrderBy(o => o.Order);
                foreach (ProfileOption option in options)
                {
                    UserProfileOption userOption = dbContext.UserProfileOptions.FirstOrDefault(o => o.ServerId == e.Server.Id && o.UserId == e.Message.Author.Id && o.Option == option.Option);
                    if (userOption == null || string.IsNullOrWhiteSpace(userOption.Value))
                    {
                        continue;
                    }

                    response.Append($"{userOption.Option} {userOption.Value} ");
                }
                response.Append("\n```");

                string responseString = "There ain't no profile to get! >_<";
                if (response.Length > 0)
                {
                    responseString = $"```\n{e.Server.Config.CommandPrefix}setProfile {response.ToString()}";
                }
                await e.SendReplySafe(responseString);

                dbContext.Dispose();
            };
            commands.Add(newCommand);

// !setProfile
            newCommand                     = new Command("setProfile");
            newCommand.Type                = CommandType.Standard;
            newCommand.Description         = "Set your profile. Get Help: setProfile --help";
            newCommand.RequiredPermissions = PermissionType.Everyone;
            newCommand.OnExecute          += async e => {
                if (!this.Client.IsPremium(e.Server) && !this.Client.IsTrialServer(e.Server.Id))
                {
                    await e.SendReplySafe("User profiles are a subscriber-only feature.");

                    return;
                }

                if (!e.Server.Config.ProfileEnabled)
                {
                    await e.SendReplySafe("User profiles are disabled on this server.");

                    return;
                }

                ServerContext dbContext = ServerContext.Create(this.Client.DbConnectionString);
                StringBuilder response  = new StringBuilder();

                IEnumerable <ProfileOption> options = dbContext.ProfileOptions.Where(o => o.ServerId == e.Server.Id).OrderBy(o => o.Order);
                int maxOptionLength = 0;
                foreach (ProfileOption option in options)
                {
                    if (maxOptionLength < option.OptionAlt.Length)
                    {
                        maxOptionLength = option.OptionAlt.Length;
                    }
                }

                MatchCollection emptyOptions = this.ProfileEmptyOptionRegex.Matches(e.TrimmedMessage);

                if (string.IsNullOrEmpty(e.TrimmedMessage) || (emptyOptions.Count > 0 && emptyOptions.Cast <Match>().Any(o => o.Value == "-h" || o.Value == "--help")))
                {
                    response.AppendLine("```md\nSet your profile fields with the following parameters:");
                    foreach (ProfileOption o in options)
                    {
                        response.Append($"  [ {o.Option} ][ {o.OptionAlt}");
                        response.Append(' ', maxOptionLength - o.OptionAlt.Length);
                        response.AppendLine($" ] | {o.Label}");
                    }

                    response.AppendLine($"\nExample:\n  {e.Server.Config.CommandPrefix}{e.CommandId} --twitter @RheaAyase -y youtube.com/RheaAyase");
                    response.AppendLine($"\nTo null one of the options you have already set, leave it empty:\n  {e.Server.Config.CommandPrefix}{e.CommandId} --twitter -y\n```");
                    dbContext.Dispose();
                    await e.SendReplySafe(response.ToString());

                    return;
                }

                foreach (Match match in emptyOptions)
                {
                    ProfileOption option = options.FirstOrDefault(o => o.Option == match.Value || o.OptionAlt == match.Value);
                    if (option == null)
                    {
                        continue;
                    }
                    UserProfileOption userOption = dbContext.UserProfileOptions.FirstOrDefault(o => o.ServerId == e.Server.Id && o.UserId == e.Message.Author.Id && o.Option == option.Option);
                    if (userOption == null)
                    {
                        continue;
                    }

                    dbContext.UserProfileOptions.Remove(userOption);
                }

                MatchCollection matches = this.ProfileParamRegex.Matches(e.TrimmedMessage);
                foreach (Match match in matches)
                {
                    string optionString = this.ProfileOptionRegex.Match(match.Value).Value;
                    string value        = match.Value.Substring(optionString.Length + 1).Replace('`', '\'');
                    if (value.Length >= UserProfileOption.ValueCharacterLimit)
                    {
                        await e.SendReplySafe($"`{optionString}` is too long! (It's {value.Length} characters while the limit is {UserProfileOption.ValueCharacterLimit})");

                        dbContext.Dispose();
                        return;
                    }

                    ProfileOption option = options.FirstOrDefault(o => o.Option == optionString || o.OptionAlt == optionString);
                    if (option == null)
                    {
                        continue;
                    }

                    UserProfileOption userOption = dbContext.UserProfileOptions.FirstOrDefault(o => o.ServerId == e.Server.Id && o.UserId == e.Message.Author.Id && o.Option == option.Option);
                    if (userOption == null)
                    {
                        userOption = new UserProfileOption()
                        {
                            ServerId = e.Server.Id,
                            UserId   = e.Message.Author.Id,
                            Option   = option.Option
                        };
                        dbContext.UserProfileOptions.Add(userOption);
                    }

                    userOption.Value = value;
                }

                dbContext.SaveChanges();

                await e.Channel.SendMessageAsync("", embed : GetProfileEmbed(dbContext, e.Server, e.Message.Author as SocketGuildUser));

                dbContext.Dispose();
            };
            commands.Add(newCommand);
            commands.Add(newCommand.CreateAlias("setprofile"));

            return(commands);
        }