Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 4
0
 private string FormatFaq(int id, FaqData faq)
 {
     return($"{id}. **{faq.Question}** - {faq.Answer}");
 }
Exemplo n.º 5
0
        /// <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;
     }
 }
Exemplo n.º 7
0
        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);
            }
        }