private List <DBHelpers.Models.MFCModels.Office> SetSchedules(List <DBHelpers.Models.MFCModels.Office> offices) { foreach (var item in offices) { item.IsOpen = Analiser.OfficeIsOpen(item.Schedule); } return(offices); }
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> AnaliseCommands(string query) { switch (query) { case "milk": switch (botUser.NowIs) { case MFCBotWhatIsHappeningNow.GetingTicketInformation: var office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); botUser.NowIs = MFCBotWhatIsHappeningNow.SettingService; botUser.TalonID = 0; botUser.ServiceID = 0; await SelectSendSetTenPopularServices(office.DisplayName, office.AisMFCID, office.DisplayAddress); return(1); default: return(0); } case "привет": case "здарова": case "привяу": case "здравствуй": case "здравствуйте": case "добрый день": case "добрый вечер": case "доброе утро": case "hi": case "hello": case "hey": await sendHelper.SendText(textHelper.GetMessage("%hello%")); goto case "help"; case "спасибо": case "благодарю": case "thanks": await sendHelper.SendText(textHelper.GetMessage("%thanks%")); return(1); case "прости": case "простите": case "сорян": case "извините": case "sorry": await sendHelper.SendText(textHelper.GetMessage("%sorry%")); return(1); case "пока": case "до свидания": case "досвидули": case "goodbye": case "bye": case "bye bye": await sendHelper.SendText(textHelper.GetMessage("%bye%")); return(1); case "вопрос": //добавлена команда "вопрос" await sendHelper.SendText(textHelper.GetMessage("%question%")); cacheHelper.Set($"QUESTION{botUser.BotUserVKID}", 1, 35); return(1); case "отмена": case "start": botUser.OfficeID = 0; botUser.TalonID = 0; botUser.ServiceID = 0; botUser.NowIs = MFCBotWhatIsHappeningNow.SettingOffice; botUser.ModifiedDate = DateTime.Now; cacheHelper.Clear(botUser.BotUserVKID); await sendHelper.SendText(textHelper.GetMessage("%setofficehelp%")); return(1); case "помощь": case "help": cacheHelper.Clear(botUser.BotUserVKID); switch (botUser.NowIs) { case MFCBotWhatIsHappeningNow.SettingOffice: await sendHelper.SendText(textHelper.GetMessage("%setofficerealhelp%")); return(1); case MFCBotWhatIsHappeningNow.SettingService: SetTenPopularServices(false); await sendHelper.SendText(textHelper.GetMessage("%setservicehelp%")); return(1); case MFCBotWhatIsHappeningNow.SettingOpportunity: await sendHelper.SendText(textHelper.GetMessage("%slctophelp%")); return(1); case MFCBotWhatIsHappeningNow.GetingTicketInformation: await sendHelper.SendText(textHelper.GetMessage("%gtinfhelp%")); return(1); default: return(0); } case "назад": case "back": switch (botUser.NowIs) { case MFCBotWhatIsHappeningNow.SettingOffice: cacheHelper.Clear(botUser.BotUserVKID); await sendHelper.SendText(textHelper.GetMessage("%setofficehelp%")); return(1); case MFCBotWhatIsHappeningNow.SettingService: var data = cacheHelper.Get($"SETSERVICES{botUser.BotUserVKID}"); if (data == null || data.ToString().Last() == '¡') //если кэш пуст, либо в кэше хранятся данные, которые относятся к 10ки популярных услуг { cacheHelper.Clear(botUser.BotUserVKID); if (context.AISMFCServiceStatus.FirstOrDefault(x => x.ServiceName == "enqueue").Status == "ok") { botUser.NowIs = MFCBotWhatIsHappeningNow.SettingOpportunity; var office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); await sendHelper.SendText(textHelper.GetMessage("%slctopstart%", new string[] { "%officename%", "%adress%", "%business%" }, new string[] { office.DisplayName, office.DisplayAddress, GetBusynessOffice(office.AisMFCID) })); } else { goto case MFCBotWhatIsHappeningNow.SettingOpportunity; } } else { //возвращаем к началу этапа SettingService var office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); await SelectSendSetTenPopularServices(office.DisplayName, office.AisMFCID, office.DisplayAddress); } return(1); case MFCBotWhatIsHappeningNow.SettingOpportunity: cacheHelper.Clear(botUser.BotUserVKID); botUser.NowIs = MFCBotWhatIsHappeningNow.SettingOffice; botUser.OfficeID = 0; botUser.ServiceID = 0; botUser.TalonID = 0; await sendHelper.SendText(textHelper.GetMessage("%setofficehelp%")); return(1); case MFCBotWhatIsHappeningNow.GetingTicketInformation: cacheHelper.Clear(botUser.BotUserVKID); var usersOffice = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); if ((usersOffice.AisMFCID != 21 && usersOffice.AisMFCID != 49 || usersOffice.DisplayName == "Ярмарка") && context.AISMFCServiceStatus.FirstOrDefault(x => x.ServiceName == "enqueue").Status == "ok") { //если были в филиале, где разрешена запись botUser.NowIs = MFCBotWhatIsHappeningNow.SettingOpportunity; await sendHelper.SendText(textHelper.GetMessage("%slctopstart%", new string[] { "%officename%", "%adress%", "%business%" }, new string[] { usersOffice.DisplayName, usersOffice.DisplayAddress, GetBusynessOffice(usersOffice.AisMFCID) })); } else { botUser.NowIs = MFCBotWhatIsHappeningNow.SettingOffice; botUser.OfficeID = 0; botUser.ServiceID = 0; botUser.TalonID = 0; await sendHelper.SendText(textHelper.GetMessage("%setofficehelp%")); } return(1); default: return(0); } case "update": mfcDataOfBot = cacheHelper.Update("MFCDATAOFBOT", context); if (mfcDataOfBot != null) { await sendHelper.SendText(textHelper.GetMessage("%updatecachesuccess%")); } else { await sendHelper.SendText(textHelper.GetMessage("%updatecachefail%")); } return(1); case "getinfo": case "статус": switch (botUser.NowIs) { case MFCBotWhatIsHappeningNow.QueueWaiting: Logging.Logger.Debug("qwaiting status"); var office = mfcDataOfBot.Offices.FirstOrDefault(x => x.AisMFCID == botUser.OfficeID); var message = Analiser.GetAnalysedAnswer(botUser, office, (int)botUser.TalonID, textHelper, mfcDataOfBot.WindowsOffices); await sendHelper.SendText(message); return(1); default: return(0); } case "finish": botUser.NowIs = MFCBotWhatIsHappeningNow.SettingOffice; botUser.ModifiedDate = DateTime.Now; botUser.TalonID = 0; botUser.ServiceID = 0; botUser.OfficeID = 0; cacheHelper.Clear(botUser.BotUserVKID); await sendHelper.SendText(textHelper.GetMessage("%finish%", "%window%", "номер окна")); return(1); } return(0); }