Esempio n. 1
0
        /// <summary>
        /// Handles the account selection.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task AccountReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            this.Account = activity.RemoveRecipientMention().Trim();
            this.Profile = this.Profiles.FirstOrDefault(p => p.Accounts.Any(
                                                            a => string.Equals(a, this.Account, StringComparison.OrdinalIgnoreCase)));

            if (this.Profile == null)
            {
                await this.LogOnAsync(context, activity);

                return;
            }

            var data = context.UserData.GetValue <UserData>("userData");

            data.Account = this.Account;
            data.SelectProfile(this.Profile);

            context.UserData.SetValue("userData", data);

            await this.ContinueProcess(context, activity);
        }
Esempio n. 2
0
        /// <summary>
        /// Replies with a list of ApprovalCards.
        /// </summary>
        /// <param name="context">The <see cref="IDialogContext"/>.</param>
        /// <param name="result">The <see cref="IAwaitable{T}"/>.</param>
        /// <returns>An async <see cref="Task"/>/.</returns>
        public virtual async Task ApprovalsAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;
            var reply    = context.MakeMessage();

            this.Account     = context.UserData.GetAccount();
            this.Profile     = context.UserData.GetProfile();
            this.TeamProject = context.UserData.GetTeamProject();

            if (activity.Text.Equals(CommandMatchApprovals, StringComparison.OrdinalIgnoreCase))
            {
                var approvals = await this.vstsService.GetApprovals(this.Account, this.TeamProject, this.Profile);

                var cards = approvals.Select(a => new ApprovalCard(this.Account, a, this.TeamProject)).ToList();

                foreach (var card in cards)
                {
                    reply.Attachments.Add(card);
                }

                reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
                await context.PostAsync(reply);

                context.Wait(this.ApproveOrRejectAsync);
            }
            else
            {
                context.Fail(new UnknownCommandException());
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Gets a list of builds.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task BuildsAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            this.Account     = context.UserData.GetAccount();
            this.Profile     = context.UserData.GetProfile();
            this.TeamProject = context.UserData.GetTeamProject();

            var activity = await result;
            var text     = (activity.Text ?? string.Empty).ToLowerInvariant();
            var reply    = context.MakeMessage();

            if (text.Equals(CommandMatchBuilds, StringComparison.OrdinalIgnoreCase))
            {
                var buildDefinitions =
                    await this.vstsService.GetBuildDefinitionsAsync(this.Account, this.TeamProject, this.Profile.Token);

                var cards = buildDefinitions.Select(bd => new BuildDefinitionCard(bd)).ToList();

                foreach (var card in cards)
                {
                    reply.Attachments.Add(card);
                }

                reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
                await context.PostAsync(reply);

                context.Wait(this.QueueAsync);
            }
            else
            {
                context.Fail(new UnknownCommandException());
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Handles a received pin.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task PinReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text  = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();
            var match = Regex.Match(text, CommandMatchPin);

            if (match.Success && string.Equals(this.Pin, text, StringComparison.OrdinalIgnoreCase))
            {
                var profile  = context.UserData.GetNotValidatedByPinProfile();
                var profiles = context.UserData.GetProfiles();

                profiles.Add(profile);
                this.Profile = profile;
                context.UserData.SetProfile(profile);
                context.UserData.SetProfiles(profiles);

                await this.ContinueProcess(context, activity);

                return;
            }

            await context.PostAsync(Exceptions.InvalidPin);

            context.Wait(this.PinReceivedAsync);
        }
Esempio n. 5
0
        public virtual async Task TeamReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = activity.RemoveRecipientMention().Trim().ToLowerInvariant();

            var isCancel = await this.IsCancelMessage(text, context);

            if (isCancel)
            {
                return;
            }

            var team = teams.FirstOrDefault(a => string.Equals(a.Value, text, StringComparison.OrdinalIgnoreCase));

            if (!team.Equals(default(KeyValuePair <string, string>)))
            {
                this.Team = team.Value;

                await this.ContinueProcess(context, activity);

                return;
            }

            await context.PostAsync(Labels.InvalidTeam);

            context.Wait(this.TeamReceivedAsync);
        }
