// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. namespace Microsoft.Teams.Apps.Schema.Entities; /// /// OMessage entity extension methods. /// public static class OMessageEntityExtensions { /// /// Gets the first message entity from the activity. /// public static OMessageEntity? GetMessageEntity(this TeamsActivity activity) { ArgumentNullException.ThrowIfNull(activity); if (activity.Entities == null) { return null; } return activity.Entities.FirstOrDefault(e => e.Type == "https://schema.org/Message" && e is OMessageEntity) as OMessageEntity; } /// /// Internal helper to get or create the root message entity for an activity. /// internal static OMessageEntity GetOrCreateRootMessageEntity(TeamsActivity activity) { ArgumentNullException.ThrowIfNull(activity); activity.Entities ??= []; OMessageEntity? messageEntity = activity.Entities.FirstOrDefault( e => e.Type == "https://schema.org/Message" && e.OType == "Message" ) as OMessageEntity; if (messageEntity is null) { messageEntity = new OMessageEntity(); activity.Entities.Add(messageEntity); } return messageEntity; } /// /// Internal helper to add AI-generated content label to the message entity. /// internal static OMessageEntity AddAIGeneratedContent(TeamsActivity activity) { ArgumentNullException.ThrowIfNull(activity); OMessageEntity messageEntity = GetOrCreateRootMessageEntity(activity); messageEntity.AdditionalType ??= []; if (!messageEntity.AdditionalType.Contains("AIGeneratedContent")) { messageEntity.AdditionalType.Add("AIGeneratedContent"); } return messageEntity; } }