using Microsoft.Teams.Api.Activities; using Microsoft.Teams.Apps.Routing; namespace Microsoft.Teams.Apps.Activities; public static partial class Conversation { [AttributeUsage(AttributeTargets.Method, Inherited = true)] public class ChannelUnSharedAttribute() : UpdateAttribute(ConversationUpdateActivity.EventType.ChannelUnShared) { public override bool Select(IActivity activity) { if (activity is ConversationUpdateActivity update) { return update.ChannelData?.EventType == ConversationUpdateActivity.EventType.ChannelUnShared; } return false; } } } public static partial class AppActivityExtensions { [Obsolete("Use the handler with the cancellation token")] public static App OnChannelUnShared(this App app, Func, Task> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.ConversationUpdate, ConversationUpdateActivity.EventType.ChannelUnShared]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => { await handler(context.ToActivityType()).ConfigureAwait(false); return null; }, Selector = activity => { if (activity is ConversationUpdateActivity update) { return update.ChannelData?.EventType == ConversationUpdateActivity.EventType.ChannelUnShared; } return false; } }); return app; } public static App OnChannelUnShared(this App app, Func, CancellationToken, Task> handler) { app.Router.Register(new Route() { Name = string.Join("/", [ActivityType.ConversationUpdate, ConversationUpdateActivity.EventType.ChannelUnShared]), Type = app.Status is null ? RouteType.System : RouteType.User, Handler = async context => { await handler(context.ToActivityType(), context.CancellationToken).ConfigureAwait(false); return null; }, Selector = activity => { if (activity is ConversationUpdateActivity update) { return update.ChannelData?.EventType == ConversationUpdateActivity.EventType.ChannelUnShared; } return false; } }); return app; } }