// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Microsoft.Teams.Core.Schema;
namespace Microsoft.Teams.Apps.Schema.Entities;
///
/// Mention entity extension methods.
///
public static class MentionEntityExtensions
{
///
/// Gets all mention entities from the activity.
///
public static IEnumerable GetMentions(this TeamsActivity activity)
{
ArgumentNullException.ThrowIfNull(activity);
if (activity.Entities == null)
{
return [];
}
return activity.Entities.Where(e => e is MentionEntity).Cast();
}
///
/// Internal helper to add a mention to an activity.
///
internal static void AddToActivity(TeamsActivity activity, ConversationAccount account, string? text, bool addText)
{
ArgumentNullException.ThrowIfNull(activity);
ArgumentNullException.ThrowIfNull(account);
string? mentionText = text ?? account.Name;
if (addText)
{
string? currentText = activity is MessageActivity message
? message.Text
: (activity.Properties.TryGetValue("text", out object? value) ? value?.ToString() : null);
string updatedText = $"{mentionText} {currentText}";
if (activity is MessageActivity msg)
{
msg.Text = updatedText;
}
else
{
activity.Properties["text"] = updatedText;
}
}
activity.Entities ??= [];
activity.Entities.Add(new MentionEntity(account, $"{mentionText}"));
}
}