/// <summary> /// Handles conversational updates. /// </summary> /// <param name="activity">Incoming request from Bot Framework.</param> /// <param name="connectorClient">Connector client instance for posting to Bot Framework.</param> /// <returns>Task tracking operation.</returns> private static async Task HandleConversationUpdates(Activity activity, ConnectorClient connectorClient) { TeamEventBase eventData = activity.GetConversationUpdateData(); switch (eventData.EventType) { case TeamEventType.ChannelCreated: { ChannelCreatedEvent channelCreatedEvent = eventData as ChannelCreatedEvent; Activity newActivity = new Activity { Type = ActivityTypes.Message, ChannelId = "msteams", ServiceUrl = activity.ServiceUrl, From = activity.Recipient, Text = channelCreatedEvent.Channel.Name + " Channel creation complete", ChannelData = new TeamsChannelData { Channel = channelCreatedEvent.Channel, Team = channelCreatedEvent.Team, Tenant = channelCreatedEvent.Tenant }, }; await connectorClient.Conversations.SendToConversationWithRetriesAsync(newActivity, channelCreatedEvent.Channel.Id); break; } case TeamEventType.ChannelDeleted: { ChannelDeletedEvent channelDeletedEvent = eventData as ChannelDeletedEvent; Activity newActivity = activity.CreateReplyToGeneralChannel(channelDeletedEvent.Channel.Name + " Channel deletion complete"); await connectorClient.Conversations.SendToConversationWithRetriesAsync(newActivity, activity.GetGeneralChannel().Id); break; } case TeamEventType.MembersAdded: { MembersAddedEvent memberAddedEvent = eventData as MembersAddedEvent; Activity newActivity = activity.CreateReplyToGeneralChannel("Members added to team."); await connectorClient.Conversations.SendToConversationWithRetriesAsync(newActivity, activity.GetGeneralChannel().Id); break; } case TeamEventType.MembersRemoved: { MembersRemovedEvent memberRemovedEvent = eventData as MembersRemovedEvent; Activity newActivity = activity.CreateReplyToGeneralChannel("Members removed from the team."); await connectorClient.Conversations.SendToConversationWithRetriesAsync(newActivity, activity.GetGeneralChannel().Id); break; } } }
/// <summary> /// Handles the channel deleted event asynchronously. /// </summary> /// <param name="channelDeletedEvent">The channel deleted event.</param> /// <returns> /// Task tracking operation. /// </returns> public async Task HandleChannelDeletedEventAsync(ChannelDeletedEvent channelDeletedEvent) { TeamOperationHistory conversationHistory = await this.teamHistoryAccessor.AuditLog.GetAsync(channelDeletedEvent.TurnContext, () => new TeamOperationHistory()).ConfigureAwait(false); if (conversationHistory.MemberOperations == null) { conversationHistory.MemberOperations = new List <OperationDetails>(); } conversationHistory.MemberOperations.Add(new OperationDetails { ObjectId = channelDeletedEvent.Channel.Id, Operation = "ChannelDeleted", OperationTime = DateTimeOffset.Now, }); await this.teamHistoryAccessor.AuditLog.SetAsync(channelDeletedEvent.TurnContext, conversationHistory).ConfigureAwait(false); await this.teamHistoryAccessor.ConversationState.SaveChangesAsync(channelDeletedEvent.TurnContext).ConfigureAwait(false); }