Esempio n. 6
0
        /// <summary>
        /// Creates a new release for a release definition.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task CreateAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;
            var text     = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();
            var reply    = context.MakeMessage();

            var match = Regex.Match(text, CommandMatchCreate);

            if (match.Success)
            {
                var definitionId = Convert.ToInt32(match.Groups[1].Value);
                var release      = await this.VstsService.CreateReleaseAsync(this.Account, this.TeamProject, definitionId, this.Profile.Token);

                reply.Text = string.Format(Labels.ReleaseCreated, release.Id);

                await context.PostAsync(reply);

                context.Done(reply);
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 7
0
        public async Task DisconnectAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = activity.Text;

            var isRemovedValue = context.UserData.RemoveValue("userData");

            if (isRemovedValue)
            {
                var reply = context.MakeMessage();
                reply.Text = Labels.Disconnected;

                await context.PostAsync(reply);

                context.Done(reply);
            }
            else
            {
                context.Fail(new UnknownCommandException(text));
            }
        }
Esempio n. 8
0
        public virtual async Task MemberReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = activity.RemoveRecipientMention().Trim().ToLowerInvariant();

            var isCancel = await this.IsCancelMessage(text, context);

            if (isCancel)
            {
                return;
            }

            if (!string.IsNullOrWhiteSpace(text))
            {
                this.Member = text;

                await this.ContinueProcess(context, activity);

                return;
            }

            await context.PostAsync(Labels.InvalidMember);

            context.Wait(this.MemberReceivedAsync);
        }
Esempio n. 9
0
        /// <summary>
        /// Queues a build.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task QueueAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;
            var text     = (activity.RemoveRecipientMention() ?? string.Empty).ToLowerInvariant();
            var reply    = context.MakeMessage();

            var match = Regex.Match(text, CommandMatchQueue);

            if (match.Success)
            {
                var typing = context.MakeMessage();
                typing.Type = ActivityTypes.Typing;
                await context.PostAsync(typing);

                var buildDefinitionId = Convert.ToInt32(match.Groups[1].Value);

                var build = await this.VstsService.QueueBuildAsync(this.Account, this.TeamProject, buildDefinitionId, this.Profile.Token);

                reply.Text = string.Format(Labels.BuildQueued, build.Id);

                await context.PostAsync(reply);

                context.Done(reply);
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Gets a list of release definitions.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task DisconnectAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();

            if (text.Equals(CommandMatchDisConnect, StringComparison.OrdinalIgnoreCase))
            {
                var isRemoveValue = context.UserData.RemoveValue("userData");
                if (isRemoveValue)
                {
                    var reply = context.MakeMessage();
                    reply.Text = Labels.Disconnected;
                    await context.PostAsync(reply);

                    context.Done(reply);
                }
                else
                {
                    context.Fail(new UnknownCommandException(activity.Text));
                }
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Handles a received pin.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task PinReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text  = (activity.RemoveRecipientMention() ?? string.Empty).Trim().ToLowerInvariant();
            var match = Regex.Match(text, CommandMatchPin);

            if (match.Success && string.Equals(this.Pin, text, StringComparison.OrdinalIgnoreCase))
            {
                var data = context.UserData.GetValue <UserData>("userData");

                this.Profile = data.ProfileNotValidated;
                data.SelectProfile(this.Profile);
                data.Pin = string.Empty;

                context.UserData.SetValue("userData", data);

                await this.ContinueProcess(context, activity);

                return;
            }

            await context.PostAsync(Exceptions.InvalidPin);

            context.Wait(this.PinReceivedAsync);
        }
Esempio n. 12
0
        /// <summary>
        /// Handles the team project selection.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task ProjectReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;
            var text     = activity.RemoveRecipientMention().Trim();

            if (text.Equals("help", StringComparison.OrdinalIgnoreCase))
            {
                var reply = context.MakeMessage();
                reply.Text = Labels.HelpProject;
                await context.PostAsync(reply);

                context.Wait(this.ProjectReceivedAsync);
                return;
            }

            if (!this.TeamProjects.Contains(text))
            {
                await this.SelectProjectAsync(context, activity);
            }
            else
            {
                var data = context.UserData.GetValue <UserData>("userData");

                data.TeamProject = this.TeamProject = text;

                context.UserData.SetValue("userData", data);

                await this.ContinueProcess(context, activity);
            }
        }
