/// <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); }
/// <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()); } }
/// <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()); } }
/// <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); }
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); }
/// <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)); } }
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)); } }
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); }
/// <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)); } }
/// <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)); } }
/// <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); }
/// <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); } }
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); }
/// <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)); } }
/// <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); }
/// <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); }
/// <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)); } }
/// <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)); } }
/// <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); }
/// <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); } }
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); } }
/// <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); } }
/// <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); }
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); }
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)); } }
/// <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)); } }
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); }
/// <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); } }
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); }
/// <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); }