public async Task AddEmoteToDatabase(Emote em, string nick, ulong userId)
        {
            var emotes = _db.GetAll <EeveeEmote>(Defined.EEVEE_EMOTES_TABLE_NAME);

            if (_db.Exists <EeveeEmote>(Defined.EEVEE_EMOTES_TABLE_NAME, (x => x.Name.ToLower() == em.Name.ToLower() && x.AdderId == userId)))
            {
                Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E405, em.ToString(), "Emote", "the Emote Database");
                await Task.CompletedTask;
            }
            else
            {
                bool isDef = !_db.Exists <EeveeEmote>(Defined.EEVEE_EMOTES_TABLE_NAME, (x => x.Name.ToLower() == em.Name.ToLower()));

                var result = await AddEmoteToEmoteGuilds(em);

                EeveeEmote nEmote = new EeveeEmote(result.emote, result.guildId, userId, isDef);
                _db.AddEntity(Defined.EEVEE_EMOTES_TABLE_NAME, nEmote);

                _eBuilder.WithTitle(nEmote.Name)
                .WithImageUrl(nEmote.Url)
                .WithUrl(nEmote.Url);

                if (nick != null)
                {
                    AddAliasEmote(nick, nEmote, nEmote.Name, false);
                }
            }
        }
        public async Task RenameEmoteCommand(string name, [Remainder] string nick)
        {
            nick = nick.Replace(":", string.Empty).ToLower();
            name = name.Replace(":", string.Empty).ToLower();

            EeveeEmote emote = _db.TryEmoteAssociation(Context.User.Id, name);

            AddAliasEmote(nick, emote, name);
            await ReplyAsync(string.Empty, embed : _eBuilder.Build());
        }
        public async Task SendEmoteCommand([Remainder] string name)
        {
            name = name.Replace(":", string.Empty).ToLower();

            EeveeEmote emote = _db.TryEmoteAssociation(Context.User.Id, name);

            if (emote != null)
            {
                await ReplyAsync(emote.ToString());
            }
            else
            {
                Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E404, name, "Emote", "the Emote Database");
                await ReplyAsync(string.Empty, embed : _eBuilder.Build());
            }
        }
        public async Task SendEmoteInfo([Remainder] string name)
        {
            name = name.Replace(":", string.Empty).ToLower();
            EeveeEmote emote = _db.TryEmoteAssociation(Context.User.Id, name);

            if (emote != null)
            {
                var aliases = emote.Aliases.Where(x => x.OwnerId == Context.User.Id);

                _eBuilder.WithTitle($"{emote.Name} info:")
                .WithDescription($"Emote information for the user {Context.User.Mention}.")
                .AddField(x =>
                {
                    x.Name     = "__Emote ID__";
                    x.Value    = emote.Id;
                    x.IsInline = true;
                })
                .AddField(x =>
                {
                    x.Name     = "__Owner ID__";
                    x.Value    = emote.AdderId;
                    x.IsInline = true;
                })
                .AddField(x =>
                {
                    x.Name     = "__Is Default?__";
                    x.Value    = emote.IsDefault;
                    x.IsInline = true;
                })
                .AddField(x =>
                {
                    x.Name     = "__Available Aliases__";
                    x.Value    = aliases.Count() > 0 ? string.Join("\n", aliases.Select(y => y.Alias)) : "None.";
                    x.IsInline = true;
                })
                .WithUrl(emote.Url)
                .WithThumbnailUrl(emote.Url);
            }
            else
            {
                Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E404, name, "Emote", "the Emote Database");
            }

            await ReplyAsync(string.Empty, embed : _eBuilder.Build());
        }
        public async Task DeleteEmoteNicknameCommand([Remainder] string nick)
        {
            nick = nick.Replace(":", string.Empty).ToLower();

            EeveeEmote emote = _db.TryEmoteAssociation(Context.User.Id, nick);

            if (emote != null)
            {
                emote.Aliases.RemoveAll(x => x.Alias.ToLower() == nick);

                _db.UpdateEntity(Defined.EEVEE_EMOTES_TABLE_NAME, emote);

                Defined.BuildSuccessMessage(_eBuilder, Context, $"Deleted the Nickname **{nick}** from the Emote {emote}.");
            }
            else
            {
                Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E404, nick, "Alias", "the Emote Database");
            }

            await ReplyAsync(string.Empty, embed : _eBuilder.Build());
        }
        public void AddAliasEmote(string nick, EeveeEmote emote, string name, bool overrideinfo = true)
        {
            if (nick.Length < Defined.NICKNAME_LENGTH_MIN)
            {
                Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E406, Defined.NICKNAME_LENGTH_MIN, "Nickname (Alias)");
            }
            else if (!_db.Exists <EeveeEmote>(Defined.EEVEE_EMOTES_TABLE_NAME, (x => x.Name.ToLower() == nick || x.Aliases.Where(y => y.OwnerId == Context.User.Id).Count(y => y.Alias == nick) > 0)))
            {
                if (emote != null)
                {
                    if (emote.Aliases.Count(x => x.OwnerId == Context.User.Id) > Defined.NICKNAME_COUNT_MAX)
                    {
                        Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E408, null, $"You have exceeded the Aliases capacity limit for this Emote!" +
                                                  $"\nIf you'd really like to add this one, please use {_config.Prefixes[0] }emotes delnick <nick> on " +
                                                  $"one of the following:\n{string.Join("\n", emote.Aliases.Where(x => x.OwnerId == Context.User.Id).Select(x => x.Alias))}");
                    }
                    else
                    {
                        emote.Aliases.Add(new EeveeEmoteAlias()
                        {
                            AssociatedEmoteId = emote.Id,
                            Alias             = nick,
                            OwnerId           = Context.User.Id
                        });

                        _db.UpdateEntity(Defined.EEVEE_EMOTES_TABLE_NAME, emote);
                        Defined.BuildSuccessMessage(_eBuilder, Context, $"Added the Alias **{nick}** to the Emote {emote}.", overrideinfo);
                    }
                }
                else
                {
                    Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E404, name, "Emote", "the Emote Database", overrideinfo);
                }
            }
            else
            {
                Defined.BuildErrorMessage(_eBuilder, Context, ErrorTypes.E405, name, "Alias or Emote", "the Emote Database", overrideinfo);
            }
        }