Esempio n. 13
0
        public virtual async Task ProjectReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = activity.RemoveRecipientMention().Trim().ToLowerInvariant();

            var isCancel = await this.IsCancelMessage(text, context);

            if (isCancel)
            {
                return;
            }

            context.UserData.TryGetValue("userData", out UserData data);

            var project = data.User.Projects.FirstOrDefault(a => string.Equals(a.Value, text, StringComparison.OrdinalIgnoreCase));

            if (!project.Equals(default(KeyValuePair <string, string>)))
            {
                data.Project = project;

                context.UserData.SetValue("userData", data);

                await this.ContinueProcess(context, activity);

                return;
            }

            await context.PostAsync(Labels.InvalidProject);

            context.Wait(this.ProjectReceivedAsync);
        }
Esempio n. 14
0
        /// <summary>
        /// Gets a list of release definitions.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task ReleasesAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var data = context.UserData.GetValue <UserData>("userData");

            this.Account = data.Account;
            this.Profile = await this.GetValidatedProfile(context.UserData);

            this.TeamProject = data.TeamProject;

            var text = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();

            if (text.Equals(CommandMatchReleases, StringComparison.OrdinalIgnoreCase))
            {
                var typing = context.MakeMessage();
                typing.Type = ActivityTypes.Typing;
                await context.PostAsync(typing);

                var releaseDefinitions =
                    await this.VstsService.GetReleaseDefinitionsAsync(this.Account, this.TeamProject, this.Profile.Token);

                if (!releaseDefinitions.Any())
                {
                    var reply = context.MakeMessage();
                    reply.Text = Labels.NoReleases;
                    await context.PostAsync(reply);

                    context.Done(reply);
                    return;
                }

                var skip = 0;
                while (skip < releaseDefinitions.Count)
                {
                    var cards = releaseDefinitions.Skip(skip).Take(TakeSize).Select(rd => new ReleaseDefinitionCard(rd)).ToList();
                    var reply = context.MakeMessage();

                    foreach (var card in cards)
                    {
                        reply.Attachments.Add(card);
                    }

                    reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
                    await context.PostAsync(reply);

                    skip += TakeSize;
                }

                context.Wait(this.CreateAsync);
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 15
0
        /// <summary>
        /// Changes the status of an Approval.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task ChangeStatusAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            await this.ChangeStatusAsync(context, this.ApprovalId, activity.Text, this.IsApproved);
        }
Esempio n. 16
0
        /// <summary>
        /// Approves or Rejects an Approval.
        /// </summary>
        /// <param name="context">The <see cref="IDialogContext"/>.</param>
        /// <param name="result">The <see cref="IAwaitable{T}"/>.</param>
        /// <returns>An async <see cref="Task"/>/.</returns>
        public virtual async Task ApproveOrRejectAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;
            var text     = activity.RemoveRecipientMention();

            await this.ApproveOrRejectAsync(context, activity, text);
        }
