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); } }
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 }); }
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()); }
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()); }