microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/sub-pr-317

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Apps/Contexts/Context.Send.cs

124lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4using Microsoft.Teams.Api.Activities;
5
6namespace Microsoft.Teams.Apps;
7
8public partial interface IContext<TActivity>
9{
10 /// <summary>
11 /// send an activity to the conversation
12 /// </summary>
13 /// <param name="activity">activity activity to send</param>
14 /// <param name="cancellationToken">optional cancellation token</param>
15 public Task<T> Send<T>(T activity, CancellationToken cancellationToken = default) where T : IActivity;
16
17 /// <summary>
18 /// send a message activity to the conversation
19 /// </summary>
20 /// <param name="text">the text to send</param>
21 /// <param name="cancellationToken">optional cancellation token</param>
22 public Task<MessageActivity> Send(string text, CancellationToken cancellationToken = default);
23
24 /// <summary>
25 /// send a message activity with a card attachment
26 /// </summary>
27 /// <param name="card">the card to send as an attachment</param>
28 /// <param name="cancellationToken">optional cancellation token</param>
29 public Task<MessageActivity> Send(Cards.AdaptiveCard card, CancellationToken cancellationToken = default);
30
31 /// <summary>
32 /// send an activity to the conversation as a reply
33 /// </summary>
34 /// <param name="activity">activity activity to send</param>
35 /// <param name="cancellationToken">optional cancellation token</param>
36 public Task<T> Reply<T>(T activity, CancellationToken cancellationToken = default) where T : IActivity;
37
38 /// <summary>
39 /// send a message activity to the conversation as a reply
40 /// </summary>
41 /// <param name="text">the text to send</param>
42 /// <param name="cancellationToken">optional cancellation token</param>
43 public Task<MessageActivity> Reply(string text, CancellationToken cancellationToken = default);
44
45 /// <summary>
46 /// send a message activity with a card attachment as a reply
47 /// </summary>
48 /// <param name="card">the card to send as an attachment</param>
49 /// <param name="cancellationToken">optional cancellation token</param>
50 public Task<MessageActivity> Reply(Cards.AdaptiveCard card, CancellationToken cancellationToken = default);
51
52 /// <summary>
53 /// send a typing activity
54 /// </summary>
55 /// <param name="text">optional text to include</param>
56 /// <param name="cancellationToken">optional cancellation token</param>
57 public Task<TypingActivity> Typing(string? text = null, CancellationToken cancellationToken = default);
58}
59
60public partial class Context<TActivity> : IContext<TActivity>
61{
62 public async Task<T> Send<T>(T activity, CancellationToken cancellationToken = default) where T : IActivity
63 {
64 // For targeted send, set the recipient if not already set.
65 // For targeted update (activity.Id exists), we don't update recipient since recipient cannot be changed.
66 if (activity is MessageActivity messageActivity && messageActivity.IsTargeted == true && activity.Id is null && messageActivity.Recipient is null)
67 {
68 messageActivity.Recipient = Activity.From;
69 }
70
71 var token = cancellationToken == default ? CancellationToken : cancellationToken;
72 var res = await Sender.Send(activity, Ref, token);
73 await OnActivitySent(res, ToActivityType<IActivity>());
74 return res;
75 }
76
77 public Task<MessageActivity> Send(string text, CancellationToken cancellationToken = default)
78 {
79 return Send(new MessageActivity(text), cancellationToken);
80 }
81
82 public Task<MessageActivity> Send(Cards.AdaptiveCard card, CancellationToken cancellationToken = default)
83 {
84 return Send(new MessageActivity().AddAttachment(card), cancellationToken);
85 }
86
87 public Task<T> Reply<T>(T activity, CancellationToken cancellationToken = default) where T : IActivity
88 {
89 activity.Conversation = Ref.Conversation.Copy();
90 activity.Conversation.Id = Ref.Conversation.ThreadId;
91
92 if (activity is MessageActivity message)
93 {
94 message.Text = string.Join("\n", [
95 Activity.ToQuoteReply(),
96 message.Text != string.Empty ? $"<p>{message.Text}</p>" : string.Empty
97 ]);
98 }
99
100 return Send(activity, cancellationToken);
101 }
102
103 public Task<MessageActivity> Reply(string text, CancellationToken cancellationToken = default)
104 {
105 return Reply(new MessageActivity(text), cancellationToken);
106 }
107
108 public Task<MessageActivity> Reply(Cards.AdaptiveCard card, CancellationToken cancellationToken = default)
109 {
110 return Reply(new MessageActivity().AddAttachment(card), cancellationToken);
111 }
112
113 public Task<TypingActivity> Typing(string? text = null, CancellationToken cancellationToken = default)
114 {
115 var activity = new TypingActivity();
116
117 if (text is not null)
118 {
119 activity.Text = text;
120 }
121
122 return Send(activity, cancellationToken);
123 }
124}