Esempio n. 17
0
        /// <summary>
        /// Approves or Rejects an Approval.
        /// </summary>
        /// <param name="context">The <see cref="IDialogContext"/>.</param>
        /// <param name="result">The <see cref="IAwaitable{T}"/>.</param>
        /// <returns>An async <see cref="Task"/>/.</returns>
        public virtual async Task ApproveOrRejectAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var matchApprove = Regex.Match(activity.Text, CommandMatchApprove);
            var matchReject  = Regex.Match(activity.Text, CommandMatchReject);

            var reply = context.MakeMessage();

            if (matchApprove.Success)
            {
                this.ApprovalId = Convert.ToInt32(matchApprove.Groups[1].Value);
                this.IsApproved = true;
                var comment = matchApprove.Groups[2].Value;

                if (string.IsNullOrWhiteSpace(comment))
                {
                    reply.Text = Labels.MissingComment;
                    await context.PostAsync(reply);

                    context.Wait(this.ChangeStatusAsync);
                }
                else
                {
                    await this.ChangeStatusAsync(context, this.ApprovalId, comment, true);
                }
            }
            else if (matchReject.Success)
            {
                this.ApprovalId = Convert.ToInt32(matchReject.Groups[1].Value);
                this.IsApproved = false;
                var comment = matchReject.Groups[2].Value;

                if (string.IsNullOrWhiteSpace(comment))
                {
                    reply.Text = Labels.MissingComment;
                    await context.PostAsync(reply);

                    context.Wait(this.ChangeStatusAsync);
                }
                else
                {
                    await this.ChangeStatusAsync(context, this.ApprovalId, comment, false);
                }
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Replies with a list of ApprovalCards.
        /// </summary>
        /// <param name="context">The <see cref="IDialogContext"/>.</param>
        /// <param name="result">The <see cref="IAwaitable{T}"/>.</param>
        /// <returns>An async <see cref="Task"/>/.</returns>
        public virtual async Task ApprovalsAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            this.Account     = context.UserData.GetAccount();
            this.Profile     = context.UserData.GetProfile(this.GetAuthenticationService(activity));
            this.TeamProject = context.UserData.GetTeamProject();

            var text = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();

            if (text.Equals(CommandMatchApprovals, StringComparison.OrdinalIgnoreCase))
            {
                var approvals = await this.VstsService.GetApprovals(this.Account, this.TeamProject, this.Profile);

                if (!approvals.Any())
                {
                    var reply = context.MakeMessage();
                    reply.Text = Labels.NoApprovals;
                    await context.PostAsync(reply);

                    context.Done(reply);
                    return;
                }

                var skip = 0;
                while (skip < approvals.Count)
                {
                    var cards = approvals.Skip(skip).Take(TakeSize).Select(a => new ApprovalCard(this.Account, a, this.TeamProject)).ToList();
                    var reply = context.MakeMessage();

                    foreach (var card in cards)
                    {
                        reply.Attachments.Add(card);
                    }

                    reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
                    await context.PostAsync(reply);

                    skip += TakeSize;
                }

                context.Wait(this.ApproveOrRejectAsync);
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 19
0
        /// <summary>
        /// Handles the account selection.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task AccountReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = activity.RemoveRecipientMention().Trim();

            if (text.Equals("help", StringComparison.OrdinalIgnoreCase))
            {
                var reply = context.MakeMessage();
                reply.Text = Labels.HelpAccount;
                await context.PostAsync(reply);

                context.Wait(this.AccountReceivedAsync);
                return;
            }

            this.Account = text;

            this.Profile = this.Profiles.FirstOrDefault(p => p.Accounts.Any(
                                                            a => string.Equals(a, this.Account, StringComparison.OrdinalIgnoreCase)));

            if (this.Profile == null)
            {
                if (text.Equals("disconnect", StringComparison.OrdinalIgnoreCase))
                {
                    context.Fail(new UnknownCommandException(activity.Text));
                    return;
                }

                var reply = context.MakeMessage();
                reply.Text = Labels.UnknownAccount;
                await context.PostAsync(reply);

                await this.SelectAccountAsync(context, activity);

                return;
            }

            var data = context.UserData.GetValue <UserData>("userData");

            data.Account = this.Account;
            data.SelectProfile(this.Profile);

            context.UserData.SetValue("userData", data);

            await this.ContinueProcess(context, activity);
        }
Esempio n. 20
0
        /// <summary>
        /// Resumes after a child dialog finishes.
        /// </summary>
        /// <param name="context">A result.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task ResumeAfterChildDialog(IDialogContext context, IAwaitable <object> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            try
            {
                await result;
            }
            catch (UnknownCommandException)
            {
                await this.HandleCommandAsync(context, context.Activity as IMessageActivity);
            }
        }
Esempio n. 21
0
        private async Task HandleActivityAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            if (activity.Type == ActivityTypes.ConversationUpdate)
            {
                await this.WelcomeAsync(context, activity);
            }
            else
            {
                await this.HandleCommandAsync(context, activity);
            }
        }
Esempio n. 22
0
        /// <summary>
        /// Handles any incoming result.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">a <see cref="IMessageActivity"/>.</param>
        /// <returns>a <see cref="Task"/>.</returns>
        public virtual async Task HandleActivityAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            // Occurs when the conversation starts.
            if (string.Equals(activity.Type, ActivityTypes.ConversationUpdate, StringComparison.OrdinalIgnoreCase))
            {
                await this.WelcomeAsync(context, activity);
            }
            else
            {
                await this.HandleCommandAsync(context, activity);
            }
        }
Esempio n. 23
0
        /// <summary>
        /// Connects the bot to a vsts account and team project.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task ConnectAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;
            var text     = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();

            var match = Regex.Match(text, CommandMatchConnect);

            if (match.Success)
            {
                this.Account     = match.Groups[1].Value;
                this.TeamProject = match.Groups[2].Value;
            }

            await this.ContinueProcess(context, activity);
        }
