protected override async Task RunAppSpecificBootTasks()
        {
            // Initialize the FileCache if first run is complete
            if (Configuration.LoadedConfiguration.FirstRunCompleted)
            {
                FileCache.Initialize();
            }

            // Initialize the RomResourceLoader
            RomResourceLoader.Initialize();

            // Initialize the BlitzLocalizer
            BlitzLocalizer.Initialize();

            // Load GameConfigSetting
            XDocument gameConfig = XDocument.Load(RomResourceLoader.GetRomFile("/System/GameConfigSetting.xml"));

            // Get the application version
            int appVersion = int.Parse(gameConfig.Root
                                       .Elements("category").Where(e => e.Attribute("name").Value == "Root").First()
                                       .Elements("category").Where(e => e.Attribute("name").Value == "Project").First()
                                       .Elements("category").Where(e => e.Attribute("name").Value == "Version").First()
                                       .Elements("parameter").Where(e => e.Attribute("name").Value == "AppVersion").First()
                                       .Attribute("defaultValue").Value);

            // Output the ROM version
            await DiscordBot.LoggingChannel.SendMessageAsync($"**[JelonzoBotBootHousekepingJob]** ROM version {appVersion} was loaded by RomResourceLoader");

            // Get the ROM config
            RomConfig romConfig = (Configuration.LoadedConfiguration as JelonzoBotConfiguration).RomConfig;

            // Check if this version is new compared to the last boot
            if (romConfig.LastRomVersion < appVersion)
            {
                // Create a JobDataMap to hold the version
                JobDataMap dataMap = new JobDataMap();
                dataMap.Add("version", appVersion);

                // Upload necessary ROM data after everything is initalized
                await QuartzScheduler.ScheduleJob <RomDataUploadJob>("Normal", DateTime.Now.AddSeconds(5), dataMap);
            }
        }
Esempio n. 2
0
        public override MessageProperties CreateMessageProperties()
        {
            // Get the current phase
            CoopPhase phase = phases[this.CurrentPage];

            // Build the weapon string
            string weapons = string.Join('\n', phase.WeaponSets.Select(x => BlitzLocalizer.LocalizeWeapon(x, language)));

            // Build an Embed
            Embed embed = new EmbedBuilder()
                          .WithTitle(Localizer.Localize("coop.title", language))
                          .AddField(Localizer.Localize("coop.start_time", language), phase.StartDateTime <= DateTime.UtcNow ? Localizer.Localize("coop.start_time_now", language) : Localizer.LocalizeDateTime(phase.StartDateTime, language))
                          .AddField(Localizer.Localize("coop.end_time", language), Localizer.LocalizeDateTime(phase.EndDateTime, language))
                          .AddField(Localizer.Localize("coop.stage", language), BlitzLocalizer.LocalizeStage(phase.StageId, language))
                          .AddField(Localizer.Localize("coop.weapons", language), weapons)
                          .Build();

            // Return the Embed in a MessageProperties
            return(new MessageProperties()
            {
                Embed = embed
            });
        }
Esempio n. 3
0
        public async Task Execute(string romTypeStr = null, string languageStr = null)
        {
            // Parse the specified RomType
            RomType romType;

            if (romTypeStr != null)
            {
                // Get the RomType
                romType = (RomType)EnumUtil.GetEnumValueFromString(typeof(RomType), romTypeStr);
            }
            else
            {
                // Default to North America
                romType = RomType.NorthAmerica;
            }

            // Get the FestivalSetting for the specified RomType
            FestivalSetting festivalSetting = FileCache.GetLatestFestivalSettingForRomType(romType);

            // Get the default language
            Language language = DiscordUtil.GetDefaultLanguage(Context.Guild, languageStr);

            // Get the Color for the neutral team
            System.Drawing.Color drawingColor = festivalSetting.Teams[2].GetColor4fAsColor();

            // Localize the RomType
            string localizedRomType = Localizer.Localize($"romtype.{romType.ToString().ToLower()}", language);

            // Use the special title if necessary
            string title;

            if (festivalSetting.SpecialType != null)
            {
                // Localize the special type
                string localizedSpecialType = Localizer.Localize($"festival.special_type.{festivalSetting.SpecialType.ToLower()}", language);

                // Localize the title
                title = string.Format(Localizer.Localize("festival.title_special", language), localizedRomType, localizedSpecialType);
            }
            else
            {
                // Use the standard title
                title = string.Format(Localizer.Localize("festival.title", language), localizedRomType);
            }

            // Begin building an embed
            EmbedBuilder embedBuilder = new EmbedBuilder()
                                        .WithTitle(title)
                                        .AddField(Localizer.Localize("festival.team_alpha", language), $"**{festivalSetting.Teams[0].Name[language]}**", true)
                                        .AddField(Localizer.Localize("festival.team_bravo", language), $"**{festivalSetting.Teams[1].Name[language]}**", true)
                                        .AddField(Localizer.Localize("festival.rule", language), BlitzLocalizer.LocalizeRule(festivalSetting.VersusRule, language), true)
                                        .AddField(Localizer.Localize("festival.special_stage", language), BlitzLocalizer.LocalizeStage(festivalSetting.SpecialStage, language), true)
                                        .AddField(Localizer.Localize("festival.announcement_time", language), Localizer.LocalizeDateTime(festivalSetting.Times.Announcement, language))
                                        .AddField(Localizer.Localize("festival.period", language), string.Format(Localizer.Localize("festival.period_format", language), Localizer.LocalizeDateTime(festivalSetting.Times.Start, language), Localizer.LocalizeDateTime(festivalSetting.Times.End, language)))
                                        .AddField(Localizer.Localize("festival.results_time", language), Localizer.LocalizeDateTime(festivalSetting.Times.Result, language))
                                        .WithImageUrl($"https://cdn.oatmealdome.me/splatoon/festival/{romType.ToString()}/{festivalSetting.FestivalId}/panel.png")
                                        .WithColor(new Color(drawingColor.R, drawingColor.G, drawingColor.B));

            await Context.Channel.SendMessageAsync(embed : embedBuilder.Build());
        }
