private async Task _client_JoinedGuild(SocketGuild guild)
        {
            // 서버 입장 시 권한 확인
            GuildPermissions permission = guild.GetUser(_client.CurrentUser.Id).GuildPermissions;

            try
            {
                // 관리자 권한이 있는지 확인
                if (permission.Administrator)
                {
                    await guild.DefaultChannel.SendMessageAsync(_client.CurrentUser.Mention + "를 초대해주셔서 감사합니다.\n**>help**를 입력하여 도움말을 보실 수 있습니다.");

                    SocketTextChannel osuTrackerChannel = await guild.CreateChannelIfNotExist("osu-tracker");
                }
                else
                {
                    await guild.DefaultChannel.SendMessageAsync("https://discord.com/api/oauth2/authorize?client_id=755681499214381136&permissions=8&scope=bot");

                    await guild.DefaultChannel.SendMessageAsync(_client.CurrentUser.Mention + "은(는) **관리자 권한**이 필요합니다.\n권한이 부족해 서버에서 내보냅니다, 다시 초대해주세요.");

                    await guild.LeaveAsync();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        public async Task CheckNewBest()
        {
            DataTable userTable = Sql.Get("SELECT user_id FROM targets GROUP BY user_id");

            // 타겟 유저 마다 검사
            foreach (DataRow userRow in userTable.Rows)
            {
                try
                {
                    UserBest userBest;
                    User     user = User.Search((int)userRow["user_id"]);

                    // 이전 pp 기록이 있는지 확인
                    DataTable ppHistorySearchTable = Sql.Get(
                        "SELECT p.user_id FROM pphistories p, targets t " +
                        "WHERE p.user_id = {0} AND p.user_id = t.user_id", user.user_id
                        );

                    // 이전 pp 기록이 없을 경우 새로 삽입하고 다음 타겟 검사
                    if (ppHistorySearchTable.Rows.Count == 0)
                    {
                        userBest = new UserBest(user.user_id);
                        Sql.Execute("INSERT INTO pphistories VALUES ({0}, {1}, {2}, {3})", user.user_id, userBest.pp_sum, user.pp_raw, user.pp_rank);

                        continue;
                    }

                    double previous_pp_raw = Convert.ToDouble(Sql.Get("SELECT pp_raw FROM pphistories WHERE user_id = {0}", user.user_id).Rows[0]["pp_raw"]);

                    // pp 변화가 없을 경우 다음 타겟 검사
                    if (previous_pp_raw.IsCloseTo(user.pp_raw))
                    {
                        continue;
                    }

                    // pp 변화가 있을 경우 새로운 베퍼포가 있는지 확인
                    userBest = new UserBest(user.user_id);
                    userBest.GetNewBest();

                    // 새로운 베퍼포가 없을 경우 다음 타겟 검사
                    if (userBest.newBest == null)
                    {
                        continue;
                    }

                    ScoreEmbed scoreEmbed = new ScoreEmbed(userBest);
                    DataTable  guildTable = Sql.Get("SELECT guild_id FROM targets WHERE user_id = '{0}'", user.user_id);

                    foreach (DataRow guildRow in guildTable.Rows)
                    {
                        ulong       guild_id = ulong.Parse(guildRow["guild_id"].ToString());
                        SocketGuild guild    = _client.GetGuild(guild_id);

                        try
                        {
                            SocketTextChannel osuTrackerChannel = await guild.CreateChannelIfNotExist("osu-tracker");

                            await osuTrackerChannel.SendMessageAsync(embed : scoreEmbed.Build());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

                Console.WriteLine(userRow["user_id"]);
            }

            Sql.Execute("DELETE FROM pphistories WHERE user_id NOT IN (SELECT user_id FROM targets)");
            await Task.Factory.StartNew(() => CheckNewBest());
        }