Exemple #1
0
        private async Task BankTransferAsync(IUser user = null, float amount = 0)
        {
            await Context.Message.DeleteAsync();

            BotConfig conf  = BotConfig.Load();
            var       gconf = conf.GetConfig(Context.Guild.Id);

            if (user == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Incorrect Command Usage", $"Correct Usage: `{gconf.Prefix}bank transfer <@user> <amount>`", false);

                return;
            }

            if (amount <= 0)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Transfer Error", $"The amount must be greater than 0.");

                return;
            }

            LoriUser profile = ProfileDatabase.GetUser(Context.User.Id);

            if (profile == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Transfer Error", $"We could not find your bank account.");

                return;
            }

            LoriUser profile2 = ProfileDatabase.GetUser(user.Id);

            if (profile2 == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Transfer Error", $"We could not find {user.Username}'s bank account.");

                return;
            }

            if (profile.GetCurrency() >= amount)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Transfer Error", "You can not afford this transfer.");

                return;
            }

            ProfileDatabase.AddCurrency(Context.User.Id, -amount);
            ProfileDatabase.AddCurrency(user.Id, amount);

            float newAmt = profile.GetCurrency();

            EmbedBuilder embed = new EmbedBuilder()
            {
                Color       = Color.DarkPurple,
                Title       = "Transfer successful",
                Description = $"Successfully transferred ${amount} to {user.Username}.\nNew balance: ${newAmt}"
            };

            await Context.Channel.SendMessageAsync(null, false, embed.Build());
        }
Exemple #2
0
        private async Task SetMottoAsync([Remainder] string motto = null)
        {
            await Context.Message.DeleteAsync();

            while (!ProfileDatabase.Ready())
            {
                await Task.Delay(50);
            }

            LoriUser profile = ProfileDatabase.GetUser(Context.User.Id);

            if (profile == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Profile Not Found", $"That users profile could not be found?", false);

                return;
            }

            if (motto == null)
            {
                motto = "";
            }

            ProfileDatabase.SetUserMotto(Context.User.Id, motto);
            await ViewProfileAsync(Context, (Context.User as IUser));
        }
Exemple #3
0
 public ProfileRenderer(ulong id, LoriUser user)
 {
     Id   = id;
     User = user;
     GetProfileData();
     Console.WriteLine(Data.ToString());
 }
