コード例 #1
0
        // thanks BCES00569
        public static async Task <List <DiscordEmbedBuilder> > AsEmbedAsync(this TitlePatch patch, DiscordClient client, string productCode)
        {
            var result = new List <DiscordEmbedBuilder>();
            var pkgs   = patch?.Tag?.Packages;
            var title  = pkgs?.Select(p => p.ParamSfo?.Title).LastOrDefault(t => !string.IsNullOrEmpty(t))
                         ?? await ThumbnailProvider.GetTitleNameAsync(productCode, Config.Cts.Token).ConfigureAwait(false)
                         ?? productCode;

            var thumbnailUrl = await client.GetThumbnailUrlAsync(productCode).ConfigureAwait(false);

            var embedBuilder = new DiscordEmbedBuilder
            {
                Title = title,
                Color = Config.Colors.DownloadLinks,
            }.WithThumbnail(thumbnailUrl);

            if (pkgs?.Length > 1)
            {
                var pages = pkgs.Length / EmbedPager.MaxFields + (pkgs.Length % EmbedPager.MaxFields == 0 ? 0 : 1);
                if (pages > 1)
                {
                    embedBuilder.Title = $"{title} [Part 1 of {pages}]".Trim(EmbedPager.MaxFieldTitleLength);
                }
                embedBuilder.Description = $"Total download size of all {pkgs.Length} packages is {pkgs.Sum(p => p.Size).AsStorageUnit()}";
                var i = 0;
                do
                {
                    var pkg = pkgs[i++];
                    embedBuilder.AddField($"Update v{pkg.Version} ({pkg.Size.AsStorageUnit()})", $"[⏬ {GetLinkName(pkg.Url)}]({pkg.Url})");
                    if (i % EmbedPager.MaxFields == 0)
                    {
                        result.Add(embedBuilder);
                        embedBuilder = new DiscordEmbedBuilder
                        {
                            Title = $"{title} [Part {i / EmbedPager.MaxFields + 1} of {pages}]".Trim(EmbedPager.MaxFieldTitleLength),
                            Color = Config.Colors.DownloadLinks,
                        }.WithThumbnail(thumbnailUrl);
                    }
                } while (i < pkgs.Length);
            }
            else if (pkgs?.Length == 1)
            {
                embedBuilder.Title       = $"{title} update v{pkgs[0].Version} ({pkgs[0].Size.AsStorageUnit()})";
                embedBuilder.Description = $"[⏬ {Path.GetFileName(GetLinkName(pkgs[0].Url))}]({pkgs[0].Url})";
            }
            else if (patch != null)
            {
                embedBuilder.Description = "No updates available";
            }
            else
            {
                embedBuilder.Description = "No update information available";
            }
            if (!result.Any() || embedBuilder.Fields.Any())
            {
                result.Add(embedBuilder);
            }
            return(result);
        }
コード例 #2
0
ファイル: PSNClient.cs プロジェクト: freza1/Vita3KBot
        public static Embed GetTitlePatch(string titleId)
        {
            string url = ConvertTitleIDToHash(titleId);

            // Needed to bypass certificate errors
            ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;

            var noUpdatesEmbed = new EmbedBuilder
            {
                Title       = titleId,
                Description = $"No updates were found for {titleId}",
                Color       = Color.Orange
            };

            XmlDocument xmlDoc = new XmlDocument();

            // Almost all games with no updates don't return an empty XML so i'm forced to do this hack
            // We also can't differentiate between valid IDs and games with no updates
            try { xmlDoc.Load(url); }
            catch (WebException) { return(noUpdatesEmbed.Build()); }
            catch (XmlException) { return(noUpdatesEmbed.Build()); }

            using (XmlReader reader = XmlReader.Create(url))
            {
                TitlePatch patch = (TitlePatch)PatchesSerializer.Deserialize(reader);

                var pkgs   = patch.Tag.Package;
                var title  = pkgs.Select(p => p.Sfo?.Title).LastOrDefault(t => !string.IsNullOrEmpty(t));
                var Covers = JsonConvert.DeserializeObject <Root>(File.ReadAllText("./APIClients/PSNClient/Covers.json")); // Relative to Bot.cs

                string coverURL = string.Empty;
                for (int i = 0; i < Covers.IDs.Length; i++)
                {
                    if (Covers.IDs[i].ID == titleId)
                    {
                        coverURL = Covers.IDs[i].cover;
                        break;
                    }
                }

                var patchEmbed = new EmbedBuilder();
                patchEmbed.Title = title;
                patchEmbed.Color = Color.Orange;
                patchEmbed.WithFooter(f => f.Text = $"Content ID: {patch.Tag.Package[0].ContentId}");
                if (coverURL != null)
                {
                    patchEmbed.ThumbnailUrl = coverURL;
                }

                // Credit to RPCS3-Bot (13xforever) for this code https://github.com/RPCS3/discord-bot - https://github.com/13xforever
                if (pkgs.Length > 1)
                {
                    var i = 0;
                    do
                    {
                        var pkg = pkgs[i++];
                        patchEmbed.AddField($"Update v{pkg.Version} - ({ToMB(pkg.Size)}MB) - Min Firmware: {FormatSysVer(pkg.SysVer)}", $"[{pkg.Url.Substring(103, 28)}.pkg]({pkg.Url})");
                    } while (i < pkgs.Length);

                    patchEmbed.AddField($"Hybrid Package ({ToMB(pkgs[pkgs.Length - 1].HybridPackage.Size)}MB) - " +
                                        $"Min Firmware: {FormatSysVer(pkgs[pkgs.Length - 1].SysVer)}", $"[{pkgs[pkgs.Length - 1].Url.Substring(103, 28)}.pkg]({pkgs[pkgs.Length - 1].HybridPackage.Url})");
                    patchEmbed.Description            = $"Content ID: {pkgs[0].ContentId}";
                    patchEmbed.WithFooter(f => f.Text = $"Note: Hybrid Packages contain all previous updates");
                }
                else if (pkgs.Length == 1)
                {
                    patchEmbed.Title       = $"{pkgs[0].Sfo.Title} v{pkgs[0].Version} ({ToMB(pkgs[0].Size)}MB)";
                    patchEmbed.Description = $"[{pkgs[0].Url.Substring(103, 28)}.pkg]({pkgs[0].Url})";
                    patchEmbed.AddField("Min Firmware", $"{FormatSysVer(pkgs[0].SysVer)}");
                }

                return(patchEmbed.Build());
            }
        }