예제 #1
0
 public static Embed GetMapInfoEmbed(DetailedMapOverviewModel map)
 {
     try
     {
         var builder = new EmbedBuilder();
         builder.WithTitle(map.Name);
         var tierText = $"Solly : T{map.TierInfo.Soldier}";
         if (!string.IsNullOrWhiteSpace(map.Videos.Soldier))
         {
             tierText += $" [Showcase]({TempusHelper.GetYoutubeUrl(map.Videos.Soldier)})";
         }
         tierText += $" | Demo : T{map.TierInfo.Demoman} ";
         if (!string.IsNullOrWhiteSpace(map.Videos.Demoman))
         {
             tierText += $"[Showcase]({TempusHelper.GetYoutubeUrl(map.Videos.Demoman)})";
         }
         builder.WithDescription(tierText + Environment.NewLine +
                                 DiscordHelper.FormatUrlMarkdown("Tempus.xyz",
                                                                 TempusHelper.GetMapUrl(map.Name)));
         return(builder.Build());
     }
     catch (Exception e)
     {
         return(Logger.LogException(e));
     }
 }
예제 #2
0
파일: TempusModule.cs 프로젝트: Hona/Lambda
 public async Task TickTimeAsync(int tick1, int tick2 = -1)
 {
     if (tick2 == -1)
     {
         await ReplyNewEmbedAsync(TempusHelper.TicksToFormattedTime(tick1));
     }
     else
     {
         var ticks = tick1 > tick2 ? tick1 - tick2 : tick2 - tick1;
         await ReplyNewEmbedAsync(TempusHelper.TicksToFormattedTime(ticks));
     }
 }
예제 #3
0
        public async Task <Embed> GetRecentRecordEmbedAsync()
        {
            try
            {
                var recentRecords = await _justJumpDataAccess.GetRecentRecordsAsync(10);

                var recentRecordsString = recentRecords.Aggregate("",
                                                                  (currentString, nextHighscore) => currentString +
                                                                  $"{SimplyHelper.ClassToShortString(nextHighscore.Class)} | **__{TempusHelper.TimeSpanToFormattedTime(SimplyHelper.GetTimeSpan(nextHighscore.RunTime))}__** | **{nextHighscore.Map}** | **{nextHighscore.Name}**" +
                                                                  Environment.NewLine);

                var builder = new EmbedBuilder {
                    Title = "**Recent Map Records**"
                };

                builder.WithDescription(recentRecordsString)
                .WithColor(ColorConstants.InfoColor)
                .WithFooter("Updated " + DateTime.Now.ToShortTimeString());
                return(builder.Build());
            }
            catch (Exception e)
            {
                return(Logger.LogException(e));
            }
        }
예제 #4
0
 public override string ToString() =>
 $"{SimplyHelper.ClassToShortString(Class)} | {Name} | {TempusHelper.TimeSpanToFormattedTime(SimplyHelper.GetTimeSpan(RunTime))}";
예제 #5
0
 public static string FormatRecordSuffix(MapInfo mapInfo, RecordInfoShort recordInfo, PlayerInfo playerInfo) =>
 $" | {DiscordHelper.FormatUrlMarkdown(mapInfo.Name.EscapeDiscordChars(), TempusHelper.GetMapUrl(mapInfo.Name))} | {DiscordHelper.FormatUrlMarkdown($"**{FormattedDuration(recordInfo.Duration).EscapeDiscordChars()}**", TempusHelper.GetRecordUrl(recordInfo.Id))} | {DiscordHelper.FormatUrlMarkdown(playerInfo.Name.EscapeDiscordChars(), TempusHelper.GetPlayerUrl(playerInfo.Id))}" +
 Environment.NewLine;
예제 #6
0
 private static string FormatBonusRecords(IEnumerable <BonusWr> records) => records.Aggregate("",
                                                                                              (currentString, nextItem) => currentString +
                                                                                              $"{TempusHelper.GetClassEmote(nextItem.RecordInfo.Class)} B{nextItem.ZoneInfo.Zoneindex}"
                                                                                              + FormatRecordSuffix(nextItem.MapInfo, nextItem.RecordInfo, nextItem.PlayerInfo));
예제 #7
0
 private static string FormatTopTimes(IEnumerable <MapTop> records) => records.Aggregate("",
                                                                                         (currentString, nextItem) => currentString +
                                                                                         $"{TempusHelper.GetClassEmote(nextItem.RecordInfo.Class)} #{nextItem.Rank}"
                                                                                         + FormatRecordSuffix(nextItem.MapInfo, nextItem.RecordInfo, nextItem.PlayerInfo));
예제 #8
0
        public static async Task <Embed> UpdateStalkTopEmbedAsync(TempusDataAccess tempusDataAccess)
        {
            try
            {
                var servers = (await tempusDataAccess.GetServerStatusAsync()).Where(x => x != null).ToArray();
                var users   = servers.Where(x => x.GameInfo != null &&
                                            (x.GameInfo != null || x.ServerInfo != null ||
                                             x.GameInfo.Users != null) &&
                                            x.GameInfo.Users.Count != 0)
                              .SelectMany(x => x.GameInfo.Users).Where(x => x?.Id != null).ToArray();

                var userIdStrings = (from user in users where user?.Id != null select user.Id.ToString()).ToList();

                var rankTasks = new List <Task <Rank> >();
                rankTasks.AddRange(userIdStrings.Select(tempusDataAccess.GetUserRankAsync));


                var ranks = await Task.WhenAll(rankTasks);

                var rankedUsers = ranks.ToDictionary(rank => users.First(x => x.Id == rank.PlayerInfo.Id), rank =>
                                                     rank.ClassRankInfo.DemoRank.Rank <= rank.ClassRankInfo.SoldierRank.Rank
                        ? rank.ClassRankInfo.DemoRank.Rank
                        : rank.ClassRankInfo.SoldierRank.Rank);

                var output      = rankedUsers.OrderBy(x => x.Value).Take(7);
                var rankedLines = "";
                foreach (var(key, value) in output)
                {
                    if (key == null || value > 100)
                    {
                        continue;
                    }
                    var server = servers
                                 .FirstOrDefault(x =>
                                                 x.GameInfo?.Users != null &&
                                                 x.GameInfo.Users.Count(z => z.Id.HasValue && z.Id == key.Id) != 0);
                    if (server == null || key.Id == null)
                    {
                        continue;
                    }
                    rankedLines +=
                        $"Rank {value} - {DiscordHelper.FormatUrlMarkdown(key.Name.EscapeDiscordChars(), TempusHelper.GetPlayerUrl(key.Id.Value))} on {DiscordHelper.FormatUrlMarkdown(server.GameInfo.CurrentMap.EscapeDiscordChars(), TempusHelper.GetMapUrl(server.GameInfo.CurrentMap))} {DiscordHelper.FormatUrlMarkdown(server.ServerInfo.Shortname, TempusHelper.GetServerUrl(server.ServerInfo.Id))}{Environment.NewLine}";
                }

                var builder =
                    new EmbedBuilder {
                    Title = "**Highest Ranked Players Online** (Top 100)", Description = rankedLines
                }
                .WithCurrentTimestamp().WithColor(ColorConstants.InfoColor);
                CachedStalkTopEmbed = builder.Build();
                return(builder.Build());
            }
            catch (Exception e)
            {
                return(Logger.LogException(e));
            }
        }