Exemple #4
0
        private async Task DailyAsync()
        {
            await Context.Message.DeleteAsync();

            LoriUser profile = ProfileDatabase.GetUser(Context.User.Id);

            if (profile == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Transfer Error", $"We could not find your bank account.");

                return;
            }

            var  tgg      = LCommandHandler.GetTopGGClient();
            bool hasVoted = await tgg.HasVoted(Context.User.Id);

            if (hasVoted)
            {
                // check if already claimed
                if (ProfileDatabase.HasClaimedDaily(Context.User.Id))
                {
                    DateTime claimAt     = profile.Claimed.AddHours(12.0);
                    var      timeToClaim = claimAt - DateTime.Now;
                    await MessageUtil.SendErrorAsync(Context.Channel as ITextChannel, "Already Claimed", $"You can claim your daily in {timeToClaim.Hours} hours and {timeToClaim.Minutes} minutes.", false);
                }
                else
                {
                    ProfileDatabase.ClaimDaily(Context.User.Id);

                    float        newAmt = profile.GetCurrency();
                    EmbedBuilder embed  = new EmbedBuilder()
                    {
                        Color       = Color.DarkPurple,
                        Title       = "Daily Bonus Claimed",
                        Description = $"New bank balance: ${newAmt}"
                    };
                    await Context.Channel.SendMessageAsync(null, false, embed.Build());
                }
            }
            else
            {
                EmbedBuilder embed = new EmbedBuilder()
                {
                    Color  = Color.DarkPurple,
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = "Click here to vote!", Url = "https://top.gg/bot/729696788097007717/vote"
                    },
                    Description = $"Vote on TopGG and then claim your daily!",
                    Footer      = new EmbedFooterBuilder()
                    {
                        Text = "If you can't click above, head to this url https://top.gg/bot/729696788097007717/vote"
                    }
                };
                await Context.Channel.SendMessageAsync(null, false, embed.Build());
            }
        }
        // Get all users
        private static async Task <List <LoriUser> > GetAllUsersAsync()
        {
            List <LoriUser> users = new List <LoriUser>();

            var dbCon = DBConnection.Instance();

            dbCon.DatabaseName = LCommandHandler.DATABASE_NAME;

            if (dbCon.IsConnect())
            {
                var cmd    = new MySqlCommand($"SELECT * FROM users", dbCon.Connection);
                var reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        ulong    id          = reader.GetUInt64(0);
                        string   name        = reader.GetString(1);
                        DateTime createdOn   = reader.GetDateTime(2);
                        DateTime joinedOn    = reader.GetDateTime(3);
                        DateTime lastSeen    = reader.GetDateTime(4);
                        string   status      = reader.GetString(5);
                        string   badges      = reader.GetString(6);
                        DateTime lastUpdated = reader.GetDateTime(7);
                        string   activity    = reader.GetString(8);
                        string   motto       = reader.GetString(9);
                        int      currency    = reader.GetInt32(10);
                        DateTime claimedAt   = reader.GetDateTime(11);

                        if (activity == null)
                        {
                            activity = "";
                        }
                        if (motto == null)
                        {
                            motto = "";
                        }
                        if (claimedAt == null)
                        {
                            claimedAt = new DateTime();
                        }
                        List <int> userBadges = JsonConvert.DeserializeObject <List <int> >(badges);

                        LoriUser newUser = new LoriUser(id, name, createdOn, joinedOn, lastSeen, status, userBadges, lastUpdated, motto, activity, currency, claimedAt);
                        users.Add(newUser);
                    }
                }

                reader.Close();
                cmd.Dispose();
                dbCon.Close();
            }

            return(users);
        }
        // Add user to database
        private static async Task AddUserToDatabaseAsync(LoriUser user)
        {
            var dbCon = DBConnection.Instance();

            dbCon.DatabaseName = LCommandHandler.DATABASE_NAME;
            if (dbCon.IsConnect())
            {
                while (LCommandHandler.Saving)
                {
                    await Task.Delay(50);
                }
                LCommandHandler.Saving = true;

                string badges = JsonConvert.SerializeObject(user.Badges, Formatting.None);

                var cmd = new MySqlCommand($"INSERT INTO users (id, name, createdon, joinedon, lastseen, status, badges, lastupdated, motto, activity, currency, claimedat) VALUES (@id, @name, @createdon, @joinedon, @lastseen, @status, @badges, @lastupdated, @motto, @activity, @currency, @claimedat)", dbCon.Connection);
                cmd.Parameters.Add("@id", MySqlDbType.UInt64).Value            = user.Id;
                cmd.Parameters.Add("@name", MySqlDbType.String).Value          = user.Name;
                cmd.Parameters.Add("@createdon", MySqlDbType.DateTime).Value   = user.CreatedOn;
                cmd.Parameters.Add("@joinedon", MySqlDbType.DateTime).Value    = user.JoinedOn;
                cmd.Parameters.Add("@lastseen", MySqlDbType.DateTime).Value    = user.LastSeen;
                cmd.Parameters.Add("@status", MySqlDbType.String).Value        = user.Status;
                cmd.Parameters.Add("@badges", MySqlDbType.String).Value        = badges;
                cmd.Parameters.Add("@lastupdated", MySqlDbType.DateTime).Value = user.LastUpdated;
                cmd.Parameters.Add("@activity", MySqlDbType.String).Value      = user.Activity;
                cmd.Parameters.Add("@motto", MySqlDbType.String).Value         = user.Motto;
                cmd.Parameters.Add("@currency", MySqlDbType.Int32).Value       = user.Currency;
                cmd.Parameters.Add("@claimedat", MySqlDbType.DateTime).Value   = user.Claimed;

                try
                {
                    await cmd.ExecuteNonQueryAsync();

                    cmd.Dispose();
                }
                catch (Exception e)
                {
                    await Util.LoggerAsync(new LogMessage(LogSeverity.Error, "Profiles", e.Message, null));

                    // Lets see what chars are causing the issue...
                    if (e.Message.Contains("Incorrect string value"))
                    {
                        await Util.LoggerAsync(new LogMessage(LogSeverity.Warning, "Profiles", user.Activity, null));
                    }

                    cmd.Dispose();
                }

                LCommandHandler.Saving = false;
                dbCon.Close();
            }
        }
        // Create a new user and add it to the Users list
        public static void CreateNewUser(IUser user)
        {
            DateTime lastseen = new DateTime();

            if (user.Status != UserStatus.Offline && user.Status != UserStatus.Invisible)
            {
                lastseen = DateTime.Now;
            }
            LoriUser newUser = new LoriUser(user.Id, "", user.CreatedAt.DateTime, DateTime.Now, lastseen, user.Status.ToString(), new List <int>(), DateTime.Now);

            newUser.SetNew();
            Users.Add(newUser);
        }