Esempio n. 24
0
        public virtual async Task TeamsAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = activity.RemoveRecipientMention().Trim().ToLowerInvariant();

            var match = Regex.Match(text, CommandMatchMembers, RegexOptions.IgnoreCase);

            if (match.Success)
            {
                this.Team = match.Groups[1].Value;
            }

            await this.ContinueProcess(context, activity);
        }
Esempio n. 25
0
        public virtual async Task ResumeAfterChildDialog(IDialogContext context, IAwaitable <object> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            try
            {
                await result;
            }
            catch (UnknownCommandException)
            {
                await this.HandleCommandAsync(context, context.Activity as IMessageActivity);
            }
            catch (Exception ex)
            {
                await context.PostAsync(string.Format(Labels.ErrorOccurred, ex.Message));
            }
        }
Esempio n. 26
0
        /// <summary>
        /// Gets a list of release definitions.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/>.</param>
        /// <param name="result">A <see cref="IMessageActivity"/>/</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task ExportAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            var text = (activity.Text ?? string.Empty).Trim().ToLowerInvariant();

            if (text.Equals(CommandMatchExport, StringComparison.OrdinalIgnoreCase))
            {
                if (activity.Conversation.IsGroup.HasValue && activity.Conversation.IsGroup.Value)
                {
                    var reply = context.MakeMessage();
                    reply.Text = string.Format("This is a group chat, data cannot be exported.");
                    await context.PostAsync(reply);

                    context.Done(reply);
                }
                else
                {
                    var data          = context.UserData.GetValue <UserData>("userData");
                    var userProfileId = data.Profile.Id;
                    if (!string.IsNullOrEmpty(userProfileId.ToString()))
                    {
                        var reply = context.MakeMessage();
                        reply.Text = string.Format("ProfileId: {0}", userProfileId);
                        await context.PostAsync(reply);

                        context.Done(reply);
                    }
                    else
                    {
                        context.Fail(new UnknownCommandException(activity.Text));
                    }
                }
            }
            else
            {
                context.Fail(new UnknownCommandException(activity.Text));
            }
        }
Esempio n. 27
0
        public virtual async Task SelectLanguageAsync(IDialogContext context, IAwaitable <object> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var instance = new Language();

            var languages = instance.GetDescriptions().ToDictionary(a => a.Value, a => a.Key.GetStringValue());

            var languagesCard = new LanguagesCard(languages);

            var reply = context.MakeMessage();

            reply.Text = Labels.ConnectToAccount;
            reply.Attachments.Add(languagesCard.ToAttachment());

            await context.PostAsync(reply);

            context.Wait(this.LanguageReceivedAsync);
        }
Esempio n. 28
0
        /// <summary>
        /// Handles the team project selection.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task ProjectReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            if (!this.TeamProjects.Contains(activity.Text.Trim()))
            {
                await this.SelectProjectAsync(context, activity);
            }
            else
            {
                this.TeamProject = activity.Text.Trim();

                context.UserData.SetTeamProject(this.TeamProject);

                await this.ContinueProcess(context, activity);
            }
        }
Esempio n. 29
0
        public async Task TeamAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var data = context.UserData.GetValue <UserData>("userData");

            var resultService = await this.teamService.GetTeams(data.Account.Value, data.Project.Key, data.User.Token);

            var teams = resultService.ToDictionary(a => a.Id.ToString(), a => a.Name);

            var reply = context.MakeMessage();

            var accountsCard = new TeamsCard(teams);

            reply.Text = Labels.Teams;
            reply.Attachments.Add(accountsCard.ToAttachment());

            await context.PostAsync(reply);

            context.Done(reply);
        }
Esempio n. 30
0
        /// <summary>
        /// Handles the account selection.
        /// </summary>
        /// <param name="context">A <see cref="IDialogContext"/></param>
        /// <param name="result">A <see cref="IMessageActivity"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public virtual async Task AccountReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            context.ThrowIfNull(nameof(context));
            result.ThrowIfNull(nameof(result));

            var activity = await result;

            this.Account = activity.Text.Trim();
            this.Profile = this.Profiles.FirstOrDefault(p => p.Accounts.Any(
                                                            a => string.Equals(a, this.Account, StringComparison.OrdinalIgnoreCase)));

            if (this.Profile == null)
            {
                await this.LogOnAsync(context, activity);

                return;
            }

            context.UserData.SetAccount(this.Account);
            context.UserData.SetProfile(this.Profile);

            await this.ContinueProcess(context, activity);
        }