// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System.Text.Json.Serialization; using Microsoft.Teams.Apps.Schema; using Microsoft.Teams.Core.Schema; namespace Microsoft.Teams.Apps.Handlers; /// /// Represents a conversation update activity. /// public class ConversationUpdateActivity : TeamsActivity { /// /// Convenience method to create a ConversationUpdateActivity from a CoreActivity. /// /// The CoreActivity to convert. /// A ConversationUpdateActivity instance. public static new ConversationUpdateActivity FromActivity(CoreActivity activity) { ArgumentNullException.ThrowIfNull(activity); return new ConversationUpdateActivity(activity); } /// /// Default constructor. /// [JsonConstructor] internal ConversationUpdateActivity() : base(TeamsActivityTypes.ConversationUpdate) { } /// /// Internal constructor to create ConversationUpdateActivity from CoreActivity. /// /// The CoreActivity to convert. internal ConversationUpdateActivity(CoreActivity activity) : base(activity) { /* if (activity.Properties.TryGetValue("topicName", out var topicName)) { TopicName = topicName?.ToString(); activity.Properties.Remove("topicName"); } */ MembersAdded = activity.Properties.Extract>("membersAdded"); MembersRemoved = activity.Properties.Extract>("membersRemoved"); } //TODO : review properties /* /// /// Gets or sets the updated topic name of the conversation. /// [JsonPropertyName("topicName")] public string? TopicName { get; set; } */ /// /// Gets or sets the collection of members added to the conversation. /// [JsonPropertyName("membersAdded")] public IList? MembersAdded { get; set; } /// /// Gets or sets the collection of members removed from the conversation. /// [JsonPropertyName("membersRemoved")] public IList? MembersRemoved { get; set; } } /// /// String constants for conversation event types. /// public static class ConversationEventTypes { /// /// Channel created event. /// public const string ChannelCreated = "channelCreated"; /// /// Channel deleted event. /// public const string ChannelDeleted = "channelDeleted"; /// /// Channel renamed event. /// public const string ChannelRenamed = "channelRenamed"; /// /// Channel shared event. /// public const string ChannelShared = "channelShared"; /// /// Channel unshared event. /// public const string ChannelUnShared = "channelUnshared"; /// /// Channel member added event. /// public const string ChannelMemberAdded = "channelMemberAdded"; /// /// Channel member removed event. /// public const string ChannelMemberRemoved = "channelMemberRemoved"; //TODO : review these events /* /// /// Channel restored event. /// public const string ChannelRestored = "channelRestored"; */ /// /// Team member added event. /// public const string TeamMemberAdded = "teamMemberAdded"; /// /// Team member removed event. /// public const string TeamMemberRemoved = "teamMemberRemoved"; /// /// Team archived event. /// public const string TeamArchived = "teamArchived"; /// /// Team deleted event. /// public const string TeamDeleted = "teamDeleted"; /// /// Team renamed event. /// public const string TeamRenamed = "teamRenamed"; /// /// Team unarchived event. /// public const string TeamUnarchived = "teamUnarchived"; /*TODO : review these events /// /// Team hard deleted event. /// public const string TeamHardDeleted = "teamHardDeleted"; /// /// Team restored event. /// public const string TeamRestored = "teamRestored"; */ }