Exemple #8
0
        private async Task BankAsync()
        {
            await Context.Message.DeleteAsync();

            LoriUser profile = ProfileDatabase.GetUser(Context.User.Id);

            if (profile == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Transfer Error", $"We could not find your bank account.");

                return;
            }

            float        amount = profile.GetCurrency();
            EmbedBuilder embed  = new EmbedBuilder()
            {
                Color       = Color.DarkPurple,
                Title       = "Transfer successful",
                Description = $"Bank balance: ${amount}"
            };

            await Context.Channel.SendMessageAsync(null, false, embed.Build());
        }
        // Save all users
        private static async Task SaveAllUsersAsync(List <LoriUser> users)
        {
            var dbCon = DBConnection.Instance();

            dbCon.DatabaseName = LCommandHandler.DATABASE_NAME;
            if (dbCon.IsConnect())
            {
                foreach (LoriUser user in users)
                {
                    if (!user.Badges.Contains(0))
                    {
                        user.AddBadge(0);                           // ADD FOUNDER BADGE
                    }
                    if (user.HasChanged)
                    {
                        while (LCommandHandler.Saving)
                        {
                            await Task.Delay(50);
                        }
                        LCommandHandler.Saving = true;

                        if (user.IsNew)
                        {
                            await AddUserToDatabaseAsync(user);

                            user.HasChanged = false;
                            user.IsNew      = false;
                        }
                        else
                        {
                            string badges = JsonConvert.SerializeObject(user.Badges, Formatting.None);

                            var cmd = new MySqlCommand($"UPDATE users SET name = @name, lastseen = @lastseen, status = @status, lastupdated = @lastupdated, motto = @motto, activity = @activity, badges = @badges, currency = @currency, claimedat = @claimedat WHERE id = @id", dbCon.Connection);
                            cmd.Parameters.Add("@id", MySqlDbType.UInt64).Value            = user.Id;
                            cmd.Parameters.Add("@name", MySqlDbType.String).Value          = user.Name;
                            cmd.Parameters.Add("@lastseen", MySqlDbType.DateTime).Value    = user.LastSeen;
                            cmd.Parameters.Add("@status", MySqlDbType.String).Value        = user.Status;
                            cmd.Parameters.Add("@lastupdated", MySqlDbType.DateTime).Value = user.LastUpdated;
                            cmd.Parameters.Add("@activity", MySqlDbType.String).Value      = user.Activity;
                            cmd.Parameters.Add("@motto", MySqlDbType.String).Value         = user.Motto;
                            cmd.Parameters.Add("@badges", MySqlDbType.String).Value        = badges;
                            cmd.Parameters.Add("@currency", MySqlDbType.Int32).Value       = user.Currency;
                            cmd.Parameters.Add("@claimedat", MySqlDbType.DateTime).Value   = user.Claimed;

                            try
                            {
                                await cmd.ExecuteNonQueryAsync();

                                user.HasChanged = false;
                                user.IsNew      = false;
                                cmd.Dispose();
                            }
                            catch (Exception e)
                            {
                                if (e.Message.StartsWith("Duplicate entry"))
                                {
                                    List <LoriUser> usersToRemove;
                                    List <LoriUser> usersWithId = new List <LoriUser>();

                                    foreach (LoriUser usr in Users)
                                    {
                                        if (usr.Id == user.Id)
                                        {
                                            usersWithId.Add(usr);
                                        }
                                    }

                                    if (usersWithId.Count > 1)
                                    {
                                        usersToRemove = usersWithId.OrderBy(x => x.JoinedOn).ToList();
                                        usersToRemove.RemoveAt(0);

                                        ulong    id       = user.Id;
                                        string   name     = user.Name;
                                        string   motto    = user.Motto;
                                        string   status   = user.Status;
                                        DateTime joinedOn = user.JoinedOn;

                                        foreach (LoriUser userToRemove in usersToRemove)
                                        {
                                            for (int i = 0; i < Users.Count; i++)
                                            {
                                                LoriUser usr = Users[i];
                                                if (usr.Id == id)
                                                {
                                                    if (usr.Name.Equals(name) && usr.Motto.Equals(motto) && usr.JoinedOn == joinedOn && usr.Status == status)
                                                    {
                                                        Users.RemoveAt(i);
                                                    }
                                                }
                                            }
                                        }

                                        await UpdateUserAsync(id);
                                    }

                                    await Util.LoggerAsync(new LogMessage(LogSeverity.Error, "Profiles", $"Duplicate entry ({user.Id}) - removed duplicate user", null));
                                }
                                else
                                {
                                    await Util.LoggerAsync(new LogMessage(LogSeverity.Error, "Profiles", e.Message, null));

                                    // Lets see what chars are causing the issue...
                                    if (e.Message.Contains("Incorrect string value"))
                                    {
                                        await Util.LoggerAsync(new LogMessage(LogSeverity.Warning, "Profiles", user.Activity, null));
                                    }
                                }

                                cmd.Dispose();
                            }
                        }

                        LCommandHandler.Saving = false;
                    }
                }

                dbCon.Close();
            }
        }
