private async Task SearchFaqs(params string[] queries) { List <FaqData> faqDataList = _updateService.GetFaqData(); // Check if query is faq ID (e.g. "!faq 1") if (queries.Length == 1 && ParseNumber(queries[0]) > 0) { int id = ParseNumber(queries[0]) - 1; if (id < faqDataList.Count) { await ReplyAsync(embed : GetFaqEmbed(id + 1, faqDataList[id])); } else { await ReplyAsync("Invalid FAQ ID selected."); } } // Check if query contains "list" command (i.e. "!faq list") else if (queries.Length > 0 && !(queries.Length == 1 && queries[0].Equals("list"))) { // Calculate the closest match to the input query double minimumScore = double.MaxValue; FaqData mostSimilarFaq = null; string query = String.Join(" ", queries); int index = 1; int mostSimilarIndex = 0; // Go through each FAQ in the list and check the most similar foreach (FaqData faq in faqDataList) { foreach (string keyword in faq.Keywords) { double curScore = CalculateScore(keyword, query); if (curScore < minimumScore) { minimumScore = curScore; mostSimilarFaq = faq; mostSimilarIndex = index; } } index++; } // If an FAQ has been found (should be), return the FAQ, else return information msg if (mostSimilarFaq != null) { await ReplyAsync(embed : GetFaqEmbed(mostSimilarIndex, mostSimilarFaq)); } else { await ReplyAsync("No FAQs Found."); } } else { // List all the FAQs available ListFaqs(faqDataList); } }
private Embed GetFaqEmbed(int id, FaqData faq) { var builder = new EmbedBuilder() .WithTitle($"{faq.Question}") .WithDescription($"{faq.Answer}") .WithColor(new Color(0x33CC00)); return(builder.Build()); }
private void OfflineData() { var faqData = JsonConvert.DeserializeObject <List <FaqData> >(Application.Current.Properties["FAQData"].ToString()); foreach (var item in faqData) { var faqdata = new FaqData() { answer = Common.GetLanguage() == "ar-AE" ? item.answer_arabic : item.answer, answer_arabic = item.answer_arabic, question = Common.GetLanguage() == "ar-AE" ? item.question_arabic : item.question, question_arabic = item.question_arabic, created_date = item.created_date, faq_id = item.faq_id, Icon = "faq_arrow_left.png", IsViewVisible = false, is_active = item.is_active, modified_date = item.modified_date }; AllFaqlist.Add(faqdata); } List = AllFaqlist; }
private string FormatFaq(int id, FaqData faq) { return($"{id}. **{faq.Question}** - {faq.Answer}"); }
/// <summary> /// Creates the data for the specified row. /// </summary> /// <param name="Row">The row.</param> internal Data Create(Row Row) { Data Data; switch (this.Index) { case 1: { Data = new BuildingData(Row, this); break; } case 2: { Data = new LocaleData(Row, this); break; } case 3: { Data = new ResourceData(Row, this); break; } case 4: { Data = new CharacterData(Row, this); break; } case 6: { Data = new ProjectileData(Row, this); break; } case 7: { Data = new BuildingClassData(Row, this); break; } case 8: { Data = new ObstacleData(Row, this); break; } case 9: { Data = new EffectData(Row, this); break; } case 10: { Data = new ParticleEmitterData(Row, this); break; } case 11: { Data = new ExperienceLevelData(Row, this); break; } case 12: { Data = new TrapData(Row, this); break; } case 13: { Data = new AllianceBadgeData(Row, this); break; } case 14: { Data = new GlobalData(Row, this); break; } case 15: { Data = new TownhallLevelData(Row, this); break; } case 16: { Data = new AlliancePortalData(Row, this); break; } case 17: { Data = new NpcData(Row, this); break; } case 18: { Data = new DecoData(Row, this); break; } case 19: { Data = new ResourcePackData(Row, this); break; } case 20: { Data = new ShieldData(Row, this); break; } case 21: { Data = new MissionData(Row, this); break; } case 22: { Data = new BillingPackageData(Row, this); break; } case 23: { Data = new AchievementData(Row, this); break; } case 25: { Data = new FaqData(Row, this); break; } case 26: { Data = new SpellData(Row, this); break; } case 27: { Data = new HintData(Row, this); break; } case 28: { Data = new HeroData(Row, this); break; } case 29: { Data = new LeagueData(Row, this); break; } case 30: { Data = new NewData(Row, this); break; } case 34: { Data = new AllianceBadgeLayerData(Row, this); break; } case 37: { Data = new VariableData(Row, this); break; } case 38: { Data = new GemBundleData(Row, this); break; } case 39: { Data = new VillageObjectData(Row, this); break; } default: { Data = new Data(Row, this); break; } } return(Data); }
private async void DownloadDataAsync() { try { if (Common.CheckConnection()) { IsLoaderBusy = true; FaqDataResponse response; try { response = await _webApiRestClient.GetAsync <FaqDataResponse>(ApiUrl.GetFaqData); } catch (Exception ex) { response = null; IsLoaderBusy = false; await MaterialDialog.Instance.SnackbarAsync(message : AppResource.error_ServerError, msDuration : 3000); } if (response != null) { if (response.status) { Application.Current.Properties["FAQData"] = JsonConvert.SerializeObject(response.faqData); Application.Current.SavePropertiesAsync(); foreach (var item in response.faqData) { var faqdata = new FaqData() { answer = Common.GetLanguage() == "ar-AE" ? item.answer_arabic : item.answer, answer_arabic = item.answer_arabic, question = Common.GetLanguage() == "ar-AE" ? item.question_arabic : item.question, question_arabic = item.question_arabic, created_date = item.created_date, faq_id = item.faq_id, Icon = "faq_arrow_left.png", IsViewVisible = false, is_active = item.is_active, modified_date = item.modified_date }; AllFaqlist.Add(faqdata); } List = AllFaqlist; if (List != null && List.Count > 0) { IsNodataFound = false; } } } else { if (Application.Current.Properties.ContainsKey("FAQData") && !string.IsNullOrEmpty(Application.Current.Properties["FAQData"].ToString()) && !string.IsNullOrWhiteSpace(Application.Current.Properties["FAQData"].ToString())) { OfflineData(); IsNodataFound = false; } } } else { if (Application.Current.Properties.ContainsKey("FAQData") && !string.IsNullOrEmpty(Application.Current.Properties["FAQData"].ToString()) && !string.IsNullOrWhiteSpace(Application.Current.Properties["FAQData"].ToString())) { OfflineData(); IsNodataFound = false; } else { IsNodataFound = false; IsNoInternetView = true; } } } catch (Exception ex) { } finally { IsLoaderBusy = false; } }
private static IEnumerable <FaqData> GetBuiltList(IEnumerable <FaqData> databaseFaqList, IEnumerable <UsefulFaqLinksUtils> faqsOfTemplate) { try { var faqsOfTemplateAux = faqsOfTemplate as IList <UsefulFaqLinksUtils> ?? faqsOfTemplate.ToList(); var firstUsefulFaqLink = faqsOfTemplateAux.FirstOrDefault(); if (firstUsefulFaqLink == null) { //template has no FAQs registered return(null); } var language = firstUsefulFaqLink.Language; var databaseFaqListConverted = new List <FaqDescription>(); foreach (var item in databaseFaqList) { try { Log.DebugFormat("faq description: {0}", item.Description); var descriptor = new FaqDescription(item.Description); descriptor.OriginalData = item; if (!descriptor.IsValid()) { Log.WarnFormat("faq description not valid for {0}", descriptor.Id); continue; } databaseFaqListConverted.Add(descriptor); } catch (Exception e) { Log.Error(e); continue; } } var resultList = new List <FaqData>(); foreach (var requestedFaq in faqsOfTemplateAux) { var faq = requestedFaq; var matchingFaQs = databaseFaqListConverted.Where(d => d.Id == faq.Id); var matchingFaQsArray = matchingFaQs as FaqDescription[] ?? matchingFaQs.ToArray(); if (!matchingFaQsArray.Any()) { //not found in db Log.WarnFormat("faq description {0} not appliable for schema ", requestedFaq.Id); continue; } var exactLanguageMatching = matchingFaQsArray.FirstOrDefault(f => f.Language.EqualsIc(language)); var faqDescriptionToUse = exactLanguageMatching; if (exactLanguageMatching == null) { var englishFallBack = matchingFaQsArray.FirstOrDefault(f => f.Language.EqualsIc("E")); if (englishFallBack != null) { Log.DebugFormat("applying default english fallback FAQ for id {0}", requestedFaq.Id); faqDescriptionToUse = englishFallBack; } else { Log.WarnFormat("No FAQ {0} found for language {1}, neither an english one", requestedFaq.Id, language); continue; } } var data = new FaqData(faqDescriptionToUse.OriginalData.SolutionId, faqDescriptionToUse.Id, faqDescriptionToUse.RealDescription, faqDescriptionToUse.Language); resultList.Add(data); } return(resultList); } catch { return(null); } }