Beispiel #1
0
        public async Task Info(params string[] args)
        {
            string user = string.Join(" ", args);

            if (user.Length == 0)
            {
                await ReplyAsync("**유저명** 또는 **유저 id**를 입력하세요.");

                return;
            }

            UserInfo userInfo;

            try
            {
                userInfo = ConvertOsuData.GetUserInfo(user);
            }
            catch (Exception e)
            {
                await ReplyAsync(e.Message);

                return;
            }

            var userInfoEmbed = new UserInfoEmbed(userInfo);

            await ReplyAsync(embed : userInfoEmbed.embed);
        }
Beispiel #2
0
        public UserListEmbed(DataTable users)
        {
            EmbedBuilder builder = new EmbedBuilder()
                                   .WithTitle("추적 중인 플레이어")
                                   .WithColor(new Color(0xFF69B4))
                                   .WithDescription("\u200B");

            if (users.Rows.Count == 0)
            {
                builder.AddField("이 채널에서 추적 중인 플레이어가 없습니다.", ">track [유저명/유저 id]로 추가할 수 있습니다.");
            }
            else
            {
                // db에서 받아온 DataTable을 UserInfo 리스트로 변환
                List <UserInfo> userInfos = new List <UserInfo>();

                foreach (DataRow user in users.Rows)
                {
                    UserInfo userInfo = ConvertOsuData.GetUserInfo(user["user_id"].ToString());
                    userInfos.Add(userInfo);
                }

                // 랭크 순으로 정렬해서 embed에 추가
                userInfos.Sort((x, y) => x.pp_rank.CompareTo(y.pp_rank));

                foreach (UserInfo userInfo in userInfos)
                {
                    builder.AddField(userInfo.username, string.Format("{0:0.0#}pp (#{1})", userInfo.pp_raw, userInfo.pp_rank));
                }
            }

            embed = builder.Build();
        }
Beispiel #3
0
        public ScoreInfoEmbed(UserBest userBest)
        {
            ScoreInfo scoreInfo = userBest.newScore;

            UserInfo userInfo = ConvertOsuData.GetUserInfo(scoreInfo.user_id);
            MapInfo  mapInfo  = ConvertOsuData.getMapInfo(scoreInfo.beatmap_id);

            EmbedBuilder builder = new EmbedBuilder()
                                   .WithTitle(string.Format("\n{0} - {1}", mapInfo.artist, mapInfo.title))
                                   .WithDescription(string.Format("**[{0}] {1}**\n​", mapInfo.version, ConvertOsuData.modsToString(scoreInfo.enabled_mods)))
                                   .WithUrl(string.Format("https://osu.ppy.sh/beatmapsets/{0}#osu/{1}", mapInfo.beatmapset_id, scoreInfo.beatmap_id))
                                   .WithColor(new Color(0xFF69B4))
                                   .WithTimestamp(ConvertOsuData.dateToOffset(scoreInfo.date))
                                   .WithFooter(footer => { footer
                                                           .WithText((userBest.newScoreIndex + 1) + "번째 탑 플레이"); })
                                   .WithThumbnailUrl(ConvertOsuData.rankToImageUrl(scoreInfo.rank))
                                   .WithImageUrl(string.Format("https://assets.ppy.sh/beatmaps/{0}/covers/cover.jpg", mapInfo.beatmapset_id))
                                   .WithAuthor(author => { author
                                                           .WithName(userInfo.username)
                                                           .WithUrl("https://osu.ppy.sh/users/" + userInfo.user_id)
                                                           .WithIconUrl("https://github.com/ppy/osu/blob/master/assets/lazer.png?raw=true"); })
                                   .AddField("퍼포먼스", string.Format("{0:0.0#}pp", scoreInfo.pp))
                                   .AddField("콤보", string.Format("{0}/{1}", scoreInfo.maxcombo, mapInfo.max_combo), true)
                                   .AddField("정확도", string.Format("{0:0.0#}%", ConvertOsuData.getAccuracy(scoreInfo.count300, scoreInfo.count100, scoreInfo.count50, scoreInfo.countmiss)), true)
                                   .AddField("\u200B", "\u200B", true)
                                   .AddField("300", "x" + scoreInfo.count300, true)
                                   .AddField("100", "x" + scoreInfo.count100, true)
                                   .AddField("\u200B", "\u200B", true)
                                   .AddField("50", "x" + scoreInfo.count50, true)
                                   .AddField("미스", "x" + scoreInfo.countmiss, true)
                                   .AddField("\u200B", "\u200B", true);

            embed = builder.Build();
        }
