public DiscordEmbed Build(LaunchInfo launch, ulong?guildId, bool informAboutSubscription) { var embed = new DiscordEmbedBuilder { Title = $"{launch.FlightNumber}. {launch.Name} ({launch.Rocket.Value.Name} {launch.Rocket.Value.Type})", Description = launch.Details.ShortenString(1024) ?? "*No description at this moment :(*", Color = new DiscordColor(Constants.EmbedColor), Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail { Url = launch.Links.Patch.Large ?? Constants.SpaceXLogoImage } }; var launchDateTime = DateFormatter.GetDateStringWithPrecision( launch.DateUtc ?? DateTime.MinValue, launch.DatePrecision ?? DatePrecision.Year, true, true, true); embed.AddField(":clock4: Launch time (UTC)", launchDateTime, true); if (guildId != null) { var localLaunchDateTime = GetLocalLaunchDateTime( guildId.Value, launch.DateUtc ?? DateTime.MinValue, launch.DatePrecision ?? DatePrecision.Year); var timeZoneName = _timeZoneService.GetTimeZoneForGuild(guildId.Value); if (timeZoneName != null) { embed.AddField($":clock230: Launch time ({timeZoneName})", localLaunchDateTime); } } var googleMapsLink = $"[Map]({GoogleMapsLinkFormatter.GetGoogleMapsLink(launch.Launchpad.Value.Latitude ?? 0.0, launch.Launchpad.Value.Longitude ?? 0.0)})"; embed.AddField(":stadium: Launchpad", $"{launch.Launchpad.Value.FullName} **[{googleMapsLink}]**"); embed.AddField($":rocket: First stages ({1 + launch.Rocket.Value.Boosters})", GetCoresData(launch.Cores)); embed.AddField($":package: Payloads ({launch.Payloads.Count})", GetPayloadsData(launch.Payloads)); embed.AddField(":recycle: Reused parts", GetReusedPartsData(launch)); var linksData = GetLinksData(launch); if (linksData.Length > 0) { embed.AddField(":newspaper: Links", linksData); } if (informAboutSubscription) { embed.AddField("\u200b", "*Click the reaction below to subscribe this flight and be notified on DM 10 minutes before the launch.*"); } return(embed); }
public string Build(List <LaunchInfo> launches, CacheContentType contentType, int currentPage, string paginationFooter) { launches = launches.OrderBy(p => p.FlightNumber ?? 0).ToList(); var launchesListBuilder = new StringBuilder(); launchesListBuilder.Append($":rocket: **{_listHeader[contentType]}**"); launchesListBuilder.Append("\r\n"); launchesListBuilder.Append("```"); launchesListBuilder.Append("No. ".PadRight(MissionNumberLength)); launchesListBuilder.Append("Mission name".PadRight(MissionNameLength)); launchesListBuilder.Append("Launch time UTC".PadRight(LaunchDateLength)); launchesListBuilder.Append("Launch site".PadRight(SiteNameLength)); launchesListBuilder.Append("Landing".PadRight(LandingLength)); launchesListBuilder.Append("\r\n"); launchesListBuilder.Append(new string('-', TotalLength)); launchesListBuilder.Append("\r\n"); foreach (var launch in launches) { var launchDateTime = DateFormatter.GetDateStringWithPrecision( launch.DateUtc ?? DateTime.MinValue, launch.DatePrecision ?? DatePrecision.Year, false, false, false); launchesListBuilder.Append($"{launch.FlightNumber ?? 0}.".PadRight(MissionNumberLength)); launchesListBuilder.Append(launch.Name.ShortenString(MissionNameLength - 2).PadRight(MissionNameLength)); launchesListBuilder.Append(launchDateTime.PadRight(LaunchDateLength)); launchesListBuilder.Append((launch.Launchpad.Value.Name ?? "?").PadRight(SiteNameLength)); if (launch.DatePrecision == DatePrecision.Hour && launch.DateUtc < DateTime.UtcNow) { var landing = launch.Cores.Any(p => p.LandingType != null && p.LandingType != "Ocean"); launchesListBuilder.Append(landing.ConvertToYesNo(false).PadRight(LandingLength)); launchesListBuilder.Append("\r\n"); } else { launchesListBuilder.Append("?\r\n"); } } launchesListBuilder.Append("\r\n"); launchesListBuilder.Append("Type \"e!GetLaunch number\" (e.g. e!GetLaunch 45) to get more information."); launchesListBuilder.Append("\r\n"); launchesListBuilder.Append(paginationFooter); launchesListBuilder.Append("\r\n"); launchesListBuilder.Append("```"); return(launchesListBuilder.ToString()); }
private string GetLocalLaunchDateTime(ulong guildId, DateTime utc, DatePrecision precision) { var convertedToLocal = precision == DatePrecision.Hour ? _timeZoneService.ConvertUtcToLocalTime(guildId, utc) : utc; if (convertedToLocal == null) { return(null); } return(DateFormatter.GetDateStringWithPrecision(convertedToLocal.Value, precision, false, true, true)); }
public DiscordEmbed Build(LaunchNotification launchNotification) { var oldLaunchState = launchNotification.OldLaunchState; var launch = launchNotification.NewLaunchState; var embed = new DiscordEmbedBuilder { Color = new DiscordColor(Constants.EmbedColor), Thumbnail = new DiscordEmbedBuilder.EmbedThumbnail { Url = launch.Links.Patch.Large ?? Constants.SpaceXLogoImage } }; var launchTme = launch.DateUtc ?? DateTime.MinValue; var now = DateTime.Now.ToUniversalTime(); var timeLeft = (launchTme - now).TotalMinutes; switch (launchNotification.Type) { case LaunchNotificationType.Reminder: { var timeLeftDescription = timeLeft > 60 ? Math.Ceiling(timeLeft / 60) + " hours" : Math.Ceiling(timeLeft) + " minutes"; var descriptionBuilder = new StringBuilder(); descriptionBuilder.Append($"**{timeLeftDescription}** to launch **{launch.Name}**! "); descriptionBuilder.Append($"Type `e!NextLaunch` to get more information."); embed.Title = ":rocket: Launch is coming!"; embed.Description = descriptionBuilder.ToString(); break; } case LaunchNotificationType.Scrub: { var oldLaunchDate = DateFormatter.GetDateStringWithPrecision( oldLaunchState.DateUtc ?? DateTime.MinValue, oldLaunchState.DatePrecision ?? DatePrecision.Year, true, true, true); var newLaunchDate = DateFormatter.GetDateStringWithPrecision( launch.DateUtc ?? DateTime.MinValue, launch.DatePrecision ?? DatePrecision.Year, true, true, true); var descriptionBuilder = new StringBuilder(); descriptionBuilder.Append($"**{launch.Name}** launch time has been changed from "); descriptionBuilder.Append($"**{oldLaunchDate}** to "); descriptionBuilder.Append($"**{newLaunchDate}**. "); descriptionBuilder.Append($"Type `e!NextLaunch` to get more information."); embed.Title = ":warning: Scrub!"; embed.Description = descriptionBuilder.ToString(); break; } case LaunchNotificationType.NewTarget: { var nextLaunchDate = DateFormatter.GetDateStringWithPrecision( launchNotification.NewLaunchState.DateUtc ?? DateTime.MinValue, launchNotification.NewLaunchState.DatePrecision ?? DatePrecision.Year, true, true, true); var descriptionBuilder = new StringBuilder(); descriptionBuilder.Append($"The next launch will be **{launchNotification.NewLaunchState.Name}** on **{nextLaunchDate}**. "); descriptionBuilder.Append($"Type `e!NextLaunch` to get more information."); embed.Title = ":rocket: New target!"; embed.Description = descriptionBuilder.ToString(); break; } } embed.AddField("\u200b", "*Click the reaction below to subscribe this flight and be notified on DM 10 minutes before the launch.*"); return(embed); }