microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
chore/bump-versions-post-release

Branches

Tags

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

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Apps/Activities/Messages/MessageActivity.cs

176lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4using System.Text.RegularExpressions;
5
6using Microsoft.Teams.Api.Activities;
7using Microsoft.Teams.Apps.Routing;
8
9namespace Microsoft.Teams.Apps.Activities;
10
11[AttributeUsage(AttributeTargets.Method, Inherited = true)]
12public class MessageAttribute : ActivityAttribute
13{
14 public Regex? Pattern { get; }
15
16 public MessageAttribute() : base(ActivityType.Message, typeof(MessageActivity))
17 {
18 }
19
20 public MessageAttribute(string pattern) : base(ActivityType.Message, typeof(MessageActivity))
21 {
22 Pattern = new Regex(pattern);
23 }
24
25 public override object Coerce(IContext<IActivity> context) => context.ToActivityType<MessageActivity>();
26 public override bool Select(IActivity activity)
27 {
28 if (activity is MessageActivity message)
29 {
30 return Pattern is null || Pattern.IsMatch(message.Text);
31 }
32
33 return false;
34 }
35}
36
37public static partial class AppActivityExtensions
38{
39 [Obsolete("Use the handler with the cancellation token")]
40 public static App OnMessage(this App app, Func<IContext<MessageActivity>, Task> handler)
41 {
42 app.Router.Register(new Route()
43 {
44 Name = ActivityType.Message,
45 Type = app.Status is null ? RouteType.System : RouteType.User,
46 Handler = async context =>
47 {
48 await handler(context.ToActivityType<MessageActivity>()).ConfigureAwait(false);
49 return null;
50 },
51 Selector = activity => activity is MessageActivity
52 });
53
54 return app;
55 }
56
57 public static App OnMessage(this App app, Func<IContext<MessageActivity>, CancellationToken, Task> handler)
58 {
59 app.Router.Register(new Route()
60 {
61 Name = ActivityType.Message,
62 Type = app.Status is null ? RouteType.System : RouteType.User,
63 Handler = async context =>
64 {
65 await handler(context.ToActivityType<MessageActivity>(), context.CancellationToken).ConfigureAwait(false);
66 return null;
67 },
68 Selector = activity => activity is MessageActivity
69 });
70
71 return app;
72 }
73
74 [Obsolete("Use the handler with the cancellation token")]
75 public static App OnMessage(this App app, string pattern, Func<IContext<MessageActivity>, Task> handler)
76 {
77 app.Router.Register(new Route()
78 {
79 Name = ActivityType.Message,
80 Type = app.Status is null ? RouteType.System : RouteType.User,
81 Handler = async context =>
82 {
83 await handler(context.ToActivityType<MessageActivity>()).ConfigureAwait(false);
84 return null;
85 },
86 Selector = activity =>
87 {
88 if (activity is MessageActivity message)
89 {
90 return new Regex(pattern).IsMatch(message.Text);
91 }
92
93 return false;
94 }
95 });
96
97 return app;
98 }
99
100 public static App OnMessage(this App app, string pattern, Func<IContext<MessageActivity>, CancellationToken, Task> handler)
101 {
102 var regex = new Regex(pattern);
103 app.Router.Register(new Route()
104 {
105 Name = ActivityType.Message,
106 Type = app.Status is null ? RouteType.System : RouteType.User,
107 Handler = async context =>
108 {
109 await handler(context.ToActivityType<MessageActivity>(), context.CancellationToken).ConfigureAwait(false);
110 return null;
111 },
112 Selector = activity =>
113 {
114 if (activity is MessageActivity message)
115 {
116 return regex.IsMatch(message.Text);
117 }
118
119 return false;
120 }
121 });
122
123 return app;
124 }
125
126 [Obsolete("Use the handler with the cancellation token")]
127 public static App OnMessage(this App app, Regex regex, Func<IContext<MessageActivity>, Task> handler)
128 {
129 app.Router.Register(new Route()
130 {
131 Name = ActivityType.Message,
132 Type = app.Status is null ? RouteType.System : RouteType.User,
133 Handler = async context =>
134 {
135 await handler(context.ToActivityType<MessageActivity>()).ConfigureAwait(false);
136 return null;
137 },
138 Selector = activity =>
139 {
140 if (activity is MessageActivity message)
141 {
142 return regex.IsMatch(message.Text);
143 }
144
145 return false;
146 }
147 });
148
149 return app;
150 }
151
152 public static App OnMessage(this App app, Regex regex, Func<IContext<MessageActivity>, CancellationToken, Task> handler)
153 {
154 app.Router.Register(new Route()
155 {
156 Name = ActivityType.Message,
157 Type = app.Status is null ? RouteType.System : RouteType.User,
158 Handler = async context =>
159 {
160 await handler(context.ToActivityType<MessageActivity>(), context.CancellationToken).ConfigureAwait(false);
161 return null;
162 },
163 Selector = activity =>
164 {
165 if (activity is MessageActivity message)
166 {
167 return regex.IsMatch(message.Text);
168 }
169
170 return false;
171 }
172 });
173
174 return app;
175 }
176}