Exemple #10
0
        private async Task ViewProfileAsync(ICommandContext Context, IUser User)
        {
            if (User.IsBot)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Profile Not Found", $"You can not use this command on bots!", false);

                return;
            }

            while (!ProfileDatabase.Ready())
            {
                await Task.Delay(50);
            }

            LoriUser profile = ProfileDatabase.GetUser(User.Id);

            if (profile == null)
            {
                await MessageUtil.SendErrorAsync((Context.Channel as ITextChannel), "Profile Not Found", $"That users profile could not be found?", false);

                return;
            }

            string avatar = User.GetAvatarUrl(size: 2048);
            string status = "**" + User.Status.ToString() + " for ";

            Color color;

            switch (User.Status)
            {
            case UserStatus.Offline:
                color = Color.LightGrey;
                break;

            case UserStatus.Online:
                color = Color.Green;
                break;

            case UserStatus.Idle:
                color = Color.Orange;
                break;

            case UserStatus.AFK:
                color = Color.Orange;
                break;

            case UserStatus.DoNotDisturb:
                color = Color.Red;
                break;

            case UserStatus.Invisible:
                color = Color.LightGrey;
                break;

            default:
                color = Color.LightGrey;
                break;
            }

            DateTime now     = DateTime.Now;
            int      seconds = (int)((now - profile.LastSeen).TotalSeconds);
            int      minutes = (int)((now - profile.LastSeen).TotalMinutes);
            int      hours   = (int)((now - profile.LastSeen).TotalHours);
            int      days    = (int)((now - profile.LastSeen).TotalDays);

            if (days > 0)
            {
                status += $"{days} Days and {hours - (days * 24)} Hours**";
            }
            else if (hours > 0)
            {
                status += $"{hours} Hours and {minutes - (hours * 60)} Minutes**";
            }
            else if (minutes > 0)
            {
                status += $"{minutes} Minutes and {seconds - (minutes * 60)} Seconds**";
            }
            else
            {
                status += $"{seconds} Seconds**";
            }

            if (User.Status == UserStatus.Offline || User.Status == UserStatus.Invisible)
            {
                status += $"\n _{profile.Activity}_";
            }
            else
            {
                status += $"\n {profile.Activity}";
            }

            if (profile.Motto.Length > 0)
            {
                status += $"\n**Motto:** {profile.Motto}";
            }

            EmbedBuilder embed = new EmbedBuilder()
            {
                Author = new EmbedAuthorBuilder()
                {
                    IconUrl = avatar, Name = $"{User.Username}#{User.Discriminator}"
                },
                Description = status,
                Color       = color,
                Footer      = new EmbedFooterBuilder()
                {
                    Text = $"{EmojiUtil.GetRandomEmoji()}  This is a temporary look for profiles..."
                },
            };

            embed.AddField(new EmbedFieldBuilder()
            {
                Name = "Account Created On: ", Value = profile.CreatedOn.ToShortDateString(), IsInline = true
            });
            embed.AddField(new EmbedFieldBuilder()
            {
                Name = "Profile Created On: ", Value = profile.JoinedOn.ToShortDateString(), IsInline = true
            });
            embed.AddField(new EmbedFieldBuilder()
            {
                Name = "Last Updated On: ", Value = profile.LastUpdated.ToShortDateString(), IsInline = true
            });
            embed.AddField(new EmbedFieldBuilder()
            {
                Name = "Unique Identifier: ", Value = profile.Id, IsInline = true
            });
            embed.AddField(new EmbedFieldBuilder()
            {
                Name = "Username: "******"#" + User.Discriminator, IsInline = true
            });
            embed.AddField(new EmbedFieldBuilder()
            {
                Name = "Lori's Angel Guilds: ", Value = LCommandHandler.GetUserGuildCount(User.Id), IsInline = true
            });

            ProfileRenderer renderer = new ProfileRenderer(User.Id, profile);

            renderer.Render();
            await Context.Channel.SendFileAsync(renderer.GetPath());

            renderer.Dispose();

            await Context.Channel.SendMessageAsync(null, false, embed.Build());
        }