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;
                }));
            }
        }
Exemplo n.º 2
0
            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);
            }