Esempio n. 4
0
        public static async Task HandleFestival(RomType romType, Dictionary <string, byte[]> data, FestivalSetting previousFestival, FestivalSetting newFestival, byte[] rawFile)
        {
            // Don't do anything
            if (previousFestival.FestivalId == newFestival.FestivalId)
            {
                return;
            }

            // Get the Color for the neutral team
            System.Drawing.Color drawingColor = newFestival.Teams[2].GetColor4fAsColor();

            // Localize the times
            Dictionary <Language, string> startTime = Localizer.LocalizeDateTimeToAllLanguages(newFestival.Times.Start);
            Dictionary <Language, string> endTime   = Localizer.LocalizeDateTimeToAllLanguages(newFestival.Times.End);

            // Create the format parameters
            Dictionary <Language, object[]> formatParams = new Dictionary <Language, object[]>();

            foreach (Language language in BlitzUtil.SupportedLanguages)
            {
                formatParams[language] = new object[] { startTime[language], endTime[language] };
            }

            // Format the final string
            Dictionary <Language, string> periodStr = Localizer.LocalizeToAllLanguagesWithFormat("festival.period_format", BlitzUtil.SupportedLanguages, formatParams);

            Dictionary <Language, string> AddMissingLocalizations(Dictionary <Language, string> originalDict)
            {
                // Add any missing strings for team alpha
                Dictionary <Language, string> names = new Dictionary <Language, string>();

                foreach (Language language in BlitzUtil.SupportedLanguages)
                {
                    // Try getting the name from the original dictionary
                    if (originalDict.TryGetValue(language, out string name))
                    {
                        names.Add(language, $"**{name}**");
                    }
                    else
                    {
                        // Use the RomType to get the name
                        switch (romType)
                        {
                        case RomType.NorthAmerica:
                            names.Add(language, $"**{originalDict[Language.EnglishUS]}**");
                            break;

                        case RomType.Europe:
                            names.Add(language, $"**{originalDict[Language.EnglishUK]}**");
                            break;

                        case RomType.Japan:
                            names.Add(language, $"**{originalDict[Language.Japanese]}**");
                            break;

                        default:
                            throw new Exception("Unsupported RomType");
                        }
                    }
                }

                return(names);
            }

            // Add any missing strings for the teams
            Dictionary <Language, string> alphaNames = AddMissingLocalizations(newFestival.Teams[0].Name);
            Dictionary <Language, string> bravoNames = AddMissingLocalizations(newFestival.Teams[1].Name);

            // Localize the RomType
            Dictionary <Language, string> localizedRomType = Localizer.LocalizeToAllLanguages($"romtype.{romType.ToString().ToLower()}");

            // Use the special title if necessary
            Dictionary <Language, string> localizedTitle;

            if (newFestival.SpecialType != null)
            {
                // Localize the special type
                Dictionary <Language, string> localizedSpecialTypes = Localizer.LocalizeToAllLanguages($"festival.special_type.{newFestival.SpecialType.ToLower()}");

                // Create the format parameters
                formatParams = new Dictionary <Language, object[]>();
                foreach (Language language in BlitzUtil.SupportedLanguages)
                {
                    formatParams[language] = new object[] { localizedRomType[language], localizedSpecialTypes[language] };
                }

                // Localize the title
                localizedTitle = Localizer.LocalizeToAllLanguagesWithFormat("festival.title_special", BlitzUtil.SupportedLanguages, formatParams);
            }
            else
            {
                // Create the format parameters
                formatParams = new Dictionary <Language, object[]>();
                foreach (Language language in BlitzUtil.SupportedLanguages)
                {
                    formatParams[language] = new object[] { localizedRomType[language] };
                }

                // Localize the title
                localizedTitle = Localizer.LocalizeToAllLanguagesWithFormat("festival.title", BlitzUtil.SupportedLanguages, formatParams);
            }

            // Start building the embed
            LocalizedEmbedBuilder embedBuilder = new LocalizedEmbedBuilder(BlitzUtil.SupportedLanguages)
                                                 .WithTitle(localizedTitle)
                                                 .AddField("festival.team_alpha", alphaNames, true)
                                                 .AddField("festival.team_bravo", bravoNames, true)
                                                 .AddField("festival.rule", BlitzLocalizer.LocalizeRuleToAllLanguages(newFestival.VersusRule), true)
                                                 .AddField("festival.special_stage", BlitzLocalizer.LocalizeStageToAllLanguages(newFestival.SpecialStage), true)
                                                 .AddField("festival.announcement_time", Localizer.LocalizeDateTimeToAllLanguages(newFestival.Times.Announcement))
                                                 .AddField("festival.period", periodStr)
                                                 .AddField("festival.results_time", Localizer.LocalizeDateTimeToAllLanguages(newFestival.Times.Result))
                                                 .WithImageUrl($"https://cdn.oatmealdome.me/splatoon/festival/{romType.ToString()}/{newFestival.FestivalId}/panel.png")
                                                 .WithColor(new Color(drawingColor.R, drawingColor.G, drawingColor.B));

            // Send the notification
            await DiscordBot.SendNotificationAsync("**[Splatfest]**", embedBuilder.Build());
        }