public Task <IConversation> StartConversation(IMainBot mainBot, ITgUser tgUserInfo, string firstMessage) { var reMatch = this.FirstMessage.Match(firstMessage); var prjName = tgUserInfo.Name; if (reMatch.Groups["prj"].Success) { prjName = reMatch.Groups["prj"].Value.Trim(); } string ver = null; if (reMatch.Groups["ver"].Success) { ver = reMatch.Groups["ver"].Value.Trim(); } var prj = mainBot.Projects.SingleOrDefault(x => x.RedmineProjectName != null && x.RedmineProjectName.ToLower() == prjName.ToLower()); if (prj != null) { return(Task <IConversation> .Factory.StartNew(() => { var conversation = new SimpleMessageConversation(mainBot, tgUserInfo); var versionMessage = ConversationHelper.GenerateVersionInfo(prj, mainBot, prj.VersionCurrent).Result; var msgTask = conversation.ProcessMessage(versionMessage); if (!msgTask.IsCompleted) { msgTask.Wait(); } return conversation; })); } else { return(Task <IConversation> .Factory.StartNew(() => { var conversation = new SimpleMessageConversation(mainBot, tgUserInfo); var msgTask = conversation.ProcessMessage("Проект неизвестен"); if (!msgTask.IsCompleted) { msgTask.Wait(); } return conversation; })); } }
public void ProcessConversation() { var messageRegex = new Regex(@"^\s*версия(?<prj>\s+\S+\s*)?(?<ver>\s+.*?)?$", RegexOptions.Compiled | RegexOptions.IgnoreCase); var usr = (User)this.TgUser; var reMatch = messageRegex.Match(this.FirstMessage); string prjName = null; if (reMatch.Groups["prj"].Success) { prjName = reMatch.Groups["prj"].Value.Trim(); } string ver = null; if (reMatch.Groups["ver"].Success) { ver = reMatch.Groups["ver"].Value.Trim(); } var possibleProjects = usr.ProjectsSettings.Where(x => { return((string.IsNullOrWhiteSpace(prjName) && x.RedmineVerbosity != EnumRedmineVerbosity.None && x.ProjectName != null) || (x.ProjectName != null && this.MainBot.Projects.Single(xx => xx.Name == x.ProjectName).RedmineProjectName == prjName)); }).ToList(); var anySend = false; foreach (var projectUserSetting in possibleProjects) { var prj = this.MainBot.Projects.SingleOrDefault(x => x.Name == projectUserSetting.ProjectName); if (prj != null && !string.IsNullOrEmpty(prj.RedmineProjectName)) { var message = ConversationHelper.GenerateVersionInfo(prj, this.MainBot, ver ?? prj.VersionCurrent).Result; this.MainBot.DirectSendMessage(this.TgUser, message); anySend = true; } } if (!anySend) { this.MainBot.DirectSendMessage(this.TgUser, "Нет информации по рабочим проектам"); } this.MainBot.FinishDialog(this.TgUser); }