Beispiel #4
0
        public UserInfoEmbed(UserInfo userInfo)
        {
            EmbedBuilder builder = new EmbedBuilder()
                                   .WithColor(new Color(0xFF69B4))
                                   .WithDescription("​")
                                   .WithTimestamp(ConvertOsuData.dateToOffset(userInfo.join_date))
                                   .WithFooter(footer => { footer
                                                           .WithText("가입 일시"); })
                                   .WithThumbnailUrl("https://a.ppy.sh/" + userInfo.user_id)
                                   .WithAuthor(author => { author
                                                           .WithName(userInfo.username)
                                                           .WithUrl("https://osu.ppy.sh/users/" + userInfo.user_id)
                                                           .WithIconUrl("https://github.com/ppy/osu/blob/master/assets/lazer.png?raw=true"); })
                                   .AddField("퍼포먼스", string.Format("{0:0.0#}pp", userInfo.pp_raw))
                                   .AddField("순위", "#" + userInfo.pp_rank, true)
                                   .AddField("국가", string.Format(":flag_{0}: #{1}", userInfo.country.ToLower(), userInfo.pp_country_rank), true)
                                   .AddField("\u200B", "\u200B", true)
                                   .AddField("정확도", string.Format("{0:0.0#}%", userInfo.accuracy), true)
                                   .AddField("플레이 횟수", userInfo.playcount + "회", true)
                                   .AddField("\u200B", "\u200B", true)
                                   .AddField("레벨", string.Format("{0:0.0#}", userInfo.level) + "\n\u200B");

            embed = builder.Build();
        }
Beispiel #5
0
        public async Task Track(params string[] args)
        {
            string user       = string.Join(" ", args); // 띄어쓰기 있는 닉네임 처리
            string guild_id   = Context.Guild.Id.ToString();
            string channel_id = Context.Channel.Id.ToString();

            if (user.Length == 0)
            {
                await ReplyAsync("**유저명** 또는 **유저 id**를 입력하세요.");

                return;
            }

            UserInfo userInfo;

            try
            {
                userInfo = ConvertOsuData.GetUserInfo(user);
            }
            catch (Exception e)
            {
                await ReplyAsync(e.Message);

                return;
            }

            // 해당 플레이어가 등록된 서버 목록
            DataTable findGuild = Sql.Get("SELECT channel_id FROM targets WHERE user_id = {0} AND guild_id = '{1}'", userInfo.user_id, guild_id);

            // 서버에 없던 유저일 경우 새로 추가
            if (findGuild.Rows.Count == 0)
            {
                Sql.Execute("INSERT INTO targets VALUES ({0}, '{1}', '{2}')", userInfo.user_id, guild_id, channel_id);
            }
            // 이미 해당 서버에 등록된 유저일 경우
            else
            {
                // 이미 해당 채널에 등록된 유저일 경우 삭제
                if (channel_id.Equals(findGuild.Rows[0]["channel_id"].ToString()))
                {
                    Sql.Execute("DELETE FROM targets WHERE user_id = {0} AND guild_id = '{1}'", userInfo.user_id, guild_id);

                    // 해당 서버에서 삭제한 유저가 타겟에 더 이상 없을 경우 점수 기록도 삭제
                    DataTable findUser = Sql.Get("SELECT guild_id FROM targets WHERE user_id = {0}", userInfo.user_id);

                    if (findUser.Rows.Count == 0)
                    {
                        Sql.Execute("DELETE FROM pphistories WHERE user_id = {0}", userInfo.user_id);
                    }

                    await ReplyAsync(string.Format("더 이상 **#{0}**에서 **{1}**님을 추적하지 않습니다.", Context.Channel.Name, userInfo.username));

                    return;
                }
                // 그 외의 경우 업데이트
                else
                {
                    Sql.Execute("UPDATE targets SET channel_id = '{0}' WHERE user_id = {1} AND guild_id = '{2}'", channel_id, userInfo.user_id, guild_id);
                }
            }

            await ReplyAsync(string.Format("**#{0}**에서 **{1}**님을 추적합니다.", Context.Channel.Name, userInfo.username));
        }