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 DiscordEmbed Build(List <LaunchpadInfo> launchpads) { var embedBuilder = new DiscordEmbedBuilder { Title = "List of SpaceX launchpads", Color = new DiscordColor(Constants.EmbedColor) }; var sortedLaunchpads = launchpads.OrderBy(p => p.FullName).ToList(); var lastLaunchpad = sortedLaunchpads.Last(); foreach (var launchpad in sortedLaunchpads) { var responseBuilder = new StringBuilder(); responseBuilder.Append($"**[[Map]({GoogleMapsLinkFormatter.GetGoogleMapsLink(launchpad.Latitude ?? 0, launchpad.Longitude ?? 0)})]** "); responseBuilder.Append(launchpad.Status); responseBuilder.Append("\r\n"); if (launchpad != lastLaunchpad) { responseBuilder.Append('\u200b'); } var title = ":stadium: " + launchpad.FullName; switch (launchpad.Status) { case LaunchpadStatus.UnderConstruction: title += " (under construction)"; break; case LaunchpadStatus.Retired: title += " (retired)"; break; } embedBuilder.AddField(title, responseBuilder.ToString()); } return(embedBuilder); }