private async Task <int> AnaliseSearchCustomerResult(List <FuzzySearchResult> result) { string message; switch (result.Count) { case 0: message = GetBeauteCustomersString(); if (botUser.IsNewUser) { message = texter.GetMessage("%start%") + "\\r\\n\\r\\n" + texter.GetMessage("%mallsearchstart%", "%malls%", message); await sender.SendText(message); } else { message = texter.GetMessage("%ctmrsearchfail%") + "\\r\\n\\r\\n" + texter.GetMessage("%mallsearchstart%", "%malls%", message); await sender.SendText(message); } return(1); case 1: cacher.Remove($"SETCUSTOMER{botUser.BotUserID}"); // изменям информацию по пользователю botUser.CustomerCompositeID = result[0].CustomersKey; botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization; botUser.ModifiedDate = DateTime.Now; message = texter.GetMessage("%ctmrsearchoneres%", "%mall%", result[0].Name, result[0].LocaleCity) + "\\r\\n\\r\\n" + texter.GetMessage("%orgsearchstart%", "%mall%", result[0].Name + " " + result[0].LocaleCity); await sender.SendText(message); return(1); default: string p = ""; for (int i = 0; i < result.Count; i++) { if (botUser.Locale == "ru_RU" || result[i].LocaleCity.Length == 1) { p += $"{BotTextHelper.GetEmojiNumber(i + 1)} " + result[i].Name + " " + result[i].LocaleCity[0] + "\\r\\n"; } else { p += $"{BotTextHelper.GetEmojiNumber(i+1)} " + result[i].Name + " " + result[i].LocaleCity[1] + "\\r\\n"; } } await sender.SendText(texter.GetMessage("%ctmrsearchmanyres%", "%malls%", p)); string customersIDs = ""; foreach (var item in result) { customersIDs += item.CustomersKey + ";"; } cacher.Set($"SETCUSTOMER{botUser.BotUserID}", customersIDs, 35); return(1); } }
private string GetBeauteCustomersString() { var customers = dataGetter.GetStructuredCustomers(Convert.ToBoolean(botUser.IsTestMode)); string message = ""; int number = 1; foreach (var dbData in customers) { foreach (var customer in dbData.Customers) { if (botUser.Locale == "ru_RU" || customer.LocaleCity.Length == 1) { message += $"{BotTextHelper.GetEmojiNumber(number)} " + customer.Name + " " + customer.LocaleCity[0] + "\\r\\n"; } else { message += $"{BotTextHelper.GetEmojiNumber(number)} " + customer.Name + " " + customer.LocaleCity[1] + "\\r\\n"; } number++; } } return(message); }
public async Task <BotUserRequest> Main(object usefulData) { string query = ""; if (botUser.InputDataType == InputDataType.Text) { //добавлена возможность задать вопрос пользователю. isQuestion - кэшированный флаг. Говорит о том, что текущее сообщение это вопрос от пользователя #region Question query = usefulData.ToString(); var isQuestion = cacheHelper.Get($"QUESTION{botUser.BotUserVKID}"); //isQuestion - кэшированный флаг. Говорит о том, что текущее сообщение это вопрос от пользователя if (isQuestion != null && query != "назад" && query != "вопрос") { cacheHelper.Remove($"QUESTION{botUser.BotUserVKID}"); // пересылаем оператору, ID которого указано в конфиг файле thisRequest.IsSendingError = await VK.SendMessage(ulong.Parse(ConfigurationManager.AppSettings["OperatorVKID"]), $"Вопрос:\r\n{query}\U00002753\r\n\r\nКто задал -> https://vk.com/id{botUser.BotUserVKID} \U00002709"); if (thisRequest.IsSendingError == 0) {// все ок await sendHelper.SendText(textHelper.GetMessage("%questionsuccss%")); return(thisRequest); } else {// произошла ошибка при отправке сообщения оператору await sendHelper.SendText(textHelper.GetMessage("%questionfail%")); return(thisRequest); } } #endregion if (await AnaliseCommands(query) == 1) { return(thisRequest); } } var office = new DBHelpers.Models.MFCModels.Office(); var searchHelper = new SearchHelper(mfcDataOfBot); object alreadyFinded; switch (botUser.NowIs) { case MFCBotWhatIsHappeningNow.SettingOffice: #region SetOffice // включение/отключение расписаний филиалов if (ConfigurationManager.AppSettings["Schedules"] == "Enable") { mfcDataOfBot.Offices = SetSchedules(mfcDataOfBot.Offices); } List <FuzzySearchResult> result = null; switch (botUser.InputDataType) { case InputDataType.Image: //хз ваще break; case InputDataType.GeoLocation: result = searchHelper.SearchOfficeByGeocode((DbGeography)usefulData); thisRequest.Answer = GetAnswer(result); break; case InputDataType.Text: alreadyFinded = cacheHelper.Get($"SETOFFICES{botUser.BotUserVKID}"); if (alreadyFinded == null) { result = searchHelper.SearchOfficeByName(query); thisRequest.Answer = GetAnswer(result); } else { result = searchHelper.SearchOfficeByName(query, (string)alreadyFinded); thisRequest.Answer = GetAnswer(result); } break; } if (result.Count == 1 && ConfigurationManager.AppSettings["IsTestMode"] != "off") { result = DoDummy(); } thisRequest.Answer = GetAnswer(result); await AnaliseSearchOfficeResult(result); #endregion break; case MFCBotWhatIsHappeningNow.SettingOpportunity: //новый флаг! нужен для идентификации выбора (проверить статус/записаться на услугу) #region SetOpp int numFromList; if (int.TryParse(query, out numFromList) && (numFromList == 1 || numFromList == 2)) { if (numFromList == 1) // выбрана проверка статуса { botUser.NowIs = MFCBotWhatIsHappeningNow.GetingTicketInformation; office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); await sendHelper.SendText(textHelper.GetMessage("%gtinfstart%", new string[] { "%officename%", "%adress%", "%business%" }, new string[] { office.DisplayName, office.DisplayAddress, GetBusynessOffice(office.AisMFCID) })); } if (numFromList == 2) // выбрана запись на услугу { botUser.NowIs = MFCBotWhatIsHappeningNow.SettingService; office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); await SelectSendSetTenPopularServices(office.DisplayName, office.AisMFCID, office.DisplayAddress); } } else { // что-то другое await sendHelper.SendText(textHelper.GetMessage("%slctopfail%")); } #endregion break; case MFCBotWhatIsHappeningNow.SettingService: #region SetService alreadyFinded = cacheHelper.Get($"SETSERVICE{botUser.BotUserVKID}"); if (alreadyFinded == null) { alreadyFinded = cacheHelper.Get($"SETSERVICES{botUser.BotUserVKID}"); if (alreadyFinded == null) { office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); await SelectSendSetTenPopularServices(office.DisplayName, office.AisMFCID, office.DisplayAddress); return(thisRequest); } //если есть информация о множестве услуг, значит ведем поиск по ним if (int.TryParse(query, out numFromList)) { //теперь поиск ведется по секциям, а не сервисам result = searchHelper.SearchSectionByName(query, (string)alreadyFinded); thisRequest.Answer = GetAnswer(result); if (result.Count == 0) { await sendHelper.SendText(textHelper.GetMessage("%slctsrvicefail%")); return(thisRequest); } } else { if (alreadyFinded.ToString().Last() == '¡' || alreadyFinded.ToString().Last() == '!') //в данном случае, это флаг, который говорит, что кэшированные данные относятся к списку 10-ти самых популярных услуг { //теперь поиск ведется по секциям, а не сервисам result = searchHelper.SearchSectionByName(query); thisRequest.Answer = GetAnswer(result); } else { await sendHelper.SendText(textHelper.GetMessage("%slctsrvicesucs%")); return(thisRequest); } } await AnaliseSearchServiceResult(result); } else // если есть информация об услуге, значит ждем подтвержденеия { if (!string.IsNullOrWhiteSpace(query) && query == "да") { var service = mfcDataOfBot.Sections.FirstOrDefault(x => x.SectionID == (int)alreadyFinded); office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); var message = textHelper.GetMessage("%talon%"); var talon = mfcservice.Enqueue(service.SectionID, botUser.OfficeID); if (talon == null || talon?.ID == 0) //аис не выдал талон => не поставил пользователя в очередь { await sendHelper.SendText(textHelper.GetMessage("%talonerr%")); } else { message = Analiser.AnaliseTalon(talon, message, service.Name, office); botUser.TalonID = talon.ID; botUser.ServiceID = service.SectionID; botUser.NowIs = MFCBotWhatIsHappeningNow.QueueWaiting; await sendHelper.SendText(message); } cacheHelper.Clear(botUser.BotUserVKID); } else { office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); await SelectSendSetTenPopularServices(office.DisplayName, office.AisMFCID, office.DisplayAddress); } cacheHelper.Remove($"SETSERVICE{botUser.BotUserVKID}"); } #endregion break; case MFCBotWhatIsHappeningNow.GetingTicketInformation: #region GetTicketInfo office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); if (int.TryParse(query, out numFromList)) { //проверяем введенный номер await sendHelper.SendText(Analiser.GetAnalysedAnswer(botUser, office, numFromList, textHelper, mfcDataOfBot.WindowsOffices)); } else { await sendHelper.SendText(textHelper.GetMessage("%gtinfstart%", //начальное сообщение new string[] { "%officename%", "%adress%", "%business%" }, new string[] { office.DisplayName, office.DisplayAddress, GetBusynessOffice(office.AisMFCID) })); } #endregion break; case MFCBotWhatIsHappeningNow.QueueWaiting: #region QueueWait //var rnd = new Random(); //var joke = mfcDataOfBot.Jokes[rnd.Next(mfcDataOfBot.Jokes.Count)]; //await sendHelper.BotSendText(joke.Text); //thisRequest.Answer = "joke"; await sendHelper.SendText(textHelper.GetMessage("%waitinghelp%", "%number%", BotTextHelper.GetEmojiNumber((int)botUser.TalonID))); #endregion break; } return(thisRequest); }
public async Task <int> AnalyseSearchOrganizationForWayResult() { var cacher = new CacheHelper(); switch (answer.Result.QueryResults.Count) { case 0: await sender.SendText(texter.GetMessage("%wayserchfail%", "%query%", answer.Result.QueryText)); return(1); case 1: if (dataOfBot.Organizations.FirstOrDefault(x => x.OrganizationID == answer.Result.QueryResults[0].ID).OrganizationMapObject.Where(z => z.MapObject.Params == null).Count() > 1) { await sender.SendText(texter.GetMessage("%getwayerror%")); return(1); } object previousObjAnswer = cacher.Get($"FINDEDFIRSTORG{botUser.BotUserID}"); if (previousObjAnswer == null) { cacher.Clear(botUser.BotUserID); botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization; await sender.SendText(texter.GetMessage("%ready%", "%mall%", dataOfBot.Customers[0].Name, dataOfBot.Customers[0].LocaleCity) + "\\r\\n\\r\\n" + texter.GetMessage("%orgsrchstartback%")); return(1); } var previousAnswer = (FindedInformation)previousObjAnswer; if (previousAnswer.Result.QueryResults[0].ID == answer.Result.QueryResults[0].ID) { await sender.SendText(texter.GetMessage("%srchwaysameorgs%", "%org%", answer.Result.QueryResults[0].Name)); return(1); } var mapHelper = new BotMapHelper(); var way = mapHelper.GetClosestWay(answer.Result.QueryResults[0], previousAnswer.Result.QueryResults, dataOfBot); if (way.Way == null) { cacher.Clear(botUser.BotUserID); botUser.NowIs = MallBotWhatIsHappeningNow.SearchingOrganization; await sender.SendText(texter.GetMessage("%getwayfail%") + "\\r\\n\\r\\n" + texter.GetMessage("%ready%", "%mall%", dataOfBot.Customers[0].Name, dataOfBot.Customers[0].LocaleCity) + "\\r\\n\\r\\n" + texter.GetMessage("%orgsrchstartback%")); return(1); } await SendWayWithPhoto(way.From, way.To, way.Way); return(1); default: if (answer.Result.QueryResults.Count != answer.Result.QueryResults.DistinctBy(x => x.Name).Count()) { await sender.SendText(texter.GetMessage("%getwayerror%")); return(1); } string p = ""; for (int i = 0; i < answer.Result.QueryResults.Count; i++) { p += $"{BotTextHelper.GetEmojiNumber(i + 1)} {answer.Result.QueryResults[i].Name} \\r\\n"; } await sender.SendText(texter.GetMessage("%getwaymanyres%", "%shops%", p)); string orgIDs = ""; foreach (var item in answer.Result.QueryResults) { orgIDs += item.ID + ";"; } cacher.Set($"SEARCHWAY{botUser.BotUserID}", orgIDs, 35); return(1); } }