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); }
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(); }
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(); }
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